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
|
from elixir import *
from elixir.ext.encrypted import acts_as_encrypted
def setup():
global Person, Pet
class Person(Entity):
name = Field(String(50))
password = Field(String(40))
ssn = Field(String(40))
pets = OneToMany('Pet')
acts_as_encrypted(for_fields=['password', 'ssn'], with_secret='secret')
class Pet(Entity):
name = Field(String(50))
codename = Field(String(50))
acts_as_encrypted(for_fields=['codename'], with_secret='secret2')
owner = ManyToOne('Person')
metadata.bind = 'sqlite:///'
def teardown():
cleanup_all()
class TestEncryption(object):
def setup(self):
setup_all(True)
def teardown(self):
drop_all()
session.clear()
def test_encryption(self):
jonathan = Person(
name=u'Jonathan LaCour',
password=u's3cr3tw0RD',
ssn=u'123-45-6789'
)
winston = Pet(
name='Winston',
codename='Pug/Shih-Tzu Mix'
)
nelson = Pet(
name='Nelson',
codename='Pug'
)
jonathan.pets = [winston, nelson]
session.commit(); session.clear()
p = Person.get_by(name='Jonathan LaCour')
assert p.password == 's3cr3tw0RD'
assert p.ssn == '123-45-6789'
assert p.pets[0].name == 'Winston'
assert p.pets[0].codename == 'Pug/Shih-Tzu Mix'
assert p.pets[1].name == 'Nelson'
assert p.pets[1].codename == 'Pug'
p.password = 'N3wpAzzw0rd'
session.commit(); session.clear()
p = Person.get_by(name='Jonathan LaCour')
assert p.password == 'N3wpAzzw0rd'
p.name = 'Jon LaCour'
session.commit(); session.clear()
|