Change Customer to Account and add get_system_by_account

This commit is contained in:
Endre Karlson 2012-11-04 19:40:15 +01:00
parent a4a44578d2
commit ec43422775
2 changed files with 65 additions and 27 deletions

View File

@ -73,31 +73,69 @@ class Connection(base.Connection):
else:
return obj
def _add(self, context, model, values):
obj = model()
obj.update(values)
obj.save(self.session)
return obj
def _update(self, context, model, id, values):
obj = self._get_id(context, model, id)
obj.update(values)
try:
obj.save(self.session)
except exceptions.Duplicate:
raise
return dict(obj)
def _add_or_update(self, context, model, values, id=None):
if id is None:
return self._add(context, model, values)
else:
return self._update(context, model, values, id)
# NOTE: Rates
def add_rate(self, context, values, session=None):
rate = models.Rate()
rate.update(values)
rate.save(self.session)
return rate
return self._add(context, models.Rate, values)
def get_rates(self, context, session=None):
query = self.session.query(models.Rate)
return [row2dict(row) for row in query.all()]
def update_rate(self, context, rate_id, values):
rate = self._get_id(context, models.Rate, rate_id)
rate.update(values)
try:
rate.save(self.session)
except exceptions.Duplicate:
raise
return dict(rate)
return self._update(context, models.Rate, rate_id, values)
def delete_rate(self, context, rate_id):
rate = self._get_id(context, models.Rate, rate_id)
rate.delete(self.session)
obj = self._get_id(context, models.Rate, rate_id)
obj.delete(self.session)
def process_record(self, context, values):
print pformat(values)
# NOTE: Systems
def add_system(self, context, values, session=None):
return self._add(context, models.SystemAccount, values)
def get_systems(self, context, session=None):
query = self.session.query(models.SystemAccount)
return [row2dict(row) for row in query.all()]
def update_system(self, context, system_id, values):
return self._update(context, models.SystemAccount, system_id, values)
def delete_system(self, context, system_id):
obj = self._get_id(context, models.SystemAccount, system_id)
obj.delete(self.session)
# NOTE: Accounts
def get_system_by_account(self, context, system_id, session=None):
q = self.session.query(models.SystemAccount)
q.filter_by(system_id=system_id)
obj = q.first()
if not obj:
raise exceptions.NotFound(system_id)
return obj
# NOTE: Records
def add_record(self, context, values):
self._add(context, models.Record, values)
def row2dict(row):

View File

@ -116,29 +116,29 @@ class Base(object):
Base = declarative_base(cls=Base)
class Customer(Base):
class Account(Base):
"""
A way to correlate multiple tenants or future Domains in OpenStack into
a single aggregation point
"""
__tablename__ = 'customers'
__tablename__ = 'accounts'
name = Column(Unicode(100), nullable=False)
class CustomerSystem(Base):
class SystemAccount(Base):
"""
A way of tying a "System's Customer" to a Billistix Customer
Bind a System's Account representation to a Account
Examples:
OpenStack Domain or Tenant to a Customer
Credit card system ID
OpenStack Domain or Tenant to a Account
Credit card Account representation to a Account
"""
__tablename__ = "customer_systems"
__tablename__ = "system_accounts"
system_id = Column(Unicode(100), index=True)
system_name = Column(Unicode(100))
customer = relationship("Customer", backref="systems")
customer_id = Column(UUID, ForeignKey('customers.id'))
account = relationship("Account", backref="systems")
account_id = Column(UUID, ForeignKey('accounts.id'))
class Record(Base):
@ -151,9 +151,9 @@ class Record(Base):
start_timestamp = Column(DateTime)
end_timestamp = Column(DateTime)
customer_system = relationship("CustomerSystem", backref="records")
customer_system_id = Column(Unicode(100),
ForeignKey('customer_systems.system_id'),
system_account = relationship("SystemAccount", backref="records")
system_account_id = Column(Unicode(100),
ForeignKey('system_accounts.account_id'),
nullable=False)