Guest User

Untitled

a guest
Jun 19th, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. """The application's model objects"""
  2. import sha
  3. from pylons import session
  4. import sqlalchemy as sa
  5. from sqlalchemy import orm
  6.  
  7. from irective.model import meta
  8.  
  9. def init_model(engine):
  10. """Call me before using any of the tables or classes in the model"""
  11. meta.Session.configure(bind=engine)
  12. meta.engine = engine
  13.  
  14. project_assocs_table = sa.Table(
  15. 'ProjectAssocs', meta.metadata,
  16. sa.Column('left_id', sa.types.Integer, sa.ForeignKey('Users.id')),
  17. sa.Column('right_id', sa.types.Integer, sa.ForeignKey('Projects.id')),
  18. )
  19.  
  20. users_table = sa.Table(
  21. 'Users', meta.metadata,
  22. sa.Column('id', sa.types.Integer, primary_key=True),
  23. sa.Column('enabled', sa.types.Boolean),
  24. sa.Column('name', sa.types.Unicode(255), unique=True),
  25. sa.Column('password', sa.types.String(40))
  26. )
  27. orm.mapper(User, users_table,
  28. properties=dict(
  29. projects=orm.relation(Project, secondary=project_assocs_table, backref='users'),
  30. )
  31. )
  32.  
  33. projects_table = sa.Table(
  34. 'Projects', meta.metadata,
  35. sa.Column('id', sa.types.Integer, primary_key=True),
  36. sa.Column('enabled', sa.types.Boolean),
  37. sa.Column('name', sa.types.Unicode(255))
  38. )
  39. orm.mapper(Project, projects_table,
  40. properties=dict(
  41. files=orm.relation(File, backref='project')
  42. )
  43. )
  44.  
  45. files_table = sa.Table(
  46. 'Files', meta.metadata,
  47. sa.Column('id', sa.types.Integer, primary_key=True),
  48. sa.Column('project_id', sa.types.Integer, sa.ForeignKey('Projects.id')),
  49. sa.Column('name', sa.types.Unicode(255)),
  50. sa.Column('fn', sa.types.String(255))
  51. )
  52. orm.mapper(File, files_table,
  53. properties=dict(
  54. attrs=orm.relation(Attr, backref='file'),
  55. symbols=orm.relation(Symbol, backref='file'),
  56. )
  57. )
  58.  
  59. attrs_table = sa.Table(
  60. 'Attrs', meta.metadata,
  61. sa.Column('id', sa.types.Integer, primary_key=True),
  62. sa.Column('file_id', sa.types.Integer, sa.ForeignKey('Files.id')),
  63. sa.Column('name', sa.types.String(255)),
  64. sa.Column('data', sa.types.PickleType())
  65. )
  66. orm.mapper(Attr, attrs_table)
  67.  
  68. symbols_table = sa.Table(
  69. 'Symbols', meta.metadata,
  70. sa.Column('id', sa.types.Integer, primary_key=True),
  71. sa.Column('file_id', sa.types.Integer, sa.ForeignKey('Files.id')),
  72. sa.Column('type', sa.types.String(255)),
  73. sa.Column('address', sa.types.Integer),
  74. sa.Column('data', sa.types.PickleType())
  75. )
  76. orm.mapper(Symbol, symbols_table)
  77.  
  78. class User(object):
  79. @staticmethod
  80. def login(username, password):
  81. try:
  82. user = meta.Session.query(User).filter(
  83. User.enabled and
  84. User.name == username and
  85. User.password == sha.new(password).hexdigest()
  86. ).one()
  87. session['uid'] = user.id
  88. session.save()
  89. return True
  90. except:
  91. return False
  92.  
  93. @staticmethod
  94. def register(username, password):
  95. user = User()
  96. user.enabled = True
  97. user.name = username
  98. user.password = sha.new(password).hexdigest()
  99. meta.Session.add(user)
  100. try:
  101. meta.Session.commit()
  102. except:
  103. return False
  104. return User.login(username, password)
  105.  
  106. @staticmethod
  107. def get():
  108. return meta.Session.query(User).filter(User.id == session['uid']).one()
  109.  
  110. @staticmethod
  111. def getProjects():
  112. return filter(lambda x: x.enabled, User.get().projects)
  113.  
  114. class Project(object):
  115. @staticmethod
  116. def add(name):
  117. project = Project()
  118. project.enabled = True
  119. project.name = name
  120. meta.Session.add(project)
  121.  
  122. user = User.get()
  123. user.projects.append(project)
  124.  
  125. meta.Session.commit()
  126.  
  127. @staticmethod
  128. def get(id):
  129. try:
  130. return meta.Session.query(Project).filter(Project.id == id).one()
  131. except:
  132. return None
  133.  
  134. class File(object):
  135. def addAttr(self, name, data):
  136. attr = self.getAttr(name)
  137. if attr == None:
  138. attr = Attr()
  139. attr.file = self
  140. attr.name = name
  141. meta.Session.add(attr)
  142. else:
  143. attr.data = data
  144.  
  145. def getAttr(self, name):
  146. try:
  147. return meta.Session.query(Attr).filter(Attr.file_id == self.id and Attr.name == name).one()
  148. except:
  149. return None
  150.  
  151. def addSymbol(self, symbol):
  152. symbol.file = self
  153. self.symbols.append(symbol)
  154. meta.Session.add(symbol)
  155.  
  156. def getSymbols(self, type=None, addr_range=None):
  157. query = meta.Session.query(Symbol)
  158. if type != None:
  159. query = query.filter(Symbol.type == type)
  160. if addr_range != None:
  161. query = query.filter(Symbol.address >= addr_range[0] and Symbol.address < addr_range[1])
  162. return query.all()
  163.  
  164. class Attr(object):
  165. pass
  166.  
  167. class Symbol(object):
  168. pass
Add Comment
Please, Sign In to add comment