87 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| #    Copyright (C) 2014 Yahoo! Inc. All Rights Reserved.
 | |
| #
 | |
| #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 | |
| #    not use this file except in compliance with the License. You may obtain
 | |
| #    a copy of the License at
 | |
| #
 | |
| #         http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| #    Unless required by applicable law or agreed to in writing, software
 | |
| #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | |
| #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | |
| #    License for the specific language governing permissions and limitations
 | |
| #    under the License.
 | |
| 
 | |
| import collections
 | |
| 
 | |
| from oslo_utils import timeutils
 | |
| from oslo_utils import uuidutils
 | |
| from sqlalchemy import Table, Column, String, ForeignKey, DateTime, Enum
 | |
| import sqlalchemy_utils as su
 | |
| 
 | |
| from taskflow.persistence import models
 | |
| from taskflow import states
 | |
| 
 | |
| Tables = collections.namedtuple('Tables',
 | |
|                                 ['logbooks', 'flowdetails', 'atomdetails'])
 | |
| 
 | |
| # Column length limits...
 | |
| NAME_LENGTH = 255
 | |
| UUID_LENGTH = 64
 | |
| STATE_LENGTH = 255
 | |
| VERSION_LENGTH = 64
 | |
| 
 | |
| 
 | |
| def fetch(metadata):
 | |
|     """Returns the master set of table objects (which is also there schema)."""
 | |
|     logbooks = Table('logbooks', metadata,
 | |
|                      Column('created_at', DateTime,
 | |
|                             default=timeutils.utcnow),
 | |
|                      Column('updated_at', DateTime,
 | |
|                             onupdate=timeutils.utcnow),
 | |
|                      Column('meta', su.JSONType),
 | |
|                      Column('name', String(length=NAME_LENGTH)),
 | |
|                      Column('uuid', String(length=UUID_LENGTH),
 | |
|                             primary_key=True, nullable=False, unique=True,
 | |
|                             default=uuidutils.generate_uuid))
 | |
|     flowdetails = Table('flowdetails', metadata,
 | |
|                         Column('created_at', DateTime,
 | |
|                                default=timeutils.utcnow),
 | |
|                         Column('updated_at', DateTime,
 | |
|                                onupdate=timeutils.utcnow),
 | |
|                         Column('parent_uuid', String(length=UUID_LENGTH),
 | |
|                                ForeignKey('logbooks.uuid',
 | |
|                                           ondelete='CASCADE')),
 | |
|                         Column('meta', su.JSONType),
 | |
|                         Column('name', String(length=NAME_LENGTH)),
 | |
|                         Column('state', String(length=STATE_LENGTH)),
 | |
|                         Column('uuid', String(length=UUID_LENGTH),
 | |
|                                primary_key=True, nullable=False, unique=True,
 | |
|                                default=uuidutils.generate_uuid))
 | |
|     atomdetails = Table('atomdetails', metadata,
 | |
|                         Column('created_at', DateTime,
 | |
|                                default=timeutils.utcnow),
 | |
|                         Column('updated_at', DateTime,
 | |
|                                onupdate=timeutils.utcnow),
 | |
|                         Column('meta', su.JSONType),
 | |
|                         Column('parent_uuid', String(length=UUID_LENGTH),
 | |
|                                ForeignKey('flowdetails.uuid',
 | |
|                                           ondelete='CASCADE')),
 | |
|                         Column('name', String(length=NAME_LENGTH)),
 | |
|                         Column('version', String(length=VERSION_LENGTH)),
 | |
|                         Column('state', String(length=STATE_LENGTH)),
 | |
|                         Column('uuid', String(length=UUID_LENGTH),
 | |
|                                primary_key=True, nullable=False, unique=True,
 | |
|                                default=uuidutils.generate_uuid),
 | |
|                         Column('failure', su.JSONType),
 | |
|                         Column('results', su.JSONType),
 | |
|                         Column('revert_results', su.JSONType),
 | |
|                         Column('revert_failure', su.JSONType),
 | |
|                         Column('atom_type', Enum(*models.ATOM_TYPES,
 | |
|                                                  name='atom_types')),
 | |
|                         Column('intention', Enum(*states.INTENTIONS,
 | |
|                                                  name='intentions')))
 | |
|     return Tables(logbooks, flowdetails, atomdetails)
 | 
