PageRenderTime 57ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/lib/galaxy/model/mapping.py

https://bitbucket.org/cistrome/cistrome-harvard/
Python | 1910 lines | 1580 code | 266 blank | 64 comment | 5 complexity | 671bc2833c7941cf78847d9c8f1d10bd MD5 | raw file
  1. """
  2. Details of how the data model objects are mapped onto the relational database
  3. are encapsulated here.
  4. """
  5. import logging
  6. import pkg_resources
  7. from sqlalchemy import and_, asc, Boolean, Column, DateTime, desc, ForeignKey, Integer, MetaData, not_, Numeric, select, String, Table, TEXT, Unicode, UniqueConstraint
  8. from sqlalchemy.ext.associationproxy import association_proxy
  9. from sqlalchemy.ext.orderinglist import ordering_list
  10. from sqlalchemy.types import BigInteger
  11. from sqlalchemy.orm import backref, object_session, relation, mapper, class_mapper
  12. from sqlalchemy.orm.collections import attribute_mapped_collection
  13. from galaxy import model
  14. from galaxy.model.orm.engine_factory import build_engine
  15. from galaxy.model.orm.now import now
  16. from galaxy.model.custom_types import JSONType, MetadataType, TrimmedString, UUIDType
  17. from galaxy.model.base import ModelMapping
  18. from galaxy.security import GalaxyRBACAgent
  19. log = logging.getLogger( __name__ )
  20. metadata = MetaData()
  21. model.User.table = Table( "galaxy_user", metadata,
  22. Column( "id", Integer, primary_key=True),
  23. Column( "create_time", DateTime, default=now ),
  24. Column( "update_time", DateTime, default=now, onupdate=now ),
  25. Column( "email", TrimmedString( 255 ), index=True, nullable=False ),
  26. Column( "username", TrimmedString( 255 ), index=True, unique=True ),
  27. Column( "password", TrimmedString( 255 ), nullable=False ),
  28. Column( "external", Boolean, default=False ),
  29. Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
  30. Column( "deleted", Boolean, index=True, default=False ),
  31. Column( "purged", Boolean, index=True, default=False ),
  32. Column( "disk_usage", Numeric( 15, 0 ), index=True ) ,
  33. Column( "active", Boolean, index=True, default=True, nullable=False ),
  34. Column( "activation_token", TrimmedString( 64 ), nullable=True, index=True ) )
  35. model.UserAddress.table = Table( "user_address", metadata,
  36. Column( "id", Integer, primary_key=True),
  37. Column( "create_time", DateTime, default=now ),
  38. Column( "update_time", DateTime, default=now, onupdate=now ),
  39. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  40. Column( "desc", TrimmedString( 255 )),
  41. Column( "name", TrimmedString( 255 ), nullable=False),
  42. Column( "institution", TrimmedString( 255 )),
  43. Column( "address", TrimmedString( 255 ), nullable=False),
  44. Column( "city", TrimmedString( 255 ), nullable=False),
  45. Column( "state", TrimmedString( 255 ), nullable=False),
  46. Column( "postal_code", TrimmedString( 255 ), nullable=False),
  47. Column( "country", TrimmedString( 255 ), nullable=False),
  48. Column( "phone", TrimmedString( 255 )),
  49. Column( "deleted", Boolean, index=True, default=False ),
  50. Column( "purged", Boolean, index=True, default=False ) )
  51. model.UserOpenID.table = Table( "galaxy_user_openid", metadata,
  52. Column( "id", Integer, primary_key=True ),
  53. Column( "create_time", DateTime, default=now ),
  54. Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
  55. Column( "session_id", Integer, ForeignKey( "galaxy_session.id" ), index=True ),
  56. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  57. Column( "openid", TEXT, index=True, unique=True ),
  58. Column( "provider", TrimmedString( 255 ) ),
  59. )
  60. model.History.table = Table( "history", metadata,
  61. Column( "id", Integer, primary_key=True),
  62. Column( "create_time", DateTime, default=now ),
  63. Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
  64. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  65. Column( "name", TrimmedString( 255 ) ),
  66. Column( "hid_counter", Integer, default=1 ),
  67. Column( "deleted", Boolean, index=True, default=False ),
  68. Column( "purged", Boolean, index=True, default=False ),
  69. Column( "importing", Boolean, index=True, default=False ),
  70. Column( "genome_build", TrimmedString( 40 ) ),
  71. Column( "importable", Boolean, default=False ),
  72. Column( "slug", TEXT, index=True ),
  73. Column( "published", Boolean, index=True, default=False ) )
  74. model.HistoryUserShareAssociation.table = Table( "history_user_share_association", metadata,
  75. Column( "id", Integer, primary_key=True ),
  76. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  77. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True )
  78. )
  79. model.HistoryDatasetAssociation.table = Table( "history_dataset_association", metadata,
  80. Column( "id", Integer, primary_key=True ),
  81. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  82. Column( "dataset_id", Integer, ForeignKey( "dataset.id" ), index=True ),
  83. Column( "create_time", DateTime, default=now ),
  84. Column( "update_time", DateTime, default=now, onupdate=now ),
  85. Column( "state", TrimmedString( 64 ), index=True, key="_state" ),
  86. Column( "copied_from_history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id" ), nullable=True ),
  87. Column( "copied_from_library_dataset_dataset_association_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), nullable=True ),
  88. Column( "hid", Integer ),
  89. Column( "name", TrimmedString( 255 ) ),
  90. Column( "info", TrimmedString( 255 ) ),
  91. Column( "blurb", TrimmedString( 255 ) ),
  92. Column( "peek" , TEXT ),
  93. Column( "tool_version" , TEXT ),
  94. Column( "extension", TrimmedString( 64 ) ),
  95. Column( "metadata", MetadataType(), key="_metadata" ),
  96. Column( "parent_id", Integer, ForeignKey( "history_dataset_association.id" ), nullable=True ),
  97. Column( "designation", TrimmedString( 255 ) ),
  98. Column( "deleted", Boolean, index=True, default=False ),
  99. Column( "purged", Boolean, index=True, default=False ),
  100. Column( "visible", Boolean ),
  101. Column( "extended_metadata_id", Integer,
  102. ForeignKey( "extended_metadata.id" ), index=True )
  103. )
  104. model.Dataset.table = Table( "dataset", metadata,
  105. Column( "id", Integer, primary_key=True ),
  106. Column( "create_time", DateTime, default=now ),
  107. Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
  108. Column( "state", TrimmedString( 64 ), index=True ),
  109. Column( "deleted", Boolean, index=True, default=False ),
  110. Column( "purged", Boolean, index=True, default=False ),
  111. Column( "purgable", Boolean, default=True ),
  112. Column( "object_store_id", TrimmedString( 255 ), index=True ),
  113. Column( "external_filename" , TEXT ),
  114. Column( "_extra_files_path", TEXT ),
  115. Column( 'file_size', Numeric( 15, 0 ) ),
  116. Column( 'total_size', Numeric( 15, 0 ) ),
  117. Column( 'uuid', UUIDType() ) )
  118. model.HistoryDatasetAssociationDisplayAtAuthorization.table = Table( "history_dataset_association_display_at_authorization", metadata,
  119. Column( "id", Integer, primary_key=True ),
  120. Column( "create_time", DateTime, default=now ),
  121. Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
  122. Column( "history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  123. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  124. Column( "site", TrimmedString( 255 ) ) )
  125. model.HistoryDatasetAssociationSubset.table = Table( "history_dataset_association_subset", metadata,
  126. Column( "id", Integer, primary_key=True ),
  127. Column( "history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  128. Column( "history_dataset_association_subset_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  129. Column( "location", Unicode(255), index=True) )
  130. model.ImplicitlyConvertedDatasetAssociation.table = Table( "implicitly_converted_dataset_association", metadata,
  131. Column( "id", Integer, primary_key=True ),
  132. Column( "create_time", DateTime, default=now ),
  133. Column( "update_time", DateTime, default=now, onupdate=now ),
  134. Column( "hda_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True, nullable=True ),
  135. Column( "ldda_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), index=True, nullable=True ),
  136. Column( "hda_parent_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  137. Column( "ldda_parent_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), index=True ),
  138. Column( "deleted", Boolean, index=True, default=False ),
  139. Column( "metadata_safe", Boolean, index=True, default=True ),
  140. Column( "type", TrimmedString( 255 ) ) )
  141. model.ValidationError.table = Table( "validation_error", metadata,
  142. Column( "id", Integer, primary_key=True ),
  143. Column( "dataset_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  144. Column( "message", TrimmedString( 255 ) ),
  145. Column( "err_type", TrimmedString( 64 ) ),
  146. Column( "attributes", TEXT ) )
  147. model.Group.table = Table( "galaxy_group", metadata,
  148. Column( "id", Integer, primary_key=True ),
  149. Column( "create_time", DateTime, default=now ),
  150. Column( "update_time", DateTime, default=now, onupdate=now ),
  151. Column( "name", String( 255 ), index=True, unique=True ),
  152. Column( "deleted", Boolean, index=True, default=False ) )
  153. model.UserGroupAssociation.table = Table( "user_group_association", metadata,
  154. Column( "id", Integer, primary_key=True ),
  155. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  156. Column( "group_id", Integer, ForeignKey( "galaxy_group.id" ), index=True ),
  157. Column( "create_time", DateTime, default=now ),
  158. Column( "update_time", DateTime, default=now, onupdate=now ) )
  159. model.UserRoleAssociation.table = Table( "user_role_association", metadata,
  160. Column( "id", Integer, primary_key=True ),
  161. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  162. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ),
  163. Column( "create_time", DateTime, default=now ),
  164. Column( "update_time", DateTime, default=now, onupdate=now ) )
  165. model.GroupRoleAssociation.table = Table( "group_role_association", metadata,
  166. Column( "id", Integer, primary_key=True ),
  167. Column( "group_id", Integer, ForeignKey( "galaxy_group.id" ), index=True ),
  168. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ),
  169. Column( "create_time", DateTime, default=now ),
  170. Column( "update_time", DateTime, default=now, onupdate=now ) )
  171. model.Role.table = Table( "role", metadata,
  172. Column( "id", Integer, primary_key=True ),
  173. Column( "create_time", DateTime, default=now ),
  174. Column( "update_time", DateTime, default=now, onupdate=now ),
  175. Column( "name", String( 255 ), index=True, unique=True ),
  176. Column( "description", TEXT ),
  177. Column( "type", String( 40 ), index=True ),
  178. Column( "deleted", Boolean, index=True, default=False ) )
  179. model.UserQuotaAssociation.table = Table( "user_quota_association", metadata,
  180. Column( "id", Integer, primary_key=True ),
  181. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  182. Column( "quota_id", Integer, ForeignKey( "quota.id" ), index=True ),
  183. Column( "create_time", DateTime, default=now ),
  184. Column( "update_time", DateTime, default=now, onupdate=now ) )
  185. model.GroupQuotaAssociation.table = Table( "group_quota_association", metadata,
  186. Column( "id", Integer, primary_key=True ),
  187. Column( "group_id", Integer, ForeignKey( "galaxy_group.id" ), index=True ),
  188. Column( "quota_id", Integer, ForeignKey( "quota.id" ), index=True ),
  189. Column( "create_time", DateTime, default=now ),
  190. Column( "update_time", DateTime, default=now, onupdate=now ) )
  191. model.Quota.table = Table( "quota", metadata,
  192. Column( "id", Integer, primary_key=True ),
  193. Column( "create_time", DateTime, default=now ),
  194. Column( "update_time", DateTime, default=now, onupdate=now ),
  195. Column( "name", String( 255 ), index=True, unique=True ),
  196. Column( "description", TEXT ),
  197. Column( "bytes", BigInteger ),
  198. Column( "operation", String( 8 ) ),
  199. Column( "deleted", Boolean, index=True, default=False ) )
  200. model.DefaultQuotaAssociation.table = Table( "default_quota_association", metadata,
  201. Column( "id", Integer, primary_key=True ),
  202. Column( "create_time", DateTime, default=now ),
  203. Column( "update_time", DateTime, default=now, onupdate=now ),
  204. Column( "type", String( 32 ), index=True, unique=True ),
  205. Column( "quota_id", Integer, ForeignKey( "quota.id" ), index=True ) )
  206. model.DatasetPermissions.table = Table( "dataset_permissions", metadata,
  207. Column( "id", Integer, primary_key=True ),
  208. Column( "create_time", DateTime, default=now ),
  209. Column( "update_time", DateTime, default=now, onupdate=now ),
  210. Column( "action", TEXT ),
  211. Column( "dataset_id", Integer, ForeignKey( "dataset.id" ), index=True ),
  212. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ) )
  213. model.LibraryPermissions.table = Table( "library_permissions", metadata,
  214. Column( "id", Integer, primary_key=True ),
  215. Column( "create_time", DateTime, default=now ),
  216. Column( "update_time", DateTime, default=now, onupdate=now ),
  217. Column( "action", TEXT ),
  218. Column( "library_id", Integer, ForeignKey( "library.id" ), nullable=True, index=True ),
  219. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ) )
  220. model.LibraryFolderPermissions.table = Table( "library_folder_permissions", metadata,
  221. Column( "id", Integer, primary_key=True ),
  222. Column( "create_time", DateTime, default=now ),
  223. Column( "update_time", DateTime, default=now, onupdate=now ),
  224. Column( "action", TEXT ),
  225. Column( "library_folder_id", Integer, ForeignKey( "library_folder.id" ), nullable=True, index=True ),
  226. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ) )
  227. model.LibraryDatasetPermissions.table = Table( "library_dataset_permissions", metadata,
  228. Column( "id", Integer, primary_key=True ),
  229. Column( "create_time", DateTime, default=now ),
  230. Column( "update_time", DateTime, default=now, onupdate=now ),
  231. Column( "action", TEXT ),
  232. Column( "library_dataset_id", Integer, ForeignKey( "library_dataset.id" ), nullable=True, index=True ),
  233. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ) )
  234. model.LibraryDatasetDatasetAssociationPermissions.table = Table( "library_dataset_dataset_association_permissions", metadata,
  235. Column( "id", Integer, primary_key=True ),
  236. Column( "create_time", DateTime, default=now ),
  237. Column( "update_time", DateTime, default=now, onupdate=now ),
  238. Column( "action", TEXT ),
  239. Column( "library_dataset_dataset_association_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), nullable=True, index=True ),
  240. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ) )
  241. model.DefaultUserPermissions.table = Table( "default_user_permissions", metadata,
  242. Column( "id", Integer, primary_key=True ),
  243. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  244. Column( "action", TEXT ),
  245. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ) )
  246. model.DefaultHistoryPermissions.table = Table( "default_history_permissions", metadata,
  247. Column( "id", Integer, primary_key=True ),
  248. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  249. Column( "action", TEXT ),
  250. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ) )
  251. model.LibraryDataset.table = Table( "library_dataset", metadata,
  252. Column( "id", Integer, primary_key=True ),
  253. Column( "library_dataset_dataset_association_id", Integer, ForeignKey( "library_dataset_dataset_association.id", use_alter=True, name="library_dataset_dataset_association_id_fk" ), nullable=True, index=True ),#current version of dataset, if null, there is not a current version selected
  254. Column( "folder_id", Integer, ForeignKey( "library_folder.id" ), index=True ),
  255. Column( "order_id", Integer ), #not currently being used, but for possible future use
  256. Column( "create_time", DateTime, default=now ),
  257. Column( "update_time", DateTime, default=now, onupdate=now ),
  258. Column( "name", TrimmedString( 255 ), key="_name", index=True ), #when not None/null this will supercede display in library (but not when imported into user's history?)
  259. Column( "info", TrimmedString( 255 ), key="_info" ), #when not None/null this will supercede display in library (but not when imported into user's history?)
  260. Column( "deleted", Boolean, index=True, default=False ),
  261. Column( "purged", Boolean, index=True, default=False ) )
  262. model.LibraryDatasetDatasetAssociation.table = Table( "library_dataset_dataset_association", metadata,
  263. Column( "id", Integer, primary_key=True ),
  264. Column( "library_dataset_id", Integer, ForeignKey( "library_dataset.id" ), index=True ),
  265. Column( "dataset_id", Integer, ForeignKey( "dataset.id" ), index=True ),
  266. Column( "create_time", DateTime, default=now ),
  267. Column( "update_time", DateTime, default=now, onupdate=now ),
  268. Column( "state", TrimmedString( 64 ), index=True, key="_state" ),
  269. Column( "copied_from_history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id", use_alter=True, name='history_dataset_association_dataset_id_fkey' ), nullable=True ),
  270. Column( "copied_from_library_dataset_dataset_association_id", Integer, ForeignKey( "library_dataset_dataset_association.id", use_alter=True, name='library_dataset_dataset_association_id_fkey' ), nullable=True ),
  271. Column( "name", TrimmedString( 255 ), index=True ),
  272. Column( "info", TrimmedString( 255 ) ),
  273. Column( "blurb", TrimmedString( 255 ) ),
  274. Column( "peek" , TEXT ),
  275. Column( "tool_version" , TEXT ),
  276. Column( "extension", TrimmedString( 64 ) ),
  277. Column( "metadata", MetadataType(), key="_metadata" ),
  278. Column( "parent_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), nullable=True ),
  279. Column( "designation", TrimmedString( 255 ) ),
  280. Column( "deleted", Boolean, index=True, default=False ),
  281. Column( "visible", Boolean ),
  282. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  283. Column( "message", TrimmedString( 255 ) ),
  284. Column( "extended_metadata_id", Integer,
  285. ForeignKey( "extended_metadata.id" ), index=True )
  286. )
  287. model.ExtendedMetadata.table = Table("extended_metadata", metadata,
  288. Column( "id", Integer, primary_key=True ),
  289. Column( "data", JSONType ) )
  290. model.ExtendedMetadataIndex.table = Table("extended_metadata_index", metadata,
  291. Column( "id", Integer, primary_key=True ),
  292. Column( "extended_metadata_id", Integer, ForeignKey("extended_metadata.id",
  293. onupdate="CASCADE",
  294. ondelete="CASCADE" ),
  295. index=True ),
  296. Column( "path", String( 255 )),
  297. Column( "value", TEXT))
  298. model.Library.table = Table( "library", metadata,
  299. Column( "id", Integer, primary_key=True ),
  300. Column( "root_folder_id", Integer, ForeignKey( "library_folder.id" ), index=True ),
  301. Column( "create_time", DateTime, default=now ),
  302. Column( "update_time", DateTime, default=now, onupdate=now ),
  303. Column( "name", String( 255 ), index=True ),
  304. Column( "deleted", Boolean, index=True, default=False ),
  305. Column( "purged", Boolean, index=True, default=False ),
  306. Column( "description", TEXT ),
  307. Column( "synopsis", TEXT ) )
  308. model.LibraryFolder.table = Table( "library_folder", metadata,
  309. Column( "id", Integer, primary_key=True ),
  310. Column( "parent_id", Integer, ForeignKey( "library_folder.id" ), nullable = True, index=True ),
  311. Column( "create_time", DateTime, default=now ),
  312. Column( "update_time", DateTime, default=now, onupdate=now ),
  313. Column( "name", TEXT, index=True ),
  314. Column( "description", TEXT ),
  315. Column( "order_id", Integer ), #not currently being used, but for possible future use
  316. Column( "item_count", Integer ),
  317. Column( "deleted", Boolean, index=True, default=False ),
  318. Column( "purged", Boolean, index=True, default=False ),
  319. Column( "genome_build", TrimmedString( 40 ) ) )
  320. model.LibraryInfoAssociation.table = Table( 'library_info_association', metadata,
  321. Column( "id", Integer, primary_key=True ),
  322. Column( "library_id", Integer, ForeignKey( "library.id" ), index=True ),
  323. Column( "form_definition_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  324. Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
  325. Column( "inheritable", Boolean, index=True, default=False ),
  326. Column( "deleted", Boolean, index=True, default=False ) )
  327. model.LibraryFolderInfoAssociation.table = Table( 'library_folder_info_association', metadata,
  328. Column( "id", Integer, primary_key=True ),
  329. Column( "library_folder_id", Integer, ForeignKey( "library_folder.id" ), nullable=True, index=True ),
  330. Column( "form_definition_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  331. Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
  332. Column( "inheritable", Boolean, index=True, default=False ),
  333. Column( "deleted", Boolean, index=True, default=False ) )
  334. model.LibraryDatasetDatasetInfoAssociation.table = Table( 'library_dataset_dataset_info_association', metadata,
  335. Column( "id", Integer, primary_key=True ),
  336. Column( "library_dataset_dataset_association_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), nullable=True, index=True ),
  337. Column( "form_definition_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  338. Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
  339. Column( "deleted", Boolean, index=True, default=False ) )
  340. model.Job.table = Table( "job", metadata,
  341. Column( "id", Integer, primary_key=True ),
  342. Column( "create_time", DateTime, default=now ),
  343. Column( "update_time", DateTime, default=now, onupdate=now ),
  344. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  345. Column( "library_folder_id", Integer, ForeignKey( "library_folder.id" ), index=True ),
  346. Column( "tool_id", String( 255 ) ),
  347. Column( "tool_version", TEXT, default="1.0.0" ),
  348. Column( "state", String( 64 ), index=True ),
  349. Column( "info", TrimmedString( 255 ) ),
  350. Column( "command_line", TEXT ),
  351. Column( "param_filename", String( 1024 ) ),
  352. Column( "runner_name", String( 255 ) ),
  353. Column( "stdout", TEXT ),
  354. Column( "stderr", TEXT ),
  355. Column( "exit_code", Integer, nullable=True ),
  356. Column( "traceback", TEXT ),
  357. Column( "session_id", Integer, ForeignKey( "galaxy_session.id" ), index=True, nullable=True ),
  358. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True, nullable=True ),
  359. Column( "job_runner_name", String( 255 ) ),
  360. Column( "job_runner_external_id", String( 255 ) ),
  361. Column( "destination_id", String( 255 ), nullable=True ),
  362. Column( "destination_params", JSONType, nullable=True ),
  363. Column( "object_store_id", TrimmedString( 255 ), index=True ),
  364. Column( "imported", Boolean, default=False, index=True ),
  365. Column( "params", TrimmedString(255), index=True ),
  366. Column( "handler", TrimmedString( 255 ), index=True ) )
  367. model.JobParameter.table = Table( "job_parameter", metadata,
  368. Column( "id", Integer, primary_key=True ),
  369. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  370. Column( "name", String(255) ),
  371. Column( "value", TEXT ) )
  372. model.JobToInputDatasetAssociation.table = Table( "job_to_input_dataset", metadata,
  373. Column( "id", Integer, primary_key=True ),
  374. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  375. Column( "dataset_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  376. Column( "name", String(255) ) )
  377. model.JobToOutputDatasetAssociation.table = Table( "job_to_output_dataset", metadata,
  378. Column( "id", Integer, primary_key=True ),
  379. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  380. Column( "dataset_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  381. Column( "name", String(255) ) )
  382. model.JobToInputLibraryDatasetAssociation.table = Table( "job_to_input_library_dataset", metadata,
  383. Column( "id", Integer, primary_key=True ),
  384. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  385. Column( "ldda_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), index=True ),
  386. Column( "name", String(255) ) )
  387. model.JobToOutputLibraryDatasetAssociation.table = Table( "job_to_output_library_dataset", metadata,
  388. Column( "id", Integer, primary_key=True ),
  389. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  390. Column( "ldda_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), index=True ),
  391. Column( "name", String(255) ) )
  392. model.JobExternalOutputMetadata.table = Table( "job_external_output_metadata", metadata,
  393. Column( "id", Integer, primary_key=True ),
  394. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  395. Column( "history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True, nullable=True ),
  396. Column( "library_dataset_dataset_association_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), index=True, nullable=True ),
  397. Column( "filename_in", String( 255 ) ),
  398. Column( "filename_out", String( 255 ) ),
  399. Column( "filename_results_code", String( 255 ) ),
  400. Column( "filename_kwds", String( 255 ) ),
  401. Column( "filename_override_metadata", String( 255 ) ),
  402. Column( "job_runner_external_pid", String( 255 ) ) )
  403. model.JobExportHistoryArchive.table = Table( "job_export_history_archive", metadata,
  404. Column( "id", Integer, primary_key=True ),
  405. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  406. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  407. Column( "dataset_id", Integer, ForeignKey( "dataset.id" ), index=True ),
  408. Column( "compressed", Boolean, index=True, default=False ),
  409. Column( "history_attrs_filename", TEXT ),
  410. Column( "datasets_attrs_filename", TEXT ),
  411. Column( "jobs_attrs_filename", TEXT )
  412. )
  413. model.JobImportHistoryArchive.table = Table( "job_import_history_archive", metadata,
  414. Column( "id", Integer, primary_key=True ),
  415. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  416. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  417. Column( "archive_dir", TEXT )
  418. )
  419. model.GenomeIndexToolData.table = Table( "genome_index_tool_data", metadata,
  420. Column( "id", Integer, primary_key=True ),
  421. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  422. Column( "deferred_job_id", Integer, ForeignKey( "deferred_job.id" ), index=True ),
  423. Column( "transfer_job_id", Integer, ForeignKey( "transfer_job.id" ), index=True ),
  424. Column( "dataset_id", Integer, ForeignKey( "dataset.id" ), index=True ),
  425. Column( "fasta_path", String( 255 ) ),
  426. Column( "created_time", DateTime, default=now ),
  427. Column( "modified_time", DateTime, default=now, onupdate=now ),
  428. Column( "indexer", String( 64 ) ),
  429. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  430. )
  431. model.Task.table = Table( "task", metadata,
  432. Column( "id", Integer, primary_key=True ),
  433. Column( "create_time", DateTime, default=now ),
  434. Column( "execution_time", DateTime ),
  435. Column( "update_time", DateTime, default=now, onupdate=now ),
  436. Column( "state", String( 64 ), index=True ),
  437. Column( "command_line", TEXT ),
  438. Column( "param_filename", String( 1024 ) ),
  439. Column( "runner_name", String( 255 ) ),
  440. Column( "stdout", TEXT ),
  441. Column( "stderr", TEXT ),
  442. Column( "exit_code", Integer, nullable=True ),
  443. Column( "info", TrimmedString ( 255 ) ),
  444. Column( "traceback", TEXT ),
  445. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True, nullable=False ),
  446. Column( "working_directory", String(1024)),
  447. Column( "task_runner_name", String( 255 ) ),
  448. Column( "task_runner_external_id", String( 255 ) ),
  449. Column( "prepare_input_files_cmd", TEXT ) )
  450. model.PostJobAction.table = Table("post_job_action", metadata,
  451. Column("id", Integer, primary_key=True),
  452. Column("workflow_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True, nullable=False),
  453. Column("action_type", String(255), nullable=False),
  454. Column("output_name", String(255), nullable=True),
  455. Column("action_arguments", JSONType, nullable=True))
  456. model.PostJobActionAssociation.table = Table("post_job_action_association", metadata,
  457. Column("id", Integer, primary_key=True),
  458. Column("job_id", Integer, ForeignKey( "job.id" ), index=True, nullable=False),
  459. Column("post_job_action_id", Integer, ForeignKey( "post_job_action.id" ), index=True, nullable=False))
  460. model.DeferredJob.table = Table( "deferred_job", metadata,
  461. Column( "id", Integer, primary_key=True ),
  462. Column( "create_time", DateTime, default=now ),
  463. Column( "update_time", DateTime, default=now, onupdate=now ),
  464. Column( "state", String( 64 ), index=True ),
  465. Column( "plugin", String( 128 ), index=True ),
  466. Column( "params", JSONType ) )
  467. model.TransferJob.table = Table( "transfer_job", metadata,
  468. Column( "id", Integer, primary_key=True ),
  469. Column( "create_time", DateTime, default=now ),
  470. Column( "update_time", DateTime, default=now, onupdate=now ),
  471. Column( "state", String( 64 ), index=True ),
  472. Column( "path", String( 1024 ) ),
  473. Column( "info", TEXT ),
  474. Column( "pid", Integer ),
  475. Column( "socket", Integer ),
  476. Column( "params", JSONType ) )
  477. model.Event.table = Table( "event", metadata,
  478. Column( "id", Integer, primary_key=True ),
  479. Column( "create_time", DateTime, default=now ),
  480. Column( "update_time", DateTime, default=now, onupdate=now ),
  481. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True, nullable=True ),
  482. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True, nullable=True ),
  483. Column( "message", TrimmedString( 1024 ) ),
  484. Column( "session_id", Integer, ForeignKey( "galaxy_session.id" ), index=True, nullable=True ),
  485. Column( "tool_id", String( 255 ) ) )
  486. model.GalaxySession.table = Table( "galaxy_session", metadata,
  487. Column( "id", Integer, primary_key=True ),
  488. Column( "create_time", DateTime, default=now ),
  489. Column( "update_time", DateTime, default=now, onupdate=now ),
  490. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True, nullable=True ),
  491. Column( "remote_host", String( 255 ) ),
  492. Column( "remote_addr", String( 255 ) ),
  493. Column( "referer", TEXT ),
  494. Column( "current_history_id", Integer, ForeignKey( "history.id" ), nullable=True ),
  495. Column( "session_key", TrimmedString( 255 ), index=True, unique=True ), # unique 128 bit random number coerced to a string
  496. Column( "is_valid", Boolean, default=False ),
  497. Column( "prev_session_id", Integer ), # saves a reference to the previous session so we have a way to chain them together
  498. Column( "disk_usage", Numeric( 15, 0 ), index=True ) )
  499. model.GalaxySessionToHistoryAssociation.table = Table( "galaxy_session_to_history", metadata,
  500. Column( "id", Integer, primary_key=True ),
  501. Column( "create_time", DateTime, default=now ),
  502. Column( "session_id", Integer, ForeignKey( "galaxy_session.id" ), index=True ),
  503. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ) )
  504. model.StoredWorkflow.table = Table( "stored_workflow", metadata,
  505. Column( "id", Integer, primary_key=True ),
  506. Column( "create_time", DateTime, default=now ),
  507. Column( "update_time", DateTime, default=now, onupdate=now ),
  508. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True, nullable=False ),
  509. Column( "latest_workflow_id", Integer,
  510. ForeignKey( "workflow.id", use_alter=True, name='stored_workflow_latest_workflow_id_fk' ), index=True ),
  511. Column( "name", TEXT ),
  512. Column( "deleted", Boolean, default=False ),
  513. Column( "importable", Boolean, default=False ),
  514. Column( "slug", TEXT, index=True ),
  515. Column( "published", Boolean, index=True, default=False )
  516. )
  517. model.Workflow.table = Table( "workflow", metadata,
  518. Column( "id", Integer, primary_key=True ),
  519. Column( "create_time", DateTime, default=now ),
  520. Column( "update_time", DateTime, default=now, onupdate=now ),
  521. Column( "stored_workflow_id", Integer, ForeignKey( "stored_workflow.id" ), index=True, nullable=False ),
  522. Column( "name", TEXT ),
  523. Column( "has_cycles", Boolean ),
  524. Column( "has_errors", Boolean )
  525. )
  526. model.WorkflowStep.table = Table( "workflow_step", metadata,
  527. Column( "id", Integer, primary_key=True ),
  528. Column( "create_time", DateTime, default=now ),
  529. Column( "update_time", DateTime, default=now, onupdate=now ),
  530. Column( "workflow_id", Integer, ForeignKey( "workflow.id" ), index=True, nullable=False ),
  531. Column( "type", String(64) ),
  532. Column( "tool_id", TEXT ),
  533. Column( "tool_version", TEXT ), # Reserved for future
  534. Column( "tool_inputs", JSONType ),
  535. Column( "tool_errors", JSONType ),
  536. Column( "position", JSONType ),
  537. Column( "config", JSONType ),
  538. Column( "order_index", Integer ),
  539. ## Column( "input_connections", JSONType )
  540. )
  541. model.WorkflowStepConnection.table = Table( "workflow_step_connection", metadata,
  542. Column( "id", Integer, primary_key=True ),
  543. Column( "output_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True ),
  544. Column( "input_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True ),
  545. Column( "output_name", TEXT ),
  546. Column( "input_name", TEXT)
  547. )
  548. model.WorkflowOutput.table = Table( "workflow_output", metadata,
  549. Column( "id", Integer, primary_key=True ),
  550. Column( "workflow_step_id", Integer, ForeignKey("workflow_step.id"), index=True, nullable=False),
  551. Column( "output_name", String(255), nullable=True)
  552. )
  553. model.WorkflowInvocation.table = Table( "workflow_invocation", metadata,
  554. Column( "id", Integer, primary_key=True ),
  555. Column( "create_time", DateTime, default=now ),
  556. Column( "update_time", DateTime, default=now, onupdate=now ),
  557. Column( "workflow_id", Integer, ForeignKey( "workflow.id" ), index=True, nullable=False )
  558. )
  559. model.WorkflowInvocationStep.table = Table( "workflow_invocation_step", metadata,
  560. Column( "id", Integer, primary_key=True ),
  561. Column( "create_time", DateTime, default=now ),
  562. Column( "update_time", DateTime, default=now, onupdate=now ),
  563. Column( "workflow_invocation_id", Integer, ForeignKey( "workflow_invocation.id" ), index=True, nullable=False ),
  564. Column( "workflow_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True, nullable=False ),
  565. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True, nullable=True )
  566. )
  567. model.StoredWorkflowUserShareAssociation.table = Table( "stored_workflow_user_share_connection", metadata,
  568. Column( "id", Integer, primary_key=True ),
  569. Column( "stored_workflow_id", Integer, ForeignKey( "stored_workflow.id" ), index=True ),
  570. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True )
  571. )
  572. model.StoredWorkflowMenuEntry.table = Table( "stored_workflow_menu_entry", metadata,
  573. Column( "id", Integer, primary_key=True ),
  574. Column( "stored_workflow_id", Integer, ForeignKey( "stored_workflow.id" ), index=True ),
  575. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  576. Column( "order_index", Integer ) )
  577. model.MetadataFile.table = Table( "metadata_file", metadata,
  578. Column( "id", Integer, primary_key=True ),
  579. Column( "name", TEXT ),
  580. Column( "hda_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True, nullable=True ),
  581. Column( "lda_id", Integer, ForeignKey( "library_dataset_dataset_association.id" ), index=True, nullable=True ),
  582. Column( "create_time", DateTime, default=now ),
  583. Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
  584. Column( "object_store_id", TrimmedString( 255 ), index=True ),
  585. Column( "deleted", Boolean, index=True, default=False ),
  586. Column( "purged", Boolean, index=True, default=False ) )
  587. model.FormDefinitionCurrent.table = Table('form_definition_current', metadata,
  588. Column( "id", Integer, primary_key=True),
  589. Column( "create_time", DateTime, default=now ),
  590. Column( "update_time", DateTime, default=now, onupdate=now ),
  591. Column( "latest_form_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  592. Column( "deleted", Boolean, index=True, default=False ))
  593. model.FormDefinition.table = Table('form_definition', metadata,
  594. Column( "id", Integer, primary_key=True),
  595. Column( "create_time", DateTime, default=now ),
  596. Column( "update_time", DateTime, default=now, onupdate=now ),
  597. Column( "name", TrimmedString( 255 ), nullable=False ),
  598. Column( "desc", TEXT ),
  599. Column( "form_definition_current_id",
  600. Integer,
  601. ForeignKey( "form_definition_current.id", name='for_def_form_def_current_id_fk', use_alter=True ),
  602. index=True ),
  603. Column( "fields", JSONType() ),
  604. Column( "type", TrimmedString( 255 ), index=True ),
  605. Column( "layout", JSONType() ), )
  606. model.ExternalService.table = Table( 'external_service', metadata,
  607. Column( "id", Integer, primary_key=True ),
  608. Column( "create_time", DateTime, default=now ),
  609. Column( "update_time", DateTime, default=now, onupdate=now ),
  610. Column( "name", TrimmedString( 255 ), nullable=False ),
  611. Column( "description", TEXT ),
  612. Column( "external_service_type_id", TrimmedString( 255 ), nullable=False ),
  613. Column( "version", TrimmedString( 255 ) ),
  614. Column( "form_definition_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  615. Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
  616. Column( "deleted", Boolean, index=True, default=False ) )
  617. model.RequestType.table = Table('request_type', metadata,
  618. Column( "id", Integer, primary_key=True),
  619. Column( "create_time", DateTime, default=now ),
  620. Column( "update_time", DateTime, default=now, onupdate=now ),
  621. Column( "name", TrimmedString( 255 ), nullable=False ),
  622. Column( "desc", TEXT ),
  623. Column( "request_form_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  624. Column( "sample_form_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  625. Column( "deleted", Boolean, index=True, default=False ) )
  626. model.RequestTypeExternalServiceAssociation.table = Table( "request_type_external_service_association", metadata,
  627. Column( "id", Integer, primary_key=True ),
  628. Column( "request_type_id", Integer, ForeignKey( "request_type.id" ), index=True ),
  629. Column( "external_service_id", Integer, ForeignKey( "external_service.id" ), index=True ) )
  630. model.RequestTypePermissions.table = Table( "request_type_permissions", metadata,
  631. Column( "id", Integer, primary_key=True ),
  632. Column( "create_time", DateTime, default=now ),
  633. Column( "update_time", DateTime, default=now, onupdate=now ),
  634. Column( "action", TEXT ),
  635. Column( "request_type_id", Integer, ForeignKey( "request_type.id" ), nullable=True, index=True ),
  636. Column( "role_id", Integer, ForeignKey( "role.id" ), index=True ) )
  637. model.FormValues.table = Table('form_values', metadata,
  638. Column( "id", Integer, primary_key=True),
  639. Column( "create_time", DateTime, default=now ),
  640. Column( "update_time", DateTime, default=now, onupdate=now ),
  641. Column( "form_definition_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  642. Column( "content", JSONType()) )
  643. model.Request.table = Table('request', metadata,
  644. Column( "id", Integer, primary_key=True),
  645. Column( "create_time", DateTime, default=now ),
  646. Column( "update_time", DateTime, default=now, onupdate=now ),
  647. Column( "name", TrimmedString( 255 ), nullable=False ),
  648. Column( "desc", TEXT ),
  649. Column( "notification", JSONType() ),
  650. Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
  651. Column( "request_type_id", Integer, ForeignKey( "request_type.id" ), index=True ),
  652. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  653. Column( "deleted", Boolean, index=True, default=False ) )
  654. model.RequestEvent.table = Table('request_event', metadata,
  655. Column( "id", Integer, primary_key=True),
  656. Column( "create_time", DateTime, default=now ),
  657. Column( "update_time", DateTime, default=now, onupdate=now ),
  658. Column( "request_id", Integer, ForeignKey( "request.id" ), index=True ),
  659. Column( "state", TrimmedString( 255 ), index=True ),
  660. Column( "comment", TEXT ) )
  661. model.Sample.table = Table('sample', metadata,
  662. Column( "id", Integer, primary_key=True ),
  663. Column( "create_time", DateTime, default=now ),
  664. Column( "update_time", DateTime, default=now, onupdate=now ),
  665. Column( "name", TrimmedString( 255 ), nullable=False ),
  666. Column( "desc", TEXT ),
  667. Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
  668. Column( "request_id", Integer, ForeignKey( "request.id" ), index=True ),
  669. Column( "bar_code", TrimmedString( 255 ), index=True ),
  670. Column( "library_id", Integer, ForeignKey( "library.id" ), index=True ),
  671. Column( "folder_id", Integer, ForeignKey( "library_folder.id" ), index=True ),
  672. Column( "deleted", Boolean, index=True, default=False ),
  673. Column( "workflow", JSONType, nullable=True ),
  674. Column( "history_id", Integer, ForeignKey( "history.id" ), nullable=True) )
  675. model.SampleState.table = Table('sample_state', metadata,
  676. Column( "id", Integer, primary_key=True ),
  677. Column( "create_time", DateTime, default=now ),
  678. Column( "update_time", DateTime, default=now, onupdate=now ),
  679. Column( "name", TrimmedString( 255 ), nullable=False ),
  680. Column( "desc", TEXT ),
  681. Column( "request_type_id", Integer, ForeignKey( "request_type.id" ), index=True ) )
  682. model.SampleEvent.table = Table('sample_event', metadata,
  683. Column( "id", Integer, primary_key=True ),
  684. Column( "create_time", DateTime, default=now ),
  685. Column( "update_time", DateTime, default=now, onupdate=now ),
  686. Column( "sample_id", Integer, ForeignKey( "sample.id" ), index=True ),
  687. Column( "sample_state_id", Integer, ForeignKey( "sample_state.id" ), index=True ),
  688. Column( "comment", TEXT ) )
  689. model.SampleDataset.table = Table('sample_dataset', metadata,
  690. Column( "id", Integer, primary_key=True ),
  691. Column( "create_time", DateTime, default=now ),
  692. Column( "update_time", DateTime, default=now, onupdate=now ),
  693. Column( "sample_id", Integer, ForeignKey( "sample.id" ), index=True ),
  694. Column( "name", TrimmedString( 255 ), nullable=False ),
  695. Column( "file_path", TEXT ),
  696. Column( "status", TrimmedString( 255 ), nullable=False ),
  697. Column( "error_msg", TEXT ),
  698. Column( "size", TrimmedString( 255 ) ),
  699. Column( "external_service_id", Integer, ForeignKey( "external_service.id" ), index=True ) )
  700. model.Run.table = Table( 'run', metadata,
  701. Column( "id", Integer, primary_key=True ),
  702. Column( "create_time", DateTime, default=now ),
  703. Column( "update_time", DateTime, default=now, onupdate=now ),
  704. Column( "form_definition_id", Integer, ForeignKey( "form_definition.id" ), index=True ),
  705. Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
  706. Column( "deleted", Boolean, index=True, default=False ),
  707. Column( "subindex", TrimmedString( 255 ), index=True ) )
  708. model.RequestTypeRunAssociation.table = Table( "request_type_run_association", metadata,
  709. Column( "id", Integer, primary_key=True ),
  710. Column( "request_type_id", Integer, ForeignKey( "request_type.id" ), index=True, nullable=False ),
  711. Column( "run_id", Integer, ForeignKey( "run.id" ), index=True, nullable=False ) )
  712. model.SampleRunAssociation.table = Table( "sample_run_association", metadata,
  713. Column( "id", Integer, primary_key=True ),
  714. Column( "sample_id", Integer, ForeignKey( "sample.id" ), index=True, nullable=False ),
  715. Column( "run_id", Integer, ForeignKey( "run.id" ), index=True, nullable=False ) )
  716. model.Page.table = Table( "page", metadata,
  717. Column( "id", Integer, primary_key=True ),
  718. Column( "create_time", DateTime, default=now ),
  719. Column( "update_time", DateTime, default=now, onupdate=now ),
  720. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True, nullable=False ),
  721. Column( "latest_revision_id", Integer,
  722. ForeignKey( "page_revision.id", use_alter=True, name='page_latest_revision_id_fk' ), index=True ),
  723. Column( "title", TEXT ),
  724. Column( "slug", TEXT, unique=True, index=True ),
  725. Column( "importable", Boolean, index=True, default=False ),
  726. Column( "published", Boolean, index=True, default=False ),
  727. Column( "deleted", Boolean, index=True, default=False ),
  728. )
  729. model.PageRevision.table = Table( "page_revision", metadata,
  730. Column( "id", Integer, primary_key=True ),
  731. Column( "create_time", DateTime, default=now ),
  732. Column( "update_time", DateTime, default=now, onupdate=now ),
  733. Column( "page_id", Integer, ForeignKey( "page.id" ), index=True, nullable=False ),
  734. Column( "title", TEXT ),
  735. Column( "content", TEXT )
  736. )
  737. model.PageUserShareAssociation.table = Table( "page_user_share_association", metadata,
  738. Column( "id", Integer, primary_key=True ),
  739. Column( "page_id", Integer, ForeignKey( "page.id" ), index=True ),
  740. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True )
  741. )
  742. model.Visualization.table = Table( "visualization", metadata,
  743. Column( "id", Integer, primary_key=True ),
  744. Column( "create_time", DateTime, default=now ),
  745. Column( "update_time", DateTime, default=now, onupdate=now ),
  746. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True, nullable=False ),
  747. Column( "latest_revision_id", Integer,
  748. ForeignKey( "visualization_revision.id", use_alter=True, name='visualization_latest_revision_id_fk' ), index=True ),
  749. Column( "title", TEXT ),
  750. Column( "type", TEXT ),
  751. Column( "dbkey", TEXT, index=True ),
  752. Column( "deleted", Boolean, default=False, index=True ),
  753. Column( "importable", Boolean, default=False, index=True ),
  754. Column( "slug", TEXT, index=True ),
  755. Column( "published", Boolean, default=False, index=True )
  756. )
  757. model.VisualizationRevision.table = Table( "visualization_revision", metadata,
  758. Column( "id", Integer, primary_key=True ),
  759. Column( "create_time", DateTime, default=now ),
  760. Column( "update_time", DateTime, default=now, onupdate=now ),
  761. Column( "visualization_id", Integer, ForeignKey( "visualization.id" ), index=True, nullable=False ),
  762. Column( "title", TEXT ),
  763. Column( "dbkey", TEXT, index=True ),
  764. Column( "config", JSONType )
  765. )
  766. model.VisualizationUserShareAssociation.table = Table( "visualization_user_share_association", metadata,
  767. Column( "id", Integer, primary_key=True ),
  768. Column( "visualization_id", Integer, ForeignKey( "visualization.id" ), index=True ),
  769. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True )
  770. )
  771. #Data Manager tables
  772. model.DataManagerHistoryAssociation.table = Table( "data_manager_history_association", metadata,
  773. Column( "id", Integer, primary_key=True),
  774. Column( "create_time", DateTime, default=now ),
  775. Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
  776. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  777. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True )
  778. )
  779. model.DataManagerJobAssociation.table = Table( "data_manager_job_association", metadata,
  780. Column( "id", Integer, primary_key=True),
  781. Column( "create_time", DateTime, default=now ),
  782. Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
  783. Column( "job_id", Integer, ForeignKey( "job.id" ), index=True ),
  784. Column( "data_manager_id", TEXT, index=True )
  785. )
  786. # Tagging tables.
  787. model.Tag.table = Table( "tag", metadata,
  788. Column( "id", Integer, primary_key=True ),
  789. Column( "type", Integer ),
  790. Column( "parent_id", Integer, ForeignKey( "tag.id" ) ),
  791. Column( "name", TrimmedString(255) ),
  792. UniqueConstraint( "name" ) )
  793. model.HistoryTagAssociation.table = Table( "history_tag_association", metadata,
  794. Column( "id", Integer, primary_key=True ),
  795. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  796. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  797. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  798. Column( "user_tname", TrimmedString(255), index=True),
  799. Column( "value", TrimmedString(255), index=True),
  800. Column( "user_value", TrimmedString(255), index=True) )
  801. model.DatasetTagAssociation.table = Table( "dataset_tag_association", metadata,
  802. Column( "id", Integer, primary_key=True ),
  803. Column( "dataset_id", Integer, ForeignKey( "dataset.id" ), index=True ),
  804. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  805. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  806. Column( "user_tname", TrimmedString(255), index=True),
  807. Column( "value", TrimmedString(255), index=True),
  808. Column( "user_value", TrimmedString(255), index=True) )
  809. model.HistoryDatasetAssociationTagAssociation.table = Table( "history_dataset_association_tag_association", metadata,
  810. Column( "id", Integer, primary_key=True ),
  811. Column( "history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  812. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  813. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  814. Column( "user_tname", TrimmedString(255), index=True),
  815. Column( "value", TrimmedString(255), index=True),
  816. Column( "user_value", TrimmedString(255), index=True) )
  817. model.StoredWorkflowTagAssociation.table = Table( "stored_workflow_tag_association", metadata,
  818. Column( "id", Integer, primary_key=True ),
  819. Column( "stored_workflow_id", Integer, ForeignKey( "stored_workflow.id" ), index=True ),
  820. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  821. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  822. Column( "user_tname", Unicode(255), index=True),
  823. Column( "value", Unicode(255), index=True),
  824. Column( "user_value", Unicode(255), index=True) )
  825. model.PageTagAssociation.table = Table( "page_tag_association", metadata,
  826. Column( "id", Integer, primary_key=True ),
  827. Column( "page_id", Integer, ForeignKey( "page.id" ), index=True ),
  828. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  829. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  830. Column( "user_tname", TrimmedString(255), index=True),
  831. Column( "value", TrimmedString(255), index=True),
  832. Column( "user_value", TrimmedString(255), index=True) )
  833. model.WorkflowStepTagAssociation.table = Table( "workflow_step_tag_association", metadata,
  834. Column( "id", Integer, primary_key=True ),
  835. Column( "workflow_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True ),
  836. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  837. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  838. Column( "user_tname", Unicode(255), index=True),
  839. Column( "value", Unicode(255), index=True),
  840. Column( "user_value", Unicode(255), index=True) )
  841. model.VisualizationTagAssociation.table = Table( "visualization_tag_association", metadata,
  842. Column( "id", Integer, primary_key=True ),
  843. Column( "visualization_id", Integer, ForeignKey( "visualization.id" ), index=True ),
  844. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  845. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  846. Column( "user_tname", TrimmedString(255), index=True),
  847. Column( "value", TrimmedString(255), index=True),
  848. Column( "user_value", TrimmedString(255), index=True) )
  849. model.ToolTagAssociation.table = Table( "tool_tag_association", metadata,
  850. Column( "id", Integer, primary_key=True ),
  851. Column( "tool_id", TrimmedString(255), index=True ),
  852. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  853. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  854. Column( "user_tname", TrimmedString(255), index=True),
  855. Column( "value", TrimmedString(255), index=True),
  856. Column( "user_value", TrimmedString(255), index=True) )
  857. # Annotation tables.
  858. model.HistoryAnnotationAssociation.table = Table( "history_annotation_association", metadata,
  859. Column( "id", Integer, primary_key=True ),
  860. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  861. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  862. Column( "annotation", TEXT, index=True) )
  863. model.HistoryDatasetAssociationAnnotationAssociation.table = Table( "history_dataset_association_annotation_association", metadata,
  864. Column( "id", Integer, primary_key=True ),
  865. Column( "history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  866. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  867. Column( "annotation", TEXT, index=True) )
  868. model.StoredWorkflowAnnotationAssociation.table = Table( "stored_workflow_annotation_association", metadata,
  869. Column( "id", Integer, primary_key=True ),
  870. Column( "stored_workflow_id", Integer, ForeignKey( "stored_workflow.id" ), index=True ),
  871. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  872. Column( "annotation", TEXT, index=True) )
  873. model.WorkflowStepAnnotationAssociation.table = Table( "workflow_step_annotation_association", metadata,
  874. Column( "id", Integer, primary_key=True ),
  875. Column( "workflow_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True ),
  876. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  877. Column( "annotation", TEXT, index=True) )
  878. model.PageAnnotationAssociation.table = Table( "page_annotation_association", metadata,
  879. Column( "id", Integer, primary_key=True ),
  880. Column( "page_id", Integer, ForeignKey( "page.id" ), index=True ),
  881. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  882. Column( "annotation", TEXT, index=True) )
  883. model.VisualizationAnnotationAssociation.table = Table( "visualization_annotation_association", metadata,
  884. Column( "id", Integer, primary_key=True ),
  885. Column( "visualization_id", Integer, ForeignKey( "visualization.id" ), index=True ),
  886. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  887. Column( "annotation", TEXT, index=True) )
  888. # Ratings tables.
  889. model.HistoryRatingAssociation.table = Table( "history_rating_association", metadata,
  890. Column( "id", Integer, primary_key=True ),
  891. Column( "history_id", Integer, ForeignKey( "history.id" ), index=True ),
  892. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  893. Column( "rating", Integer, index=True) )
  894. model.HistoryDatasetAssociationRatingAssociation.table = Table( "history_dataset_association_rating_association", metadata,
  895. Column( "id", Integer, primary_key=True ),
  896. Column( "history_dataset_association_id", Integer, ForeignKey( "history_dataset_association.id" ), index=True ),
  897. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  898. Column( "rating", Integer, index=True) )
  899. model.StoredWorkflowRatingAssociation.table = Table( "stored_workflow_rating_association", metadata,
  900. Column( "id", Integer, primary_key=True ),
  901. Column( "stored_workflow_id", Integer, ForeignKey( "stored_workflow.id" ), index=True ),
  902. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  903. Column( "rating", Integer, index=True) )
  904. model.PageRatingAssociation.table = Table( "page_rating_association", metadata,
  905. Column( "id", Integer, primary_key=True ),
  906. Column( "page_id", Integer, ForeignKey( "page.id" ), index=True ),
  907. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  908. Column( "rating", Integer, index=True) )
  909. model.VisualizationRatingAssociation.table = Table( "visualization_rating_association", metadata,
  910. Column( "id", Integer, primary_key=True ),
  911. Column( "visualization_id", Integer, ForeignKey( "visualization.id" ), index=True ),
  912. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  913. Column( "rating", Integer, index=True) )
  914. # User tables.
  915. model.UserPreference.table = Table( "user_preference", metadata,
  916. Column( "id", Integer, primary_key=True ),
  917. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  918. Column( "name", Unicode( 255 ), index=True),
  919. Column( "value", Unicode( 1024 ) ) )
  920. model.UserAction.table = Table( "user_action", metadata,
  921. Column( "id", Integer, primary_key=True ),
  922. Column( "create_time", DateTime, default=now ),
  923. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  924. Column( "session_id", Integer, ForeignKey( "galaxy_session.id" ), index=True ),
  925. Column( "action", Unicode( 255 ) ),
  926. Column( "context", Unicode( 512 ) ),
  927. Column( "params", Unicode( 1024 ) ) )
  928. model.APIKeys.table = Table( "api_keys", metadata,
  929. Column( "id", Integer, primary_key=True ),
  930. Column( "create_time", DateTime, default=now ),
  931. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  932. Column( "key", TrimmedString( 32 ), index=True, unique=True ) )
  933. # With the tables defined we can define the mappers and setup the
  934. # relationships between the model objects.
  935. def simple_mapping( model, **kwds ):
  936. mapper( model, model.table, properties=kwds )
  937. mapper( model.Sample, model.Sample.table,
  938. properties=dict(
  939. events=relation( model.SampleEvent, backref="sample",
  940. order_by=desc( model.SampleEvent.table.c.update_time ) ),
  941. datasets=relation( model.SampleDataset, backref="sample",
  942. order_by=desc( model.SampleDataset.table.c.update_time ) ),
  943. values=relation( model.FormValues,
  944. primaryjoin=( model.Sample.table.c.form_values_id == model.FormValues.table.c.id ) ),
  945. request=relation( model.Request,
  946. primaryjoin=( model.Sample.table.c.request_id == model.Request.table.c.id ) ),
  947. folder=relation( model.LibraryFolder,
  948. primaryjoin=( model.Sample.table.c.folder_id == model.LibraryFolder.table.c.id ) ),
  949. library=relation( model.Library,
  950. primaryjoin=( model.Sample.table.c.library_id == model.Library.table.c.id ) ),
  951. history=relation( model.History,
  952. primaryjoin=( model.Sample.table.c.history_id == model.History.table.c.id ) ),
  953. ) )
  954. mapper( model.FormValues, model.FormValues.table,
  955. properties=dict( form_definition=relation( model.FormDefinition,
  956. primaryjoin=( model.FormValues.table.c.form_definition_id ==
  957. model.FormDefinition.table.c.id ) )
  958. )
  959. )
  960. mapper( model.Request, model.Request.table,
  961. properties=dict( values=relation( model.FormValues,
  962. primaryjoin=( model.Request.table.c.form_values_id == model.FormValues.table.c.id ) ),
  963. type=relation( model.RequestType,
  964. primaryjoin=( model.Request.table.c.request_type_id == model.RequestType.table.c.id ) ),
  965. user=relation( model.User,
  966. primaryjoin=( model.Request.table.c.user_id == model.User.table.c.id ),
  967. backref="requests" ),
  968. samples=relation( model.Sample,
  969. primaryjoin=( model.Request.table.c.id == model.Sample.table.c.request_id ),
  970. order_by=asc( model.Sample.table.c.id ) ),
  971. events=relation( model.RequestEvent, backref="request",
  972. order_by=desc( model.RequestEvent.table.c.update_time ) )
  973. ) )
  974. mapper( model.RequestEvent, model.RequestEvent.table,
  975. properties=None )
  976. mapper( model.ExternalService, model.ExternalService.table,
  977. properties=dict( form_definition=relation( model.FormDefinition,
  978. primaryjoin=( model.ExternalService.table.c.form_definition_id ==
  979. model.FormDefinition.table.c.id ) ),
  980. form_values=relation( model.FormValues,
  981. primaryjoin=( model.ExternalService.table.c.form_values_id ==
  982. model.FormValues.table.c.id ) )
  983. ) )
  984. mapper( model.RequestType, model.RequestType.table,
  985. properties=dict( states=relation( model.SampleState,
  986. backref="request_type",
  987. primaryjoin=( model.RequestType.table.c.id == model.SampleState.table.c.request_type_id ),
  988. order_by=asc( model.SampleState.table.c.update_time ) ),
  989. request_form=relation( model.FormDefinition,
  990. primaryjoin=( model.RequestType.table.c.request_form_id == model.FormDefinition.table.c.id ) ),
  991. sample_form=relation( model.FormDefinition,
  992. primaryjoin=( model.RequestType.table.c.sample_form_id == model.FormDefinition.table.c.id ) ),
  993. ) )
  994. mapper( model.RequestTypeExternalServiceAssociation, model.RequestTypeExternalServiceAssociation.table,
  995. properties=dict(
  996. request_type=relation( model.RequestType,
  997. primaryjoin=( ( model.RequestTypeExternalServiceAssociation.table.c.request_type_id == model.RequestType.table.c.id ) ), backref="external_service_associations" ),
  998. external_service=relation( model.ExternalService,
  999. primaryjoin=( model.RequestTypeExternalServiceAssociation.table.c.external_service_id
  1000. == model.ExternalService.table.c.id ) )
  1001. )
  1002. )
  1003. mapper( model.RequestTypePermissions, model.RequestTypePermissions.table,
  1004. properties=dict(
  1005. request_type=relation( model.RequestType, backref="actions" ),
  1006. role=relation( model.Role, backref="request_type_actions" )
  1007. )
  1008. )
  1009. mapper( model.FormDefinition, model.FormDefinition.table,
  1010. properties=dict( current=relation( model.FormDefinitionCurrent,
  1011. primaryjoin=( model.FormDefinition.table.c.form_definition_current_id == model.FormDefinitionCurrent.table.c.id ) )
  1012. ) )
  1013. mapper( model.FormDefinitionCurrent, model.FormDefinitionCurrent.table,
  1014. properties=dict( forms=relation( model.FormDefinition, backref='form_definition_current',
  1015. cascade="all, delete-orphan",
  1016. primaryjoin=( model.FormDefinitionCurrent.table.c.id == model.FormDefinition.table.c.form_definition_current_id ) ),
  1017. latest_form=relation( model.FormDefinition, post_update=True,
  1018. primaryjoin=( model.FormDefinitionCurrent.table.c.latest_form_id == model.FormDefinition.table.c.id ) )
  1019. ) )
  1020. mapper( model.SampleEvent, model.SampleEvent.table,
  1021. properties=dict( state=relation( model.SampleState,
  1022. primaryjoin=( model.SampleEvent.table.c.sample_state_id == model.SampleState.table.c.id ) ),
  1023. ) )
  1024. mapper( model.SampleState, model.SampleState.table,
  1025. properties=None )
  1026. mapper( model.SampleDataset, model.SampleDataset.table,
  1027. properties=dict( external_service=relation( model.ExternalService,
  1028. primaryjoin=( model.SampleDataset.table.c.external_service_id == model.ExternalService.table.c.id ) )
  1029. )
  1030. )
  1031. mapper( model.SampleRunAssociation, model.SampleRunAssociation.table,
  1032. properties=dict( sample=relation( model.Sample, backref="runs", order_by=desc( model.Run.table.c.update_time ) ),
  1033. run=relation( model.Run, backref="samples", order_by=asc( model.Sample.table.c.id ) ) ) )
  1034. mapper( model.RequestTypeRunAssociation, model.RequestTypeRunAssociation.table,
  1035. properties=dict( request_type=relation( model.RequestType, backref="run" ),
  1036. run=relation( model.Run, backref="request_type" ) ) )
  1037. mapper( model.Run, model.Run.table,
  1038. properties=dict( template=relation( model.FormDefinition,
  1039. primaryjoin=( model.Run.table.c.form_definition_id == model.FormDefinition.table.c.id ) ),
  1040. info=relation( model.FormValues,
  1041. primaryjoin=( model.Run.table.c.form_values_id == model.FormValues.table.c.id ) ) ) )
  1042. mapper( model.UserAddress, model.UserAddress.table,
  1043. properties=dict(
  1044. user=relation( model.User,
  1045. primaryjoin=( model.UserAddress.table.c.user_id == model.User.table.c.id ),
  1046. backref='addresses',
  1047. order_by=desc(model.UserAddress.table.c.update_time)),
  1048. ) )
  1049. mapper( model.UserOpenID, model.UserOpenID.table,
  1050. properties=dict(
  1051. session=relation( model.GalaxySession,
  1052. primaryjoin=( model.UserOpenID.table.c.session_id == model.GalaxySession.table.c.id ),
  1053. backref='openids',
  1054. order_by=desc( model.UserOpenID.table.c.update_time ) ),
  1055. user=relation( model.User,
  1056. primaryjoin=( model.UserOpenID.table.c.user_id == model.User.table.c.id ),
  1057. backref='openids',
  1058. order_by=desc( model.UserOpenID.table.c.update_time ) ) ) )
  1059. mapper( model.ValidationError, model.ValidationError.table )
  1060. simple_mapping( model.HistoryDatasetAssociation,
  1061. dataset=relation(
  1062. model.Dataset,
  1063. primaryjoin=( model.Dataset.table.c.id == model.HistoryDatasetAssociation.table.c.dataset_id ), lazy=False ),
  1064. # .history defined in History mapper
  1065. copied_from_history_dataset_association=relation(
  1066. model.HistoryDatasetAssociation,
  1067. primaryjoin=( model.HistoryDatasetAssociation.table.c.copied_from_history_dataset_association_id == model.HistoryDatasetAssociation.table.c.id ),
  1068. remote_side=[model.HistoryDatasetAssociation.table.c.id],
  1069. uselist=False ),
  1070. copied_to_history_dataset_associations=relation(
  1071. model.HistoryDatasetAssociation,
  1072. primaryjoin=( model.HistoryDatasetAssociation.table.c.copied_from_history_dataset_association_id == model.HistoryDatasetAssociation.table.c.id ) ),
  1073. copied_from_library_dataset_dataset_association=relation(
  1074. model.LibraryDatasetDatasetAssociation,
  1075. primaryjoin=( model.HistoryDatasetAssociation.table.c.copied_from_library_dataset_dataset_association_id == model.LibraryDatasetDatasetAssociation.table.c.id ),
  1076. uselist=False ),
  1077. copied_to_library_dataset_dataset_associations=relation(
  1078. model.LibraryDatasetDatasetAssociation,
  1079. primaryjoin=( model.HistoryDatasetAssociation.table.c.copied_from_library_dataset_dataset_association_id == model.LibraryDatasetDatasetAssociation.table.c.id ) ),
  1080. implicitly_converted_datasets=relation(
  1081. model.ImplicitlyConvertedDatasetAssociation,
  1082. primaryjoin=( model.ImplicitlyConvertedDatasetAssociation.table.c.hda_parent_id == model.HistoryDatasetAssociation.table.c.id ) ),
  1083. implicitly_converted_parent_datasets=relation(
  1084. model.ImplicitlyConvertedDatasetAssociation,
  1085. primaryjoin=( model.ImplicitlyConvertedDatasetAssociation.table.c.hda_id == model.HistoryDatasetAssociation.table.c.id ) ),
  1086. children=relation(
  1087. model.HistoryDatasetAssociation,
  1088. primaryjoin=( model.HistoryDatasetAssociation.table.c.parent_id == model.HistoryDatasetAssociation.table.c.id ),
  1089. backref=backref( "parent", primaryjoin=( model.HistoryDatasetAssociation.table.c.parent_id == model.HistoryDatasetAssociation.table.c.id ), remote_side=[model.HistoryDatasetAssociation.table.c.id], uselist=False ) ),
  1090. visible_children=relation(
  1091. model.HistoryDatasetAssociation,
  1092. primaryjoin=( ( model.HistoryDatasetAssociation.table.c.parent_id == model.HistoryDatasetAssociation.table.c.id ) & ( model.HistoryDatasetAssociation.table.c.visible == True ) ) ),
  1093. tags=relation( model.HistoryDatasetAssociationTagAssociation, order_by=model.HistoryDatasetAssociationTagAssociation.table.c.id, backref='history_tag_associations' ),
  1094. annotations=relation( model.HistoryDatasetAssociationAnnotationAssociation, order_by=model.HistoryDatasetAssociationAnnotationAssociation.table.c.id, backref="hdas" ),
  1095. ratings=relation( model.HistoryDatasetAssociationRatingAssociation, order_by=model.HistoryDatasetAssociationRatingAssociation.table.c.id, backref="hdas" ),
  1096. extended_metadata=relation(
  1097. model.ExtendedMetadata,
  1098. primaryjoin=( ( model.HistoryDatasetAssociation.table.c.extended_metadata_id == model.ExtendedMetadata.table.c.id ) )
  1099. )
  1100. )
  1101. simple_mapping( model.Dataset,
  1102. history_associations=relation(
  1103. model.HistoryDatasetAssociation,
  1104. primaryjoin=( model.Dataset.table.c.id == model.HistoryDatasetAssociation.table.c.dataset_id ) ),
  1105. active_history_associations=relation(
  1106. model.HistoryDatasetAssociation,
  1107. primaryjoin=( ( model.Dataset.table.c.id == model.HistoryDatasetAssociation.table.c.dataset_id ) & ( model.HistoryDatasetAssociation.table.c.deleted == False ) & ( model.HistoryDatasetAssociation.table.c.purged == False ) ) ),
  1108. purged_history_associations=relation(
  1109. model.HistoryDatasetAssociation,
  1110. primaryjoin=( ( model.Dataset.table.c.id == model.HistoryDatasetAssociation.table.c.dataset_id ) & ( model.HistoryDatasetAssociation.table.c.purged == True ) ) ),
  1111. library_associations=relation(
  1112. model.LibraryDatasetDatasetAssociation,
  1113. primaryjoin=( model.Dataset.table.c.id == model.LibraryDatasetDatasetAssociation.table.c.dataset_id ) ),
  1114. active_library_associations=relation(
  1115. model.LibraryDatasetDatasetAssociation,
  1116. primaryjoin=( ( model.Dataset.table.c.id == model.LibraryDatasetDatasetAssociation.table.c.dataset_id ) & ( model.LibraryDatasetDatasetAssociation.table.c.deleted == False ) ) ),
  1117. tags=relation(model.DatasetTagAssociation, order_by=model.DatasetTagAssociation.table.c.id, backref='datasets')
  1118. )
  1119. mapper( model.HistoryDatasetAssociationDisplayAtAuthorization, model.HistoryDatasetAssociationDisplayAtAuthorization.table,
  1120. properties=dict( history_dataset_association = relation( model.HistoryDatasetAssociation ),
  1121. user = relation( model.User ) ) )
  1122. mapper( model.HistoryDatasetAssociationSubset, model.HistoryDatasetAssociationSubset.table,
  1123. properties=dict( hda = relation( model.HistoryDatasetAssociation,
  1124. primaryjoin=( model.HistoryDatasetAssociationSubset.table.c.history_dataset_association_id == model.HistoryDatasetAssociation.table.c.id ) ),
  1125. subset = relation( model.HistoryDatasetAssociation,
  1126. primaryjoin=( model.HistoryDatasetAssociationSubset.table.c.history_dataset_association_subset_id == model.HistoryDatasetAssociation.table.c.id ) )
  1127. ) )
  1128. mapper( model.ImplicitlyConvertedDatasetAssociation, model.ImplicitlyConvertedDatasetAssociation.table,
  1129. properties=dict( parent_hda=relation(
  1130. model.HistoryDatasetAssociation,
  1131. primaryjoin=( model.ImplicitlyConvertedDatasetAssociation.table.c.hda_parent_id == model.HistoryDatasetAssociation.table.c.id ) ),
  1132. parent_ldda=relation(
  1133. model.LibraryDatasetDatasetAssociation,
  1134. primaryjoin=( model.ImplicitlyConvertedDatasetAssociation.table.c.ldda_parent_id == model.LibraryDatasetDatasetAssociation.table.c.id ) ),
  1135. dataset_ldda=relation(
  1136. model.LibraryDatasetDatasetAssociation,
  1137. primaryjoin=( model.ImplicitlyConvertedDatasetAssociation.table.c.ldda_id == model.LibraryDatasetDatasetAssociation.table.c.id ) ),
  1138. dataset=relation(
  1139. model.HistoryDatasetAssociation,
  1140. primaryjoin=( model.ImplicitlyConvertedDatasetAssociation.table.c.hda_id == model.HistoryDatasetAssociation.table.c.id ) ) ) )
  1141. mapper( model.History, model.History.table,
  1142. properties=dict( galaxy_sessions=relation( model.GalaxySessionToHistoryAssociation ),
  1143. datasets=relation( model.HistoryDatasetAssociation, backref="history", order_by=asc(model.HistoryDatasetAssociation.table.c.hid) ),
  1144. exports=relation( model.JobExportHistoryArchive, primaryjoin=( model.JobExportHistoryArchive.table.c.history_id == model.History.table.c.id ), order_by=desc( model.JobExportHistoryArchive.table.c.id ) ),
  1145. active_datasets=relation( model.HistoryDatasetAssociation, primaryjoin=( ( model.HistoryDatasetAssociation.table.c.history_id == model.History.table.c.id ) & not_( model.HistoryDatasetAssociation.table.c.deleted ) ), order_by=asc( model.HistoryDatasetAssociation.table.c.hid ), viewonly=True ),
  1146. visible_datasets=relation( model.HistoryDatasetAssociation, primaryjoin=( ( model.HistoryDatasetAssociation.table.c.history_id == model.History.table.c.id ) & not_( model.HistoryDatasetAssociation.table.c.deleted ) & model.HistoryDatasetAssociation.table.c.visible ),
  1147. order_by=asc( model.HistoryDatasetAssociation.table.c.hid ), viewonly=True ),
  1148. tags=relation( model.HistoryTagAssociation, order_by=model.HistoryTagAssociation.table.c.id, backref="histories" ),
  1149. annotations=relation( model.HistoryAnnotationAssociation, order_by=model.HistoryAnnotationAssociation.table.c.id, backref="histories" ),
  1150. ratings=relation( model.HistoryRatingAssociation, order_by=model.HistoryRatingAssociation.table.c.id, backref="histories" ) )
  1151. )
  1152. # Set up proxy so that
  1153. # History.users_shared_with
  1154. # returns a list of users that history is shared with.
  1155. model.History.users_shared_with_dot_users = association_proxy( 'users_shared_with', 'user' )
  1156. mapper( model.HistoryUserShareAssociation, model.HistoryUserShareAssociation.table,
  1157. properties=dict( user=relation( model.User, backref='histories_shared_by_others' ),
  1158. history=relation( model.History, backref='users_shared_with' )
  1159. ) )
  1160. mapper( model.User, model.User.table,
  1161. properties=dict( histories=relation( model.History, backref="user",
  1162. order_by=desc(model.History.table.c.update_time) ),
  1163. active_histories=relation( model.History, primaryjoin=( ( model.History.table.c.user_id == model.User.table.c.id ) & ( not_( model.History.table.c.deleted ) ) ), order_by=desc( model.History.table.c.update_time ) ),
  1164. galaxy_sessions=relation( model.GalaxySession, order_by=desc( model.GalaxySession.table.c.update_time ) ),
  1165. stored_workflow_menu_entries=relation( model.StoredWorkflowMenuEntry, backref="user",
  1166. cascade="all, delete-orphan",
  1167. collection_class=ordering_list( 'order_index' ) ),
  1168. _preferences=relation( model.UserPreference, backref="user", collection_class=attribute_mapped_collection('name')),
  1169. # addresses=relation( UserAddress,
  1170. # primaryjoin=( User.table.c.id == UserAddress.table.c.user_id ) )
  1171. values=relation( model.FormValues,
  1172. primaryjoin=( model.User.table.c.form_values_id == model.FormValues.table.c.id ) ),
  1173. api_keys=relation( model.APIKeys, backref="user", order_by=desc( model.APIKeys.table.c.create_time ) ),
  1174. ) )
  1175. # Set up proxy so that this syntax is possible:
  1176. # <user_obj>.preferences[pref_name] = pref_value
  1177. model.User.preferences = association_proxy('_preferences', 'value', creator=model.UserPreference)
  1178. mapper( model.Group, model.Group.table,
  1179. properties=dict( users=relation( model.UserGroupAssociation ) ) )
  1180. mapper( model.UserGroupAssociation, model.UserGroupAssociation.table,
  1181. properties=dict( user=relation( model.User, backref = "groups" ),
  1182. group=relation( model.Group, backref = "members" ) ) )
  1183. mapper( model.DefaultUserPermissions, model.DefaultUserPermissions.table,
  1184. properties=dict( user=relation( model.User, backref = "default_permissions" ),
  1185. role=relation( model.Role ) ) )
  1186. mapper( model.DefaultHistoryPermissions, model.DefaultHistoryPermissions.table,
  1187. properties=dict( history=relation( model.History, backref = "default_permissions" ),
  1188. role=relation( model.Role ) ) )
  1189. mapper( model.Role, model.Role.table,
  1190. properties=dict(
  1191. users=relation( model.UserRoleAssociation ),
  1192. groups=relation( model.GroupRoleAssociation )
  1193. )
  1194. )
  1195. mapper( model.UserRoleAssociation, model.UserRoleAssociation.table,
  1196. properties=dict(
  1197. user=relation( model.User, backref="roles" ),
  1198. non_private_roles=relation( model.User,
  1199. backref="non_private_roles",
  1200. primaryjoin=( ( model.User.table.c.id == model.UserRoleAssociation.table.c.user_id ) & ( model.UserRoleAssociation.table.c.role_id == model.Role.table.c.id ) & not_( model.Role.table.c.name == model.User.table.c.email ) ) ),
  1201. role=relation( model.Role )
  1202. )
  1203. )
  1204. mapper( model.GroupRoleAssociation, model.GroupRoleAssociation.table,
  1205. properties=dict(
  1206. group=relation( model.Group, backref="roles" ),
  1207. role=relation( model.Role )
  1208. )
  1209. )
  1210. mapper( model.Quota, model.Quota.table,
  1211. properties=dict( users=relation( model.UserQuotaAssociation ),
  1212. groups=relation( model.GroupQuotaAssociation ) ) )
  1213. mapper( model.UserQuotaAssociation, model.UserQuotaAssociation.table,
  1214. properties=dict( user=relation( model.User, backref="quotas" ),
  1215. quota=relation( model.Quota ) ) )
  1216. mapper( model.GroupQuotaAssociation, model.GroupQuotaAssociation.table,
  1217. properties=dict( group=relation( model.Group, backref="quotas" ),
  1218. quota=relation( model.Quota ) ) )
  1219. mapper( model.DefaultQuotaAssociation, model.DefaultQuotaAssociation.table,
  1220. properties=dict( quota=relation( model.Quota, backref="default" ) ) )
  1221. mapper( model.DatasetPermissions, model.DatasetPermissions.table,
  1222. properties=dict(
  1223. dataset=relation( model.Dataset, backref="actions" ),
  1224. role=relation( model.Role, backref="dataset_actions" )
  1225. )
  1226. )
  1227. mapper( model.LibraryPermissions, model.LibraryPermissions.table,
  1228. properties=dict(
  1229. library=relation( model.Library, backref="actions" ),
  1230. role=relation( model.Role, backref="library_actions" )
  1231. )
  1232. )
  1233. mapper( model.LibraryFolderPermissions, model.LibraryFolderPermissions.table,
  1234. properties=dict(
  1235. folder=relation( model.LibraryFolder, backref="actions" ),
  1236. role=relation( model.Role, backref="library_folder_actions" )
  1237. )
  1238. )
  1239. mapper( model.LibraryDatasetPermissions, model.LibraryDatasetPermissions.table,
  1240. properties=dict(
  1241. library_dataset=relation( model.LibraryDataset, backref="actions" ),
  1242. role=relation( model.Role, backref="library_dataset_actions" )
  1243. )
  1244. )
  1245. mapper( model.LibraryDatasetDatasetAssociationPermissions, model.LibraryDatasetDatasetAssociationPermissions.table,
  1246. properties=dict(
  1247. library_dataset_dataset_association = relation( model.LibraryDatasetDatasetAssociation, backref="actions" ),
  1248. role=relation( model.Role, backref="library_dataset_dataset_actions" )
  1249. )
  1250. )
  1251. mapper( model.Library, model.Library.table,
  1252. properties=dict(
  1253. root_folder=relation( model.LibraryFolder, backref=backref( "library_root" ) )
  1254. )
  1255. )
  1256. mapper( model.ExtendedMetadata, model.ExtendedMetadata.table,
  1257. properties=dict(
  1258. children=relation(
  1259. model.ExtendedMetadataIndex,
  1260. primaryjoin=( model.ExtendedMetadataIndex.table.c.extended_metadata_id == model.ExtendedMetadata.table.c.id ),
  1261. backref=backref("parent",
  1262. primaryjoin=( model.ExtendedMetadataIndex.table.c.extended_metadata_id == model.ExtendedMetadata.table.c.id )
  1263. )
  1264. )
  1265. )
  1266. )
  1267. mapper( model.ExtendedMetadataIndex, model.ExtendedMetadataIndex.table,
  1268. properties=dict(
  1269. extended_metadata=relation(
  1270. model.ExtendedMetadata,
  1271. primaryjoin=( ( model.ExtendedMetadataIndex.table.c.extended_metadata_id == model.ExtendedMetadata.table.c.id ) )
  1272. )
  1273. )
  1274. )
  1275. mapper( model.LibraryInfoAssociation, model.LibraryInfoAssociation.table,
  1276. properties=dict( library=relation( model.Library,
  1277. primaryjoin=( ( model.LibraryInfoAssociation.table.c.library_id == model.Library.table.c.id ) & ( not_( model.LibraryInfoAssociation.table.c.deleted ) ) ), backref="info_association" ),
  1278. template=relation( model.FormDefinition,
  1279. primaryjoin=( model.LibraryInfoAssociation.table.c.form_definition_id == model.FormDefinition.table.c.id ) ),
  1280. info=relation( model.FormValues,
  1281. primaryjoin=( model.LibraryInfoAssociation.table.c.form_values_id == model.FormValues.table.c.id ) )
  1282. ) )
  1283. mapper( model.LibraryFolder, model.LibraryFolder.table,
  1284. properties=dict(
  1285. folders=relation(
  1286. model.LibraryFolder,
  1287. primaryjoin=( model.LibraryFolder.table.c.parent_id == model.LibraryFolder.table.c.id ),
  1288. order_by=asc( model.LibraryFolder.table.c.name ),
  1289. backref=backref( "parent", primaryjoin=( model.LibraryFolder.table.c.parent_id == model.LibraryFolder.table.c.id ), remote_side=[model.LibraryFolder.table.c.id] ) ),
  1290. active_folders=relation( model.LibraryFolder,
  1291. primaryjoin=( ( model.LibraryFolder.table.c.parent_id == model.LibraryFolder.table.c.id ) & ( not_( model.LibraryFolder.table.c.deleted ) ) ),
  1292. order_by=asc( model.LibraryFolder.table.c.name ),
  1293. lazy=True, #"""sqlalchemy.exceptions.ArgumentError: Error creating eager relationship 'active_folders' on parent class '<class 'galaxy.model.LibraryFolder'>' to child class '<class 'galaxy.model.LibraryFolder'>': Cant use eager loading on a self referential relationship."""
  1294. viewonly=True ),
  1295. datasets=relation( model.LibraryDataset,
  1296. primaryjoin=( ( model.LibraryDataset.table.c.folder_id == model.LibraryFolder.table.c.id ) ),
  1297. order_by=asc( model.LibraryDataset.table.c._name ),
  1298. lazy=True,
  1299. viewonly=True ),
  1300. active_datasets=relation( model.LibraryDataset,
  1301. primaryjoin=( ( model.LibraryDataset.table.c.folder_id == model.LibraryFolder.table.c.id ) & ( not_( model.LibraryDataset.table.c.deleted ) ) ),
  1302. order_by=asc( model.LibraryDataset.table.c._name ),
  1303. lazy=True,
  1304. viewonly=True )
  1305. ) )
  1306. mapper( model.LibraryFolderInfoAssociation, model.LibraryFolderInfoAssociation.table,
  1307. properties=dict( folder=relation( model.LibraryFolder,
  1308. primaryjoin=( ( model.LibraryFolderInfoAssociation.table.c.library_folder_id == model.LibraryFolder.table.c.id ) & ( not_( model.LibraryFolderInfoAssociation.table.c.deleted ) ) ), backref="info_association" ),
  1309. template=relation( model.FormDefinition,
  1310. primaryjoin=( model.LibraryFolderInfoAssociation.table.c.form_definition_id == model.FormDefinition.table.c.id ) ),
  1311. info=relation( model.FormValues,
  1312. primaryjoin=( model.LibraryFolderInfoAssociation.table.c.form_values_id == model.FormValues.table.c.id ) )
  1313. ) )
  1314. mapper( model.LibraryDataset, model.LibraryDataset.table,
  1315. properties=dict(
  1316. folder=relation( model.LibraryFolder ),
  1317. library_dataset_dataset_association=relation( model.LibraryDatasetDatasetAssociation, primaryjoin=( model.LibraryDataset.table.c.library_dataset_dataset_association_id == model.LibraryDatasetDatasetAssociation.table.c.id ) ),
  1318. expired_datasets = relation( model.LibraryDatasetDatasetAssociation, foreign_keys=[model.LibraryDataset.table.c.id,model.LibraryDataset.table.c.library_dataset_dataset_association_id ], primaryjoin=( ( model.LibraryDataset.table.c.id == model.LibraryDatasetDatasetAssociation.table.c.library_dataset_id ) & ( not_( model.LibraryDataset.table.c.library_dataset_dataset_association_id == model.LibraryDatasetDatasetAssociation.table.c.id ) ) ), viewonly=True, uselist=True )
  1319. ) )
  1320. mapper( model.LibraryDatasetDatasetAssociation, model.LibraryDatasetDatasetAssociation.table,
  1321. properties=dict(
  1322. dataset=relation( model.Dataset ),
  1323. library_dataset = relation( model.LibraryDataset,
  1324. primaryjoin=( model.LibraryDatasetDatasetAssociation.table.c.library_dataset_id == model.LibraryDataset.table.c.id ) ),
  1325. #user=relation( model.User.mapper ),
  1326. user=relation( model.User ),
  1327. copied_from_library_dataset_dataset_association=relation(
  1328. model.LibraryDatasetDatasetAssociation,
  1329. primaryjoin=( model.LibraryDatasetDatasetAssociation.table.c.copied_from_library_dataset_dataset_association_id == model.LibraryDatasetDatasetAssociation.table.c.id ),
  1330. remote_side=[model.LibraryDatasetDatasetAssociation.table.c.id],
  1331. uselist=False ),
  1332. copied_to_library_dataset_dataset_associations=relation(
  1333. model.LibraryDatasetDatasetAssociation,
  1334. primaryjoin=( model.LibraryDatasetDatasetAssociation.table.c.copied_from_library_dataset_dataset_association_id == model.LibraryDatasetDatasetAssociation.table.c.id ) ),
  1335. copied_from_history_dataset_association=relation(
  1336. model.HistoryDatasetAssociation,
  1337. primaryjoin=( model.LibraryDatasetDatasetAssociation.table.c.copied_from_history_dataset_association_id == model.HistoryDatasetAssociation.table.c.id ),
  1338. uselist=False ),
  1339. copied_to_history_dataset_associations=relation(
  1340. model.HistoryDatasetAssociation,
  1341. primaryjoin=( model.HistoryDatasetAssociation.table.c.copied_from_library_dataset_dataset_association_id == model.LibraryDatasetDatasetAssociation.table.c.id ) ),
  1342. implicitly_converted_datasets=relation(
  1343. model.ImplicitlyConvertedDatasetAssociation,
  1344. primaryjoin=( model.ImplicitlyConvertedDatasetAssociation.table.c.ldda_parent_id == model.LibraryDatasetDatasetAssociation.table.c.id ) ),
  1345. children=relation(
  1346. model.LibraryDatasetDatasetAssociation,
  1347. primaryjoin=( model.LibraryDatasetDatasetAssociation.table.c.parent_id == model.LibraryDatasetDatasetAssociation.table.c.id ),
  1348. backref=backref( "parent", primaryjoin=( model.LibraryDatasetDatasetAssociation.table.c.parent_id == model.LibraryDatasetDatasetAssociation.table.c.id ), remote_side=[model.LibraryDatasetDatasetAssociation.table.c.id] ) ),
  1349. visible_children=relation(
  1350. model.LibraryDatasetDatasetAssociation,
  1351. primaryjoin=( ( model.LibraryDatasetDatasetAssociation.table.c.parent_id == model.LibraryDatasetDatasetAssociation.table.c.id ) & ( model.LibraryDatasetDatasetAssociation.table.c.visible == True ) ) ),
  1352. extended_metadata=relation(
  1353. model.ExtendedMetadata,
  1354. primaryjoin=( ( model.LibraryDatasetDatasetAssociation.table.c.extended_metadata_id == model.ExtendedMetadata.table.c.id ) )
  1355. )
  1356. ))
  1357. mapper( model.LibraryDatasetDatasetInfoAssociation, model.LibraryDatasetDatasetInfoAssociation.table,
  1358. properties=dict( library_dataset_dataset_association=relation( model.LibraryDatasetDatasetAssociation,
  1359. primaryjoin=( ( model.LibraryDatasetDatasetInfoAssociation.table.c.library_dataset_dataset_association_id == model.LibraryDatasetDatasetAssociation.table.c.id ) & ( not_( model.LibraryDatasetDatasetInfoAssociation.table.c.deleted ) ) ), backref="info_association" ),
  1360. template=relation( model.FormDefinition,
  1361. primaryjoin=( model.LibraryDatasetDatasetInfoAssociation.table.c.form_definition_id == model.FormDefinition.table.c.id ) ),
  1362. info=relation( model.FormValues,
  1363. primaryjoin=( model.LibraryDatasetDatasetInfoAssociation.table.c.form_values_id == model.FormValues.table.c.id ) )
  1364. ) )
  1365. mapper( model.JobToInputDatasetAssociation,
  1366. model.JobToInputDatasetAssociation.table, properties=dict(
  1367. job=relation( model.Job ), dataset=relation(
  1368. model.HistoryDatasetAssociation, lazy=False,
  1369. backref="dependent_jobs" ) ) )
  1370. mapper( model.JobToOutputDatasetAssociation,
  1371. model.JobToOutputDatasetAssociation.table, properties=dict(
  1372. job=relation( model.Job ), dataset=relation(
  1373. model.HistoryDatasetAssociation, lazy=False ) ) )
  1374. mapper( model.JobToInputLibraryDatasetAssociation,
  1375. model.JobToInputLibraryDatasetAssociation.table, properties=dict(
  1376. job=relation( model.Job ), dataset=relation(
  1377. model.LibraryDatasetDatasetAssociation, lazy=False,
  1378. backref="dependent_jobs" ) ) )
  1379. mapper( model.JobToOutputLibraryDatasetAssociation,
  1380. model.JobToOutputLibraryDatasetAssociation.table, properties=dict(
  1381. job=relation( model.Job ), dataset=relation(
  1382. model.LibraryDatasetDatasetAssociation, lazy=False ) ) )
  1383. mapper( model.JobParameter, model.JobParameter.table )
  1384. mapper( model.JobExternalOutputMetadata, model.JobExternalOutputMetadata.table,
  1385. properties=dict( job = relation( model.Job ),
  1386. history_dataset_association = relation( model.HistoryDatasetAssociation, lazy = False ),
  1387. library_dataset_dataset_association = relation( model.LibraryDatasetDatasetAssociation, lazy = False ) ) )
  1388. mapper( model.JobExportHistoryArchive, model.JobExportHistoryArchive.table,
  1389. properties=dict( job = relation( model.Job ),
  1390. history = relation( model.History ),
  1391. dataset = relation( model.Dataset ) ) )
  1392. mapper( model.JobImportHistoryArchive, model.JobImportHistoryArchive.table,
  1393. properties=dict( job = relation( model.Job ), history = relation( model.History ) ) )
  1394. mapper( model.GenomeIndexToolData, model.GenomeIndexToolData.table,
  1395. properties=dict( job = relation( model.Job, backref='job' ),
  1396. dataset = relation( model.Dataset ),
  1397. user = relation( model.User ),
  1398. deferred = relation( model.DeferredJob, backref='deferred_job' ),
  1399. transfer = relation( model.TransferJob, backref='transfer_job' ) ) )
  1400. mapper(model.PostJobAction, model.PostJobAction.table,
  1401. properties=dict(workflow_step = relation( model.WorkflowStep, backref='post_job_actions', primaryjoin=(model.WorkflowStep.table.c.id == model.PostJobAction.table.c.workflow_step_id))))
  1402. mapper( model.PostJobActionAssociation, model.PostJobActionAssociation.table,
  1403. properties=dict( job = relation( model.Job ),
  1404. post_job_action = relation( model.PostJobAction) ) )
  1405. mapper( model.Job, model.Job.table,
  1406. #properties=dict( user=relation( model.User.mapper ),
  1407. properties=dict( user=relation( model.User ),
  1408. galaxy_session=relation( model.GalaxySession ),
  1409. history=relation( model.History ),
  1410. library_folder=relation( model.LibraryFolder ),
  1411. parameters=relation( model.JobParameter, lazy=False ),
  1412. input_datasets=relation( model.JobToInputDatasetAssociation ),
  1413. output_datasets=relation( model.JobToOutputDatasetAssociation ),
  1414. post_job_actions=relation( model.PostJobActionAssociation, lazy=False ),
  1415. input_library_datasets=relation( model.JobToInputLibraryDatasetAssociation ),
  1416. output_library_datasets=relation( model.JobToOutputLibraryDatasetAssociation ),
  1417. external_output_metadata = relation( model.JobExternalOutputMetadata, lazy = False ),
  1418. tasks = relation(model.Task) ) )
  1419. mapper( model.Task, model.Task.table,
  1420. properties=dict( job = relation( model.Job ) ) )
  1421. mapper( model.DeferredJob, model.DeferredJob.table,
  1422. properties = {} )
  1423. mapper( model.TransferJob, model.TransferJob.table,
  1424. properties = {} )
  1425. mapper( model.Event, model.Event.table,
  1426. properties=dict( history=relation( model.History ),
  1427. galaxy_session=relation( model.GalaxySession ),
  1428. #user=relation( model.User.mapper ) ) )
  1429. user=relation( model.User ) ) )
  1430. mapper( model.GalaxySession, model.GalaxySession.table,
  1431. properties=dict( histories=relation( model.GalaxySessionToHistoryAssociation ),
  1432. current_history=relation( model.History ),
  1433. #user=relation( model.User.mapper ) ) )
  1434. user=relation( model.User ) ) )
  1435. mapper( model.GalaxySessionToHistoryAssociation, model.GalaxySessionToHistoryAssociation.table,
  1436. properties=dict( galaxy_session=relation( model.GalaxySession ),
  1437. history=relation( model.History ) ) )
  1438. mapper( model.Workflow, model.Workflow.table,
  1439. properties=dict( steps=relation( model.WorkflowStep, backref='workflow',
  1440. order_by=asc(model.WorkflowStep.table.c.order_index),
  1441. cascade="all, delete-orphan",
  1442. lazy=False ),
  1443. # outputs = relation( WorkflowOutput, backref='workflow',
  1444. # primaryjoin=(Workflow.table.c.id == WorkflowStep.table.c.workflow_id),
  1445. # secondaryjoin=(WorkflowStep.table.c.id == WorkflowOutput.table.c.workflow_step_id))
  1446. ) )
  1447. mapper( model.WorkflowStep, model.WorkflowStep.table,
  1448. properties=dict(
  1449. tags=relation(model.WorkflowStepTagAssociation, order_by=model.WorkflowStepTagAssociation.table.c.id, backref="workflow_steps"),
  1450. annotations=relation( model.WorkflowStepAnnotationAssociation, order_by=model.WorkflowStepAnnotationAssociation.table.c.id, backref="workflow_steps" ) )
  1451. )
  1452. mapper( model.WorkflowOutput, model.WorkflowOutput.table,
  1453. properties=dict(workflow_step = relation( model.WorkflowStep, backref='workflow_outputs', primaryjoin=(model.WorkflowStep.table.c.id == model.WorkflowOutput.table.c.workflow_step_id))))
  1454. mapper( model.WorkflowStepConnection, model.WorkflowStepConnection.table,
  1455. properties=dict( input_step=relation( model.WorkflowStep, backref="input_connections", cascade="all",
  1456. primaryjoin=( model.WorkflowStepConnection.table.c.input_step_id == model.WorkflowStep.table.c.id ) ),
  1457. output_step=relation( model.WorkflowStep, backref="output_connections", cascade="all",
  1458. primaryjoin=( model.WorkflowStepConnection.table.c.output_step_id == model.WorkflowStep.table.c.id ) ) ) )
  1459. mapper( model.StoredWorkflow, model.StoredWorkflow.table,
  1460. properties=dict( user=relation( model.User,
  1461. primaryjoin=( model.User.table.c.id == model.StoredWorkflow.table.c.user_id ),
  1462. backref='stored_workflows' ),
  1463. workflows=relation( model.Workflow, backref='stored_workflow',
  1464. cascade="all, delete-orphan",
  1465. primaryjoin=( model.StoredWorkflow.table.c.id == model.Workflow.table.c.stored_workflow_id ) ),
  1466. latest_workflow=relation( model.Workflow, post_update=True,
  1467. primaryjoin=( model.StoredWorkflow.table.c.latest_workflow_id == model.Workflow.table.c.id ),
  1468. lazy=False ),
  1469. tags=relation( model.StoredWorkflowTagAssociation, order_by=model.StoredWorkflowTagAssociation.table.c.id, backref="stored_workflows" ),
  1470. owner_tags=relation( model.StoredWorkflowTagAssociation,
  1471. primaryjoin=and_( model.StoredWorkflow.table.c.id == model.StoredWorkflowTagAssociation.table.c.stored_workflow_id,
  1472. model.StoredWorkflow.table.c.user_id == model.StoredWorkflowTagAssociation.table.c.user_id ),
  1473. order_by=model.StoredWorkflowTagAssociation.table.c.id ),
  1474. annotations=relation( model.StoredWorkflowAnnotationAssociation, order_by=model.StoredWorkflowAnnotationAssociation.table.c.id, backref="stored_workflows" ),
  1475. ratings=relation( model.StoredWorkflowRatingAssociation, order_by=model.StoredWorkflowRatingAssociation.table.c.id, backref="stored_workflows" ) )
  1476. )
  1477. # Set up proxy so that
  1478. # StoredWorkflow.users_shared_with
  1479. # returns a list of users that workflow is shared with.
  1480. model.StoredWorkflow.users_shared_with_dot_users = association_proxy( 'users_shared_with', 'user' )
  1481. mapper( model.StoredWorkflowUserShareAssociation, model.StoredWorkflowUserShareAssociation.table,
  1482. properties=dict( user=relation( model.User, backref='workflows_shared_by_others' ),
  1483. stored_workflow=relation( model.StoredWorkflow, backref='users_shared_with' )
  1484. ) )
  1485. mapper( model.StoredWorkflowMenuEntry, model.StoredWorkflowMenuEntry.table,
  1486. properties=dict( stored_workflow=relation( model.StoredWorkflow ) ) )
  1487. mapper( model.WorkflowInvocation, model.WorkflowInvocation.table,
  1488. properties=dict(
  1489. steps=relation( model.WorkflowInvocationStep, backref='workflow_invocation', lazy=False ),
  1490. workflow=relation( model.Workflow ) ) )
  1491. mapper( model.WorkflowInvocationStep, model.WorkflowInvocationStep.table,
  1492. properties=dict(
  1493. workflow_step = relation( model.WorkflowStep ),
  1494. job = relation( model.Job, backref=backref( 'workflow_invocation_step', uselist=False ) ) ) )
  1495. mapper( model.MetadataFile, model.MetadataFile.table,
  1496. properties=dict( history_dataset=relation( model.HistoryDatasetAssociation ), library_dataset=relation( model.LibraryDatasetDatasetAssociation ) ) )
  1497. mapper( model.PageRevision, model.PageRevision.table )
  1498. mapper( model.Page, model.Page.table,
  1499. properties=dict( user=relation( model.User ),
  1500. revisions=relation( model.PageRevision, backref='page',
  1501. cascade="all, delete-orphan",
  1502. primaryjoin=( model.Page.table.c.id == model.PageRevision.table.c.page_id ) ),
  1503. latest_revision=relation( model.PageRevision, post_update=True,
  1504. primaryjoin=( model.Page.table.c.latest_revision_id == model.PageRevision.table.c.id ),
  1505. lazy=False ),
  1506. tags=relation(model.PageTagAssociation, order_by=model.PageTagAssociation.table.c.id, backref="pages"),
  1507. annotations=relation( model.PageAnnotationAssociation, order_by=model.PageAnnotationAssociation.table.c.id, backref="pages" ),
  1508. ratings=relation( model.PageRatingAssociation, order_by=model.PageRatingAssociation.table.c.id, backref="pages" )
  1509. ) )
  1510. # Set up proxy so that
  1511. # Page.users_shared_with
  1512. # returns a list of users that page is shared with.
  1513. model.Page.users_shared_with_dot_users = association_proxy( 'users_shared_with', 'user' )
  1514. mapper( model.PageUserShareAssociation, model.PageUserShareAssociation.table,
  1515. properties=dict( user=relation( model.User, backref='pages_shared_by_others' ),
  1516. page=relation( model.Page, backref='users_shared_with' )
  1517. ) )
  1518. mapper( model.VisualizationRevision, model.VisualizationRevision.table )
  1519. mapper( model.Visualization, model.Visualization.table,
  1520. properties=dict( user=relation( model.User ),
  1521. revisions=relation( model.VisualizationRevision, backref='visualization',
  1522. cascade="all, delete-orphan",
  1523. primaryjoin=( model.Visualization.table.c.id == model.VisualizationRevision.table.c.visualization_id ) ),
  1524. latest_revision=relation( model.VisualizationRevision, post_update=True,
  1525. primaryjoin=( model.Visualization.table.c.latest_revision_id == model.VisualizationRevision.table.c.id ),
  1526. lazy=False ),
  1527. tags=relation( model.VisualizationTagAssociation, order_by=model.VisualizationTagAssociation.table.c.id, backref="visualizations" ),
  1528. annotations=relation( model.VisualizationAnnotationAssociation, order_by=model.VisualizationAnnotationAssociation.table.c.id, backref="visualizations" ),
  1529. ratings=relation( model.VisualizationRatingAssociation, order_by=model.VisualizationRatingAssociation.table.c.id, backref="visualizations" )
  1530. ) )
  1531. # Set up proxy so that
  1532. # Visualization.users_shared_with
  1533. # returns a list of users that visualization is shared with.
  1534. model.Visualization.users_shared_with_dot_users = association_proxy( 'users_shared_with', 'user' )
  1535. mapper( model.VisualizationUserShareAssociation, model.VisualizationUserShareAssociation.table,
  1536. properties=dict( user=relation( model.User, backref='visualizations_shared_by_others' ),
  1537. visualization=relation( model.Visualization, backref='users_shared_with' )
  1538. ) )
  1539. # Tag tables.
  1540. simple_mapping( model.Tag,
  1541. children=relation(model.Tag, backref=backref( 'parent', remote_side=[model.Tag.table.c.id] ) )
  1542. )
  1543. def tag_mapping( tag_association_class, backref_name ):
  1544. simple_mapping( tag_association_class, tag=relation( model.Tag, backref=backref_name), user=relation( model.User ) )
  1545. tag_mapping( model.HistoryTagAssociation, "tagged_histories" )
  1546. tag_mapping( model.DatasetTagAssociation, "tagged_datasets" )
  1547. tag_mapping( model.HistoryDatasetAssociationTagAssociation, "tagged_history_dataset_associations" )
  1548. tag_mapping( model.PageTagAssociation, "tagged_pages" )
  1549. tag_mapping( model.StoredWorkflowTagAssociation, "tagged_workflows" )
  1550. tag_mapping( model.WorkflowStepTagAssociation, "tagged_workflow_steps" )
  1551. tag_mapping( model.VisualizationTagAssociation, "tagged_visualizations" )
  1552. tag_mapping( model.ToolTagAssociation, "tagged_tools" )
  1553. # Annotation tables.
  1554. def annotation_mapping( annotation_class, **kwds ):
  1555. kwds = dict( [ (key, relation( value ) ) for key, value in kwds.iteritems() ] )
  1556. simple_mapping( annotation_class, **dict(user=relation( model.User ), **kwds ) )
  1557. annotation_mapping( model.HistoryAnnotationAssociation, history=model.History )
  1558. annotation_mapping( model.HistoryDatasetAssociationAnnotationAssociation, hda=model.HistoryDatasetAssociation )
  1559. annotation_mapping( model.StoredWorkflowAnnotationAssociation, stored_workflow=model.StoredWorkflow )
  1560. annotation_mapping( model.WorkflowStepAnnotationAssociation, workflow_step=model.WorkflowStep )
  1561. annotation_mapping( model.PageAnnotationAssociation, page=model.Page )
  1562. annotation_mapping( model.VisualizationAnnotationAssociation, visualization=model.Visualization )
  1563. # Rating tables.
  1564. def rating_mapping( rating_class, **kwds ):
  1565. kwds = dict( [ (key, relation( value ) ) for key, value in kwds.iteritems() ] )
  1566. simple_mapping( rating_class, **dict(user=relation( model.User ), **kwds ) )
  1567. rating_mapping( model.HistoryRatingAssociation, history=model.History )
  1568. rating_mapping( model.HistoryDatasetAssociationRatingAssociation, hda=model.HistoryDatasetAssociation )
  1569. rating_mapping( model.StoredWorkflowRatingAssociation, stored_workflow=model.StoredWorkflow )
  1570. rating_mapping( model.PageRatingAssociation, page=model.Page )
  1571. rating_mapping( model.VisualizationRatingAssociation, visualizaiton=model.Visualization )
  1572. #Data Manager tables
  1573. mapper( model.DataManagerHistoryAssociation, model.DataManagerHistoryAssociation.table,
  1574. properties=dict( history=relation( model.History ),
  1575. user=relation( model.User, backref='data_manager_histories' )
  1576. )
  1577. )
  1578. mapper( model.DataManagerJobAssociation, model.DataManagerJobAssociation.table,
  1579. properties=dict( job=relation( model.Job, backref=backref('data_manager_association', uselist=False ), uselist=False ) )
  1580. )
  1581. # User tables.
  1582. mapper( model.UserPreference, model.UserPreference.table,
  1583. properties = {}
  1584. )
  1585. mapper( model.UserAction, model.UserAction.table,
  1586. #properties = dict( user=relation( model.User.mapper ) )
  1587. properties = dict( user=relation( model.User ) )
  1588. )
  1589. mapper( model.APIKeys, model.APIKeys.table,
  1590. properties = {} )
  1591. #model.HistoryDatasetAssociation.mapper.add_property( "creating_job_associations", relation( model.JobToOutputDatasetAssociation ) )
  1592. #model.LibraryDatasetDatasetAssociation.mapper.add_property( "creating_job_associations", relation( model.JobToOutputLibraryDatasetAssociation ) )
  1593. class_mapper(model.HistoryDatasetAssociation).add_property( "creating_job_associations", relation( model.JobToOutputDatasetAssociation ) )
  1594. class_mapper(model.LibraryDatasetDatasetAssociation).add_property( "creating_job_associations", relation( model.JobToOutputLibraryDatasetAssociation ) )
  1595. # Helper methods.
  1596. def db_next_hid( self ):
  1597. """
  1598. db_next_hid( self )
  1599. Override __next_hid to generate from the database in a concurrency safe way.
  1600. Loads the next history ID from the DB and returns it.
  1601. It also saves the future next_id into the DB.
  1602. :rtype: int
  1603. :returns: the next history id
  1604. """
  1605. conn = object_session( self ).connection()
  1606. table = self.table
  1607. trans = conn.begin()
  1608. try:
  1609. next_hid = select( [table.c.hid_counter], table.c.id == self.id, for_update=True ).scalar()
  1610. table.update( table.c.id == self.id ).execute( hid_counter = ( next_hid + 1 ) )
  1611. trans.commit()
  1612. return next_hid
  1613. except:
  1614. trans.rollback()
  1615. raise
  1616. model.History._next_hid = db_next_hid
  1617. def init( file_path, url, engine_options={}, create_tables=False, map_install_models=False, database_query_profiling_proxy=False, object_store=None, trace_logger=None, use_pbkdf2=True ):
  1618. """Connect mappings to the database"""
  1619. # Connect dataset to the file path
  1620. model.Dataset.file_path = file_path
  1621. # Connect dataset to object store
  1622. model.Dataset.object_store = object_store
  1623. # Use PBKDF2 password hashing?
  1624. model.User.use_pbkdf2 = use_pbkdf2
  1625. # Load the appropriate db module
  1626. engine = build_engine( url, engine_options, database_query_profiling_proxy, trace_logger )
  1627. # Connect the metadata to the database.
  1628. metadata.bind = engine
  1629. model_modules = [model]
  1630. if map_install_models:
  1631. import galaxy.model.tool_shed_install.mapping
  1632. from galaxy.model import tool_shed_install
  1633. model_modules.append(tool_shed_install)
  1634. result = ModelMapping(model_modules, engine=engine)
  1635. # Create tables if needed
  1636. if create_tables:
  1637. metadata.create_all()
  1638. # metadata.engine.commit()
  1639. result.create_tables = create_tables
  1640. #load local galaxy security policy
  1641. result.security_agent = GalaxyRBACAgent( result )
  1642. return result