from types import StringTypes
from datetime import datetime
+from sqlalchemy import or_, and_
from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy import Table, Column, MetaData, join, ForeignKey
from sqlalchemy.orm import relationship, backref
class SliverAllocation(Base,AlchemyObj):
__tablename__ = 'sliver_allocation'
sliver_id = Column(String, primary_key=True)
+ client_id = Column(String)
+ component_id = Column(String)
+ slice_urn = Column(String)
allocation_state = Column(String)
def __init__(self, **kwds):
if 'sliver_id' in kwds:
self.sliver_id = kwds['sliver_id']
+ if 'client_id' in kwds:
+ self.client_id = kwds['client_id']
+ if 'component_id' in kwds:
+ self.component_id = kwds['component_id']
+ if 'slice_urn' in kwds:
+ self.slice_urn = kwds['slice_urn']
if 'allocation_state' in kwds:
self.allocation_state = kwds['allocation_state']
return state
@staticmethod
- def set_allocations(self, sliver_ids, state):
+ def set_allocations(sliver_ids, state):
from sfa.storage.alchemy import dbsession
if not isinstance(sliver_ids, list):
sliver_ids = [sliver_ids]
sliver_ids_found = []
for sliver_allocation in sliver_allocations:
sliver_allocation.allocation_state = state
- sliver_ids_found = sliver_allocation.sliver_id
+ sliver_ids_found.append(sliver_allocation.sliver_id)
# Some states may not have been updated becuase no sliver allocation state record
# exists for the sliver. Insert new allocation records for these slivers and set
dbsession.commit()
@staticmethod
- def delete_allocations(self, sliver_ids):
+ def delete_allocations(sliver_ids):
from sfa.storage.alchemy import dbsession
if not isinstance(sliver_ids, list):
sliver_ids = [sliver_ids]
for sliver_allocation in sliver_allocations:
dbsession.delete(sliver_allocation)
dbsession.commit()
+
+ def sync(self):
+ from sfa.storage.alchemy import dbsession
+
+ constraints = [SliverAllocation.sliver_id==self.sliver_id]
+ results = dbsession.query(SliverAllocation).filter(and_(*constraints))
+ records = []
+ for result in results:
+ records.append(result)
+
+ if not records:
+ dbsession.add(self)
+ else:
+ record = records[0]
+ record.sliver_id = self.sliver_id
+ record.client_id = self.client_id
+ record.component_id = self.component_id
+ record.slice_urn = self.slice_urn
+ record.allocation_state = self.allocation_state
+ dbsession.commit()
+
##############################
# although the db needs of course to be reachable for the following functions