c14n.py : on Google App Engine

PyXMLをダウンロード。

hdknr@LennyOne:~$ wget http://jaist.dl.sourceforge.net/sourceforge/pyxml/PyXML-0.8.4.tar.gz
–2009-06-24 10:42:41–  http://jaist.dl.sourceforge.net/sourceforge/pyxml/PyXML-0.8.4.tar.gz
jaist.dl.sourceforge.net をDNSに問いあわせています… 150.65.7.130
jaist.dl.sourceforge.net|150.65.7.130|:80 に接続しています… 接続しました。
HTTP による接続要求を送信しました、応答を待っています… 200 OK
長さ: 734954 (718K) [application/x-tar]
`PyXML-0.8.4.tar.gz’ に保存中

100%[=========================>] 734,954     78.3K/s 時間 8.1s

2009-06-24 10:42:52 (89.1 KB/s) – `PyXML-0.8.4.tar.gz’ へ保存完了 [734954/734954]

解凍

hdknr@LennyOne:~$ tar xfz PyXML-0.8.4.tar.gz

c14n.py をコピー

hdknr@LennyOne:~$ cp PyXML-0.8.4/xml/dom/ext/c14n.py gae/hoge/c14n/

サンプルのXML

hdknr@LennyOne:~$ cat /tmp/y.xml
<?xml version="1.0" encoding="UTF-8"?>
<employee>
<name EmpType="FTE">
  <first>Almanzo</first>
  <last>Wilder</last>
</name>
<name EmpType="Contracter">
  <first>Laura</first>
  <last>Ingalls</last>
</name>
</employee>

hdknr@LennyOne:~/gae/hoge$ python manage.py shell
WARNING:root:Could not read datastore data from /tmp/django_hidelafoglia.datastore
WARNING:root:Could not read datastore data from /tmp/django_hidelafoglia.datastore.history
INFO:root:zipimporter(‘/home/hdknr/gae/hoge/django.zip’, ‘django/core/serializers/’)
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from xml.dom import minidom
>>> src=”'<?xml version="1.0" encoding="UTF-8"?>
… <employee>
…  <name EmpType="FTE">
…   <first>Almanzo</first>
…   <last>Wilder</last>
…  </name>
…  <name EmpType="Contracter">
…   <first>Laura</first>
…   <last>Ingalls</last>
…  </name>
… </employee>
… ”’
>>> d=minidom.parseString(src)
>>> from c14n import c14n
>>> c14n.Canonicalize(d)
‘<employee>\n <name EmpType="FTE">\n  <first>Almanzo</first>\n  <last>Wilder</last>\n </name>\n <name EmpType="Contracter">\n  <first>Laura</first>\n  <last>Ingalls</last>\n </name>\n</employee>’

Canoniclizeのアクションを定義。

hdknr@LennyOne:~/gae/hoge$ more c14n/views.py
# Create your views here.

import sys
from django.shortcuts  import render_to_response

def index(reqeust):
  return render_to_response((‘c14n/index.html’),{’msg’:msg} )

def canonicalize(request):
  (src,result)=(request.POST[‘src’],”)
  try:
    import c14n
    test =”'<?xml version="1.0" encoding="UTF-8"?>
<employee>
<name EmpType="FTE">
  <first>Almanzo</first>
  <last>Wilder</last>
</name>
<name EmpType="Contracter">
  <first>Laura</first>
  <last>Ingalls</last>
</name>
</employee>
    ”’
    from xml.dom import minidom
    result = c14n.Canonicalize( minidom.parseString(src) )
  except:
    result = str(sys.exc_info()[0])+":"+str(sys.exc_info()[1])

  return render_to_response((‘c14n/canonicalize.html’),{’src’:src , ‘result’:result } )

テンプレート準備。

hdknr@LennyOne:~/gae/hoge$ tree templates/c14n/
templates/c14n/
|– canonicalize.html
`– index.html

0 directories, 2 files

urls.py修正

hdknr@LennyOne:~/gae/hoge$ more c14n/urls.py

from django.conf.urls.defaults import *
from views import *

urlpatterns = patterns(”,
    (r’^$’ , index ),
    (r’^canonicalize$’ , canonicalize),
)

ローカルで動いたので公開。

hdknr@LennyOne:~/gae/hoge$ python manage.py update
WARNING:root:Could not read datastore data from /tmp/django_hidelafoglia.datastore
WARNING:root:Could not read datastore data from /tmp/django_hidelafoglia.datastore.history
INFO:root:zipimporter(‘/home/hdknr/gae/hoge/django.zip’, ‘django/core/serializers/’)
Scanning files on local disk.
Scanned 500 files.
Scanned 1000 files.
Initiating update.
Cloning 65 application files.
Uploading 4 files.
Deploying new version.
Checking if new version is ready to serve.
Will check again in 1 seconds.
Checking if new version is ready to serve.
Closing update: new version is ready to start serving.
Uploading index definitions.

実行。

WS000000

WS000001

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中