From d60154796408589b68350a34e25ee8d4efb03a78 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Fri, 6 Mar 2009 18:05:28 +0000 Subject: Snapshots: Finish off importer (for old-style statistics) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5108 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Snapshots/model.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src/lib/Server/Snapshots/model.py') diff --git a/src/lib/Server/Snapshots/model.py b/src/lib/Server/Snapshots/model.py index f1432ffce..ea9c6b811 100644 --- a/src/lib/Server/Snapshots/model.py +++ b/src/lib/Server/Snapshots/model.py @@ -1,15 +1,19 @@ -from sqlalchemy import Table, Column, Integer, Unicode, ForeignKey, Boolean, DateTime, create_engine, UnicodeText +from sqlalchemy import Table, Column, Integer, Unicode, ForeignKey, Boolean, DateTime, UnicodeText import datetime import sqlalchemy.exceptions from sqlalchemy.orm import relation, backref from sqlalchemy.ext.declarative import declarative_base class Uniquer(object): + force_rt = True @classmethod def by_value(cls, session, **kwargs): - try: - return session.query(cls).filter_by(**kwargs).one() - except sqlalchemy.exceptions.InvalidRequestError: + if cls.force_rt: + try: + return session.query(cls).filter_by(**kwargs).one() + except sqlalchemy.exceptions.InvalidRequestError: + return cls(**kwargs) + else: return cls(**kwargs) @classmethod @@ -97,10 +101,13 @@ class CorrespondenceType(object): mtype = Package @classmethod def from_record(cls, mysession, record): - (mod, corr, s_dict, e_dict) = record - start = cls.mtype.by_value(mysession, **s_dict) + (mod, corr, name, s_dict, e_dict) = record + if not s_dict: + start=None + else: + start = cls.mtype.by_value(mysession, name=name, **s_dict) if s_dict != e_dict: - end = cls.mtype.by_value(mysession, **e_dict) + end = cls.mtype.by_value(mysession, name=name, **e_dict) else: end = start return cls(start=start, end=end, modified=mod, correct=corr) @@ -142,7 +149,7 @@ service_snap = Table('service_snap', Base.metadata, Column('spair_id', Integer, ForeignKey('service_pair.id')), Column('snapshot_id', Integer, ForeignKey('snapshot.id'))) -class File(Base): +class File(Base, Uniquer): __tablename__ = 'file' id = Column(Integer, primary_key=True) name = Column(UnicodeText) -- cgit v1.2.3-1-g7c22