長らくつまらないエントリーにお付き合いいただきましたが、今日が最終回でございます。いや、ブログエントリー自体はちょこちょここれからも書くつもりですが、毎日と縛りを付けて書くのはオシマイということで……。のつもりだったけど、このエントリーがあまりにも中途半端なので明日も書くでしょう。なんとまあ。
さて今日は、先日のエントリーで書いた Ubuntu の cloudprint パッケージの中をちょっと覗いてみましょうというお話。といっても自分、Python はあんまり得意じゃないので、そこんところはご容赦。
/usr/bin/cloudprint
短いので中身を全部転記しちゃってもいいですね。
#!/usr/bin/python # EASY-INSTALL-ENTRY-SCRIPT: 'cloudprint==0.5','console_scripts','cloudprint' __requires__ = 'cloudprint==0.5' import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.exit( load_entry_point('cloudprint==0.5', 'console_scripts', 'cloudprint')() )
これはまぁ setuptools でパッケージ化したスクリプトはこんなかんじになるらしくて、名前の通り load_entry_point で条件を満たすエントリーポイントを持ってきてそれを実行してるんでしょうねえ。適当。
ホントは pkg_resources のリファレンスを確認しようと思ったんだけどなんか繋がらないのでここらへんはフィーリングで。
/usr/share/pyshared/cloudprint/cloudprint.py
んで、持って来られる実体はこちら。
とりあえずクラスは
- CloudPrintProxy(object):
- PrinterProxy(object):
- App(object):
の三つです。というか CloudPrintProxy の責務が巨大すぎるってば……。
あとトップレベル関数が、
- sync_printers(cups_connection, cpp)
- process_job(cups_connection, cpp, printer, job)
- process_jobs(cups_connection, cpp, printers)
- usage()
- main()
の五つ。とりあえず main() から見て行きますかね。
main()
最初に起動オプションの確認をして、それから pycups ((system-config-printer の付属成果物として作られた CUPS ライブラリの Python バインディング) を使って CUPS とコネクションを張り、CloudPrintProxy() のインスタンスを cpp という変数に格納します。
それから必要なら Google Cloud Print の認証を取って、sync_printer() で CUPS の共有プリンターと Google Cloud Print サーバーに登録されているプリンターを sync して、最後に daemon モードの場合は python-daemon を使ってデーモン化し、そうでない場合はそのときに Cloud Print に投入されているジョブだけ処理したらその場で終了するようですね。
終わり?
うわー中途半端。でも今日はここで切ります。明日は sync_printers と process_job/process_jobs を読んだ後、CloudPrintProxy() の中に入っていきたいなと。