おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

cloudprint パッケージの中身を覗いてみる(その1)

長らくつまらないエントリーにお付き合いいただきましたが、今日が最終回でございます。いや、ブログエントリー自体はちょこちょここれからも書くつもりですが、毎日と縛りを付けて書くのはオシマイということで……。のつもりだったけど、このエントリーがあまりにも中途半端なので明日も書くでしょう。なんとまあ。

さて今日は、先日のエントリーで書いた 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() の中に入っていきたいなと。