mdfmonitor - ファイルとURLの更新をモニタリング
mdfmonitorは、ファイルのタイムスタンプやURLのDataヘッダーを使って、ファイルやURLの更新をモニタリングするPythonモジュールです。
mdfmonitor contains:
- FileModificationMonitor
- URLModificationMonitor
FileModificationMonitor
FileModificationMonitor(これ以降「monitor」と呼びます)は、 ファイル の更新をモニタリングします。
Monitorはファイルの タイムスタンプデータ と ファイルの中身のデータ を持つリポジトリを持っています。まず最初にオリジナルなタイムスタンプデータとファイルの中身のデータを挿入します。次に、新しくタイムスタンプデータ、ファイルの中身データを取得し、これら古いデータと新しいデータを 比較 して、異なっていた場合、それを 更新 とみなし、オブジェクトにしてyieldします。
使い方
シンプルに使えます。
- モジュールを
import
します -
FileModificationMonitor
のインスタンスを作ります - ファイルを登録します
- monitorメソッドがモニタリングを開始し、オブジェクトを返すのでfor文を使って処理を描いて下さい。
#!/usr/bin/python
import os
from mdfmonitor import FileModificationMonitor
files = os.listdir(".") # >>> ['sample.txt', 'sample.py']
# create Watcher instnce
monitor = FileModificationMonitor()
# append file to mdfmonitor instance
monitor.add_file("sample.txt")
# or
# append files to mdfmonitor instance
monitor.add_files(os.listdir("."))
for mdf in monitor.monitor():
print mdf.file.center(30, "=")
print "Catch the Modification!!"
print "Old timestamp: %s" % mdf.old_mtime
print "New timestamp: %s" % mdf.new_mtime
print "manager: %s" % str(mdf.manager.o_repository)
print "Diff".center(30,"=")
print mdf.diff
URLModificationMonitor
URLModificationMonitor(これも「monitor」と呼びます)は、URLのコンテンツの更新をモニタリング出来ます。
Monitorの構造はだいたいFileModificationMonitor
と同じです。
違うところはタイムスタンプデータじゃなくて、URLのResponse
ヘッダーについてくる Date ヘッダーを使用して更新を見つけているところ。
使い方
これもだいたい同じ。
- モジュールを
import
します -
URLModificationMonitor
のインスタンスを作ります - URLを登録します
- monitorメソッドがモニタリングを開始し、オブジェクトを返すのでfor文を使って処理を描いて下さい。
#!/usr/bin/python
import os
from mdfmonitor import URLModificationMonitor
files = os.listdir(".") # >>> ['sample.txt', 'sample.py']
# create Watcher instnce
monitor = URLModificationMonitor()
# append file to mdfmonitor instance
monitor.add_url("http://sampe.com/path/")
for mdf in monitor.monitor():
print mdf.url.center(30, "=")
print "Catch the Modification!!"
print "Old timestamp: %s" % mdf.old_dtime
print "New timestamp: %s" % mdf.new_dtime
print "manager: %s" % str(mdf.manager.o_repository)
print "Diff".center(30,"=")
print mdf.diff
mdfmonitorの強み
① 差分
FileModificationMonitor、 URLModificationMonitor どちらも ModificationObject というオブジェクトをyieldするのですが、このオブジェクトには新しいBodyデータと、古いデータがあり、それに基づいて diff という差分文字列を生成します。(Pythonのdifflib
といモジュールを使用しています)
② ModificationObjectManager
更新に履歴はつきものですよね。
ModificationObjectManagerは、その履歴を保存するクラスです 。
Managerのo_repositoryという配列には、更新のオブジェクトが挿入されており、その配列がそのまま更新の履歴になります。
インストール方法
Pythonのモジュールなので、pip
やeasy_install
が使えます。
``shell
$ sudo easy_install mdfmonitor
それか、`git`を使って下さい
```shell
$ git clone https://github.com/alice1017/mdfmonitor.git
$ cd mdfmonitor
$ sudo pyton setup.py build install
LICENSE
MITライセンスです
というわけで
というわけで、mdfmonitorの紹介でした。
PYPIで探したところ、こういうモジュールはあまりなかったので、改めて作ってみました。READMEやdocstringの英語がひどいのは仕様です。
「もっとこういう設計にしたほうがいい」とか、「バグがある」とかいう場合はgithubにプルリクかコメントお願いします。
mdfmonitorを使って何ができるか
mdfmonitorは、ファイルの更新をモニタリングするスクリプトなので、
git でバージョン管理している人は、自動 add や自動 commit を実装することが可能です。