beamtous / sandbox
Ritesh Nadhani sandbox. Maybe with all config files like .vimrc and all.
Clone this repository (size: 590.5 KB): HTTPS / SSH
$ hg clone http://bitbucket.org/beamtous/sandbox/
| commit 8: | f0301bb4425d |
| parent 7: | 8d21aff1e74c |
| branch: | default |
You can even serialize using xmltramp
| r8:f0301bb4425d | 145 loc | 3.1 KB | embed / history / annotate / raw / |
|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | """
Code to demonstrate serialization/deserialization
from xmltrampnode to SA ORM.
Shows example for both serialization and deserialization.
"""
import os
import xmltramp
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import mapper, relation, create_session, scoped_session
from sqlalchemy.orm import sessionmaker
DB = 'xmltramp.sqlite'
#For testing we always delete the DB :)
try:
os.remove(DB)
except OSError, e:
pass
metadata = MetaData()
class User(object):
def __str__(self):
return self.username
user_table = Table('user', metadata,
Column('id', Integer, primary_key=True),
Column('username', CHAR(length=25)),
Column('address_id', Integer, ForeignKey('address.id')))
class Address(object):
def __str__(self):
return self.address
address_table = Table('address', metadata,
Column('id', Integer, primary_key=True),
Column('address', CHAR(length=25)))
mapper(User, user_table,
properties={
'address':relation(Address, uselist=False, lazy=False),
})
mapper(Address, address_table)
engine = create_engine('sqlite:///%s' % DB, echo=False)
metadata.bind = engine
Session = sessionmaker()
metadata.create_all(engine)
print("DB created")
#XML to be tested.
xml = """
<xml>
<user>
<data>
<id>1</id>
<username>Ritesh</username>
<address_id>1</address_id>
</data>
<address>
<id>1</id>
<address>12330 Stowe Drive</address>
</address>
</user>
</xml>
"""
def deserialize(orm, xmltrampnode):
"""
Simple method that reads all attributes
from a xmltramp node and assigns its value
to orm property.
:returns: The original ORM.
>>> user = User()
>>> deserialize(user, doc.user)
"""
for column in orm.c:
setattr(orm, column.name,
str(getattr(xmltrampnode, column.name)))
return orm
def serialize(orm, xmltrampnode):
"""
Simple method that reads an ORM
and serializes all the column as element
node to the node object passed
"""
for column in orm.c:
xmltrampnode[column.name] = str(getattr(orm, column.name))
return orm
session = Session(bind=engine)
session.begin()
doc = xmltramp.parse(xml)
user = deserialize(User(), doc.user.data)
user.address = deserialize(Address(), doc.user.address)
#Bunch of unittest.
assert user.id == str(doc.user.data.id)
assert user.username == str(doc.user.data.username)
assert user.address_id == str(doc.user.data.address_id)
session.save_or_update(user)
session.commit()
#Unittest to make sure that the ORM
#was actually saved.
user = session.query(User).one()
assert str(user) == str(doc.user.data.username)
assert str(user.address) == str(doc.user.address.address)
#Test serialization.
output_xml = """
<xml>
<user>
<data>
</data>
<address>
</address>
</user>
</xml>
"""
output = xmltramp.parse(output_xml)
user = serialize(user, output.user.data)
address = serialize(user.address, output.user.address)
assert output.__repr__(True) == doc.__repr__(True)
print("Everything seems to be successful...")
|
