สร้าง (paster) command ใน Pylons เอง

ผมกะเอามาใช้เรียกงานที่เป็น 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

One thought on “สร้าง (paster) command ใน Pylons เอง

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s