Almost done with sqlalchemy api
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								taskflow/backends/celery/.celeryapp.py.swp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								taskflow/backends/celery/.celeryapp.py.swp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								taskflow/common/.config.py.swp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								taskflow/common/.config.py.swp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -25,7 +25,8 @@ from oslo.config import cfg | |||||||
|  |  | ||||||
| db_opts = [ | db_opts = [ | ||||||
|     cfg.StrOpt('sql_connection', |     cfg.StrOpt('sql_connection', | ||||||
|                default='mysql://task:flow@localhost/taskflow', |                #default='mysql://task:flow@localhost/taskflow', | ||||||
|  |                default='sqlite:///test.db', | ||||||
|                help='The SQLAlchemy connection string used to connect to the ' |                help='The SQLAlchemy connection string used to connect to the ' | ||||||
|                'database'), |                'database'), | ||||||
|     cfg.IntOpt('sql_idle_timeout', |     cfg.IntOpt('sql_idle_timeout', | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								taskflow/db/sqlalchemy/.api.py.swp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								taskflow/db/sqlalchemy/.api.py.swp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								taskflow/db/sqlalchemy/.models.py.swp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								taskflow/db/sqlalchemy/.models.py.swp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -33,3 +33,171 @@ def model_query(context, *args, **kwargs): | |||||||
|     query = session.query(*args) |     query = session.query(*args) | ||||||
|  |  | ||||||
|     return query |     return query | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | LOGBOOK | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | def logbook_get(context, lb_id, session=None): | ||||||
|  |     """Return a logbook with matching lb_id""" | ||||||
|  |     query = model_query(context, models.LogBook, session=session).\ | ||||||
|  |         filter_by(logbook_id=lb_id) | ||||||
|  |  | ||||||
|  |     if not query: | ||||||
|  |         raise exception.NotFound("No LogBook found with id " | ||||||
|  |                                  "%s." % (lb_id,)) | ||||||
|  |  | ||||||
|  |     return query.first() | ||||||
|  |  | ||||||
|  | def logbook_get_by_name(context, lb_name): | ||||||
|  |     """Return all logbooks with matching name""" | ||||||
|  |     query = model_query(context, models.LogBook).\ | ||||||
|  |         filter_by(name=lb_name) | ||||||
|  |  | ||||||
|  |     if not query: | ||||||
|  |         raise exception.NotFound("LogBook %s not found." | ||||||
|  |                                  % (lb_name,)) | ||||||
|  |  | ||||||
|  |     return query.all() | ||||||
|  |  | ||||||
|  | def logbook_create(context, name, lb_id=None): | ||||||
|  |     """Create a new logbook""" | ||||||
|  |     lb_ref = models.LogBook() | ||||||
|  |     lb_ref.name = name | ||||||
|  |     if lb_id: | ||||||
|  |         lb_ref.logbook_id = lb_id | ||||||
|  |     lb_ref.save() | ||||||
|  |  | ||||||
|  |     return lb_ref | ||||||
|  |  | ||||||
|  | def logbook_get_workflows(context, lb_id): | ||||||
|  |     """Return all workflows associated with a logbook""" | ||||||
|  |     lb = logbook_get(context, lb_id) | ||||||
|  |  | ||||||
|  |     return lb.workflows | ||||||
|  |  | ||||||
|  | def logbook_add_workflow(context, lb_id, wf_name): | ||||||
|  |     """Add Workflow to given LogBook""" | ||||||
|  |     session = get_session() | ||||||
|  |     with session.begin(): | ||||||
|  |         wf = workflow_get(context, wf_name, session=session) | ||||||
|  |         lb = logbook_get(context, lb_id, session=session) | ||||||
|  |  | ||||||
|  |         lb.workflows.append(wf) | ||||||
|  |  | ||||||
|  |         return lb.workflows | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | JOB | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | def job_get(context, job_id, session=None): | ||||||
|  |     """Return Job with matching job_id""" | ||||||
|  |     query = model_query(context, models.Workflow, session=session).\ | ||||||
|  |         filter_by(job_id=job_id) | ||||||
|  |  | ||||||
|  |     if not query: | ||||||
|  |         raise exception.NotFound("No Job with id %s found" | ||||||
|  |                                  % (job_id,)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | WORKFLOW | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | def workflow_get(context, wf_name, session=None): | ||||||
|  |     """Return one workflow with matching workflow_id""" | ||||||
|  |     query = model_query(context, models.Workflow, session=session).\ | ||||||
|  |         filter_by(name=wf_name) | ||||||
|  |  | ||||||
|  |     if not query: | ||||||
|  |         raise exception.NotFound("Workflow %s not found." % (wf_name,)) | ||||||
|  |  | ||||||
|  |     return query.first() | ||||||
|  |  | ||||||
|  | def workflow_get_all(context): | ||||||
|  |     """Return all workflows""" | ||||||
|  |     results = model_query(context, models.Workflow).all() | ||||||
|  |  | ||||||
|  |     if not results: | ||||||
|  |         raise exception.NotFound("No Workflows were found.") | ||||||
|  |  | ||||||
|  |     return results | ||||||
|  |  | ||||||
|  | def workflow_get_names(context): | ||||||
|  |     """Return all workflow names""" | ||||||
|  |     results = model_query(context, models.Workflow.name).all() | ||||||
|  |  | ||||||
|  |     return zip(*results) | ||||||
|  |  | ||||||
|  | def workflow_get_tasks(context, wf_name): | ||||||
|  |     """Return all tasks for a given Workflow""" | ||||||
|  |     wf = workflow_get(context, wf_name) | ||||||
|  |  | ||||||
|  |     return wf.tasks | ||||||
|  |  | ||||||
|  | def workflow_add_task(context, wf_id, task_id): | ||||||
|  |     """Add a task to a given workflow""" | ||||||
|  |     session = get_session() | ||||||
|  |     with session.begin(): | ||||||
|  |         task = task_get(context, task_id, session=session) | ||||||
|  |         wf = workflow_get(context, wf_id, session=session) | ||||||
|  |         wf.tasks.append(task) | ||||||
|  |         return wf.tasks | ||||||
|  |  | ||||||
|  | def workflow_create(context, workflow_name): | ||||||
|  |     """Create new workflow with workflow_id""" | ||||||
|  |     workflow_ref = models.Workflow() | ||||||
|  |     workflow_ref.name = workflow_name | ||||||
|  |     workflow_ref.save() | ||||||
|  |  | ||||||
|  |     return workflow_ref | ||||||
|  |  | ||||||
|  | def workflow_destroy(context, wf_id): | ||||||
|  |     """Delete a given Workflow""" | ||||||
|  |     session = get_session() | ||||||
|  |     with session.begin(): | ||||||
|  |         wf = workflow_get(context, wf_id, session=session) | ||||||
|  |         wf.delete() | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | TASK | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | def task_get(context, task_id, session=None): | ||||||
|  |     """Return Task with task_id""" | ||||||
|  |     result = model_query(context, models.Task, session=session).\ | ||||||
|  |         filter_by(task_id=task_id) | ||||||
|  |  | ||||||
|  |     if not result: | ||||||
|  |         raise exception.NotFound("No Task found with id " | ||||||
|  |                                  "%s." % (task_id,)) | ||||||
|  |  | ||||||
|  |     return result | ||||||
|  |  | ||||||
|  | def task_create(context, task_name, wf_id, task_id=None): | ||||||
|  |     """Create task associated with given workflow""" | ||||||
|  |     task_ref = models.Task() | ||||||
|  |     task_ref.name = task_name | ||||||
|  |     task_ref.wf_id = wf_id | ||||||
|  |     if task_id: | ||||||
|  |         task_ref.task_id = task_id | ||||||
|  |     task_ref.save() | ||||||
|  |  | ||||||
|  |     return task_ref | ||||||
|  |  | ||||||
|  | def task_update(context, task_id, values): | ||||||
|  |     """Update Task with given values""" | ||||||
|  |     session = get_session() | ||||||
|  |     with session.begin(): | ||||||
|  |         task = task_get(context, task_id) | ||||||
|  |  | ||||||
|  |         task.update(values) | ||||||
|  |         task.save() | ||||||
|  |  | ||||||
|  | def task_destroy(context, task_id): | ||||||
|  |     """Delete an existing Task""" | ||||||
|  |     session = get_session() | ||||||
|  |     with session.begin(): | ||||||
|  |         task = task_get(context, task_id, session=session) | ||||||
|  |         task.delete() | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ SQLAlchemy models for taskflow data. | |||||||
|  |  | ||||||
| from oslo.config import cfg | from oslo.config import cfg | ||||||
|  |  | ||||||
| from sqlalchemy import Column, Integer, String, Table | from sqlalchemy import Column, Integer, String, Table, MetaData | ||||||
| from sqlalchemy.exc import IntegrityError | from sqlalchemy.exc import IntegrityError | ||||||
| from sqlalchemy.ext.declarative import declarative_base | from sqlalchemy.ext.declarative import declarative_base | ||||||
| from sqlalchemy.orm import object_mapper, relationship, backref | from sqlalchemy.orm import object_mapper, relationship, backref | ||||||
| @@ -31,13 +31,12 @@ from sqlalchemy import types as types | |||||||
|  |  | ||||||
| from json import dumps, loads | from json import dumps, loads | ||||||
|  |  | ||||||
| from taskflow.db.sqlalchemy.session import get_session | from taskflow.db.sqlalchemy.session import get_session, get_engine | ||||||
| from taskflow.openstack.common import timeutils, uuidutils | from taskflow.openstack.common import timeutils, uuidutils | ||||||
|  |  | ||||||
| CONF = cfg.CONF | CONF = cfg.CONF | ||||||
| BASE = declarative_base() | BASE = declarative_base() | ||||||
|  |  | ||||||
|  |  | ||||||
| class Json(types.TypeDecorator, types.MutableType): | class Json(types.TypeDecorator, types.MutableType): | ||||||
|     impl = types.Text |     impl = types.Text | ||||||
|  |  | ||||||
| @@ -128,6 +127,8 @@ class LogBook(BASE, TaskFlowBase): | |||||||
|     __tablename__ = 'logbook' |     __tablename__ = 'logbook' | ||||||
|  |  | ||||||
|     id = Column(Integer, primary_key=True) |     id = Column(Integer, primary_key=True) | ||||||
|  |     logbook_id = Column(String, default=uuidutils.generate_uuid, | ||||||
|  |                         unique=True) | ||||||
|     name = Column(String) |     name = Column(String) | ||||||
|     workflows = relationship("Workflow", |     workflows = relationship("Workflow", | ||||||
|                              secondary=workflow_logbook_assoc) |                              secondary=workflow_logbook_assoc) | ||||||
| @@ -138,7 +139,8 @@ class Job(BASE, TaskFlowBase): | |||||||
|     __tablename__ = 'job' |     __tablename__ = 'job' | ||||||
|  |  | ||||||
|     id = Column(Integer, primary_key=True) |     id = Column(Integer, primary_key=True) | ||||||
|     job_id = Column(String, default=uuidutils.generate_uuid) |     job_id = Column(String, default=uuidutils.generate_uuid, | ||||||
|  |                     unique=True) | ||||||
|     name = Column(String) |     name = Column(String) | ||||||
|     owner = Column(String) |     owner = Column(String) | ||||||
|     state = Column(String) |     state = Column(String) | ||||||
| @@ -152,8 +154,7 @@ class Workflow(BASE, TaskFlowBase): | |||||||
|     __tablename__ = 'workflow' |     __tablename__ = 'workflow' | ||||||
|  |  | ||||||
|     id = Column(Integer, primary_key=True) |     id = Column(Integer, primary_key=True) | ||||||
|     workflow_id = Column(String, default=uuidutils.generate_uuid) |     name = Column(String, unique=True) | ||||||
|     name = Column(String) |  | ||||||
|     tasks = relationship("Task", backref="workflow") |     tasks = relationship("Task", backref="workflow") | ||||||
|  |  | ||||||
| class Task(BASE, TaskFlowBase): | class Task(BASE, TaskFlowBase): | ||||||
| @@ -168,3 +169,6 @@ class Task(BASE, TaskFlowBase): | |||||||
|     exception = Column(String) |     exception = Column(String) | ||||||
|     stacktrace = Column(String) |     stacktrace = Column(String) | ||||||
|     workflow_id = Column(String, ForeignKey('workflow.id')) |     workflow_id = Column(String, ForeignKey('workflow.id')) | ||||||
|  |  | ||||||
|  | def create_tables(): | ||||||
|  |     BASE.metadata.create_all(get_engine()) | ||||||
|   | |||||||
| @@ -78,17 +78,17 @@ def get_engine(): | |||||||
|             "convert_unicode": True |             "convert_unicode": True | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     if "sqlite" in connection_dict.drivername: |         if "sqlite" in connection_dict.drivername: | ||||||
|         engine_args['poolclass'] = NullPool |             engine_args['poolclass'] = NullPool | ||||||
|  |  | ||||||
|     _ENGINE = sqlalchemy.create_engine(_get_sql_connection(), |         _ENGINE = sqlalchemy.create_engine(_get_sql_connection(), | ||||||
|                                        **engine_args) |                                            **engine_args) | ||||||
|  |  | ||||||
|     if 'mysql' in connection_dict.drivername: |         if 'mysql' in connection_dict.drivername: | ||||||
|         sqlalchemy.event.listen(_ENGINE, 'checkout', ping_listener) |             sqlalchemy.event.listen(_ENGINE, 'checkout', ping_listener) | ||||||
|     if 'sqlite' in connection_dict.drivername: |         if 'sqlite' in connection_dict.drivername: | ||||||
|         sqlalchemy.event.listen(_ENGINE, 'connect', |             sqlalchemy.event.listen(_ENGINE, 'connect', | ||||||
|                                 synchronous_switch_listener) |                                     synchronous_switch_listener) | ||||||
|  |  | ||||||
|     #TODO: Check to make sure engine connected |     #TODO: Check to make sure engine connected | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								taskflow/test.db
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								taskflow/test.db
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user
	 Jessica Lucci
					Jessica Lucci