コード例 #1
0
ファイル: listing.py プロジェクト: bosch-ros-pkg/bagbunker
def generate_listing_model():
    """Generate listing model after all addons are loaded"""
    global ListingEntry, Relations
    # XXX: For now we all parallel created apps have the same model,
    # this only affects testing.
    if ListingEntry is not None:
        return ListingEntry, Relations
    name = 'ListingEntry'
    bases = (db.Model,)
    class_dict = {
        '__bind_key__': 'cache',
        '__tablename__': 'listing_entry',
        'id': db.Column(db.String, primary_key=True),  # md5
        'remote': db.Column(db.String),                # url
        'fileset_id': db.Column(db.Integer),
        'storage_id': db.Column(db.Integer),
        'type': db.Column(db.String),
    }
    relcols = []
    for name, callback in LISTING_CALLBACKS.items():
        for col in callback.columns:
            assert col.name not in class_dict
            if col.relation:
                assert col.name not in Relations
                relcols.append(col)
            else:
                class_dict[col.name] = db.Column(col.type)
    ListingEntry = model_metaclass(name, bases, class_dict)
    for col in relcols:
        Relations[col.name] = generate_relation_model(col)
    db.create_all(bind='cache')
    return ListingEntry, Relations
コード例 #2
0
ファイル: decorators.py プロジェクト: bosch-ros-pkg/bagbunker
 def decorator(cls):
     name = cls.__name__
     package, jobname = cls.__module__.rsplit('.', 1)
     group = MODULE_NAME_MAP['job'][package]
     tablename = '__'.join([
         group,
         jobname,
         re.sub('([A-Z])', lambda x: '_{}'.format(x.group(1).lower()), name)[1:]
     ])
     bases = (db.Model,)
     class_dict = {
         '__doc__': cls.__doc__,
         '__module__': cls.__module__,
         '__tablename__': tablename,
         'id': db.Column(db.Integer, primary_key=True),
         'jobrun_id': db.Column(db.Integer, db.ForeignKey('jobrun.id')),
         'jobrun': db.relationship(
             'Jobrun', uselist=False,
             backref=db.backref(tablename, uselist=True)
         ),
         'as_dict': property(_model_to_dict)
     }
     class_dict.update((k, v) for k, v in cls.__dict__.items()
                       if k[0] != '_')
     Model = model_metaclass(name, bases, class_dict)
     MODELS.append(Model)
     return Model
コード例 #3
0
ファイル: listing.py プロジェクト: bosch-ros-pkg/bagbunker
def generate_relation_model(col):
    assert col.relation
    name = col.name
    bases = (db.Model,)
    class_dict = {
        '__bind_key__': 'cache',
        '__tablename__': col.name,
        'id': db.Column(db.Integer, primary_key=True),
        'listing_entry': db.relationship(
            ListingEntry, uselist=False,
            backref=db.backref(col.name,
                               cascade='save-update, delete, delete-orphan, merge')),
        'listing_entry_id': db.Column(db.Integer, db.ForeignKey('listing_entry.id')),
        'value': db.Column(col.type),
    }
    Relation = model_metaclass(name, bases, class_dict)
    return Relation
コード例 #4
0
ファイル: decorators.py プロジェクト: bosch-ros-pkg/bagbunker
 def decorator(cls):
     name = cls.__name__
     tablename = re.sub('([A-Z])', lambda x: '_{}'.format(x.group(1).lower()),
                        name)[1:]
     bases = (db.Model,)
     class_dict = {
         '__doc__': cls.__doc__,
         '__module__': cls.__module__,
         '__tablename__': tablename,
         'id': db.Column(
             db.Integer, db.ForeignKey('fileset.id'),
             primary_key=True
         ),
         'fileset': db.relationship(
             'Fileset', uselist=False,
             backref=db.backref(tablename, uselist=False)
         ),
     }
     class_dict.update((k, v) for k, v in cls.__dict__.items()
                       if k[0] != '_')
     Model = model_metaclass(name, bases, class_dict)
     MODELS.append(Model)
     return Model