Advertisement
Guest User

Untitled

a guest
May 10th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.01 KB | None | 0 0
  1. # file: dto.py
  2.  
  3. """
  4. Data Transfer Objects
  5. """
  6.  
  7. __all__ = ['User', 'Profile', 'create_user', 'create_profile', 'NAMESPACE']
  8.  
  9. # AMF Namespace used for data transfer object crossing over into the
  10. # Flex/ActionScript world.
  11. NAMESPACE = 'org.iplant.usermanagement.model.dto'
  12.  
  13. class User(object):
  14.     """Models user values and is mapped as a data transfer object."""
  15.  
  16.     def __init__(self, username=None, email=None, password=None, profile=None,
  17.                  salt=None):
  18.         """Create an instance of the user data transfer object."""
  19.         self.username = username
  20.         self.email = email
  21.         self.password = password
  22.         self.profile = profile
  23.         self.salt = salt
  24.  
  25.     def __eq__(self, other):
  26.         """Define equality for users objects."""
  27.         return self.username == other.username
  28.  
  29.     def __ne__(self, other):
  30.         """Define inequality for user objects."""
  31.         return not self.__eq__(other)
  32.  
  33.  
  34. class Profile(object):
  35.     """Models user profile information and is mapped as a data transfer
  36.    object."""
  37.  
  38.     def __init__(self, first_name=None, last_name=None, institution=None):
  39.         """Create an instance of the user profile data transfer object."""
  40.         self.first_name = first_name
  41.         self.last_name = last_name
  42.         self.institution = institution
  43.  
  44.  
  45. def create_user(user):
  46.     """Create a User data transfer object from a User domain object.
  47.    
  48.    ``user``: if the argument is a data transfer object, this will function as
  49.    a copy-constructor or clone method."""
  50.     return User(user.username, user.email, user.password,
  51.                 create_profile(user.profile), user.salt)
  52.  
  53. def create_profile(profile):
  54.     """Create a Profile data transfer object from a Profile domain object.
  55.    
  56.    ``profile``: if the argument is a data transfer object, this will function
  57.    as a copy-constructor or clone method."""
  58.     if profile is not None:
  59.         return Profile(profile.first_name, profile.last_name,
  60.                        profile.institution)
  61.     else:
  62.         return None
  63.  
  64. # file: mappers.py
  65.  
  66. """
  67. Define mappings from Domain Objects to Relational Database tables
  68. """
  69.  
  70. import pyamf
  71. from pyamf import amf3
  72. from sqlalchemy import orm
  73. from usermgmt import domain, dto, tables
  74.  
  75. __all__ = ['setup', 'register_classes']
  76.  
  77. def setup():
  78.     """Perform mapping setup for all domain objects to database tables"""
  79.     orm.mapper(domain.User, tables.users, properties={
  80.                 'profile': orm.relation(domain.Profile,
  81.                                         remote_side=[tables.profiles.c.id])})
  82.     orm.mapper(domain.Profile, tables.profiles)
  83.  
  84. def register_classes():
  85.     """Register data transfer objects to be used with messaging via PyAMF."""
  86.     # set this so returned objects and arrays are bindable
  87.     amf3.user_proxies_default = True
  88.     # register domain objects that will be used with PyAMF
  89.     pyamf.register_class(dto.Profile, '%s.Profile' % dto.NAMESPACE)
  90.     pyamf.register_class(dto.User, '%s.User' % dto.NAMESPACE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement