ผมกะเอามาใช้เรียกงานที่เป็น batch ทำในเว็บยาวๆ ก็จะเรียกจาก shell หรือว่าเรียกจาก cron เอา ก็เลยสร้าง command ขึ้นมา จะได้ไม่ต้องไปทำ configuration ของ database ต่างหาก
สมมุติ package ชื่อ as นะ เวลาจำทำแบบนี้ ก็ไปสร้าง folder ชื่อ command ใน as/as แล้วก็สร้างไฟล์ __init__.py และ do_sth.py ขึ้นมาประมาณนี้
# do_sth.py
class DoSth(Command):
# Parser configuration
summary = "Do sth"
usage = "Just use it"
group_name = "myapp"
parser = Command.standard_parser(verbose=False)
min_args = 0
takes_config_file = 1
requires_config_file = True
def command(self):
print "!!!", self.args
อันนี้มันก็ไม่ทำอะไรแค่ print ออกมาดู
แล้วก็เพิ่มใน entry_points ใน setup.py อีกที
[paste.paster_command]
do-sth = as.commands.do_sth:DoSth
จากนั้นก็สั่ง python setup.py develop
ต่อจากนี้นก็เรียกเลย
วิธีเรียกใช้
paster --plugin=as do-sth
ในกรณีนี้คือคำสั่งชื่อ do-sth
ผมอ่านมาจาก http://pylonshq.com/docs/en/0.9.7/advanced_pylons/paster_commands/ แล้วลองทำตามดูอีกที
พอได้ command มาแล้วสิ่งที่อยากทำหลักๆ เลย คือใช้ model ก็แก้ do_sth.py เป็นแบบนี้
from paste.script.command import Command
from as import model
from paste.deploy import loadapp
import os
class DoSth(Command):
# Parser configuration
summary = "Do Something"
usage = "Just use it"
group_name = "myapp"
parser = Command.standard_parser(verbose=False)
min_args = 0
takes_config_file = 1
requires_config_file = True
def command(self):
# โหลด app ขึ้นมา
base = os.getcwd()
app_spec = "config:" + self.args[0]
app = loadapp(app_spec, relative_to=base)
# แล้วก็เอา model มาใช้ได้แล้ว
from annotedw import model
# ทำอะไรต่างกับ model ได้เลย
เวลาเรียกใช้ก็เป็นแบบนี้
paster --plugin=as do-sth development.ini
12.681721
101.256032