|
|
|
|
@ -16,9 +16,7 @@ HASH_CHUNK_SIZE = 10485760 # 10mb
|
|
|
|
|
_db_session_maker = sqlalchemy.orm.sessionmaker()
|
|
|
|
|
_engine = None
|
|
|
|
|
_configured = False
|
|
|
|
|
|
|
|
|
|
# TODO: Support DAT credit, DAT filenames, and checking DAT completeness.
|
|
|
|
|
#DatData = collections.namedtuple('DatData', 'UUID, name, website, version, image_list')
|
|
|
|
|
_SQLBase = sqlalchemy.ext.declarative.declarative_base()
|
|
|
|
|
|
|
|
|
|
class MetadataDBSessionException(Exception):
|
|
|
|
|
'''This exception is raised when something goes wrong with a database session.'''
|
|
|
|
|
@ -27,29 +25,22 @@ class MetadataDBSessionException(Exception):
|
|
|
|
|
def _uuidgen():
|
|
|
|
|
return str(uuid.uuid4())
|
|
|
|
|
|
|
|
|
|
_SQLBase = sqlalchemy.ext.declarative.declarative_base()
|
|
|
|
|
|
|
|
|
|
class Release(_SQLBase):
|
|
|
|
|
'''SQLAlchemy ORM class for ROM image metadata.'''
|
|
|
|
|
__tablename__ = 'images'
|
|
|
|
|
id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.Sequence('image_id_sequence'),
|
|
|
|
|
class Platform(_SQLBase):
|
|
|
|
|
'''SQLAlchemy ORM class for platform metadata.'''
|
|
|
|
|
__tablename__ = 'platforms'
|
|
|
|
|
id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.Sequence('platform_id_sequence'),
|
|
|
|
|
primary_key=True)
|
|
|
|
|
uuid = sqlalchemy.Column(sqlalchemy.String, nullable=False, default=_uuidgen)
|
|
|
|
|
sha1sum = sqlalchemy.Column(sqlalchemy.String, unique=True, nullable=False)
|
|
|
|
|
format = sqlalchemy.Column(sqlalchemy.String, nullable=False)
|
|
|
|
|
region = sqlalchemy.Column(sqlalchemy.String)
|
|
|
|
|
version = sqlalchemy.Column(sqlalchemy.String, nullable=False)
|
|
|
|
|
disambiguation = sqlalchemy.Column(sqlalchemy.String)
|
|
|
|
|
release_group_id = sqlalchemy.Column(sqlalchemy.Integer,
|
|
|
|
|
sqlalchemy.ForeignKey('release_groups.id'))
|
|
|
|
|
fullname = sqlalchemy.Column(sqlalchemy.String, nullable=False)
|
|
|
|
|
shortcode = sqlalchemy.Column(sqlalchemy.String, unique=True, nullable=False)
|
|
|
|
|
|
|
|
|
|
release_group = sqlalchemy.orm.relationship('ReleaseGroup', back_populates='releases')
|
|
|
|
|
release_groups = sqlalchemy.orm.relationship('ReleaseGroup', order_by=ReleaseGroup.id,
|
|
|
|
|
back_populates='platform')
|
|
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
|
return ('ROM Image: id: %s, uuid: %s, sha1sum: %s, release-group: %s, region: %s, '
|
|
|
|
|
'version: %s, disambiguation: %s' % (
|
|
|
|
|
self.id, self.uuid, self.sha1sum, self.release_group.name, self.region,
|
|
|
|
|
self.version, self.disambiguation))
|
|
|
|
|
return 'Platform: id: %s, uuid: %s, fullname: %s, shortcode: %s' % (self.id, self.uuid,
|
|
|
|
|
self.fullname, self.shortcode)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ReleaseGroup(_SQLBase):
|
|
|
|
|
'''SQLAlchemy ORM class for release group metadata.'''
|
|
|
|
|
@ -68,21 +59,28 @@ class ReleaseGroup(_SQLBase):
|
|
|
|
|
self.name, self.platform.fullname)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Platform(_SQLBase):
|
|
|
|
|
'''SQLAlchemy ORM class for platform metadata.'''
|
|
|
|
|
__tablename__ = 'platforms'
|
|
|
|
|
id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.Sequence('platform_id_sequence'),
|
|
|
|
|
class Release(_SQLBase):
|
|
|
|
|
'''SQLAlchemy ORM class for ROM image metadata.'''
|
|
|
|
|
__tablename__ = 'images'
|
|
|
|
|
id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.Sequence('image_id_sequence'),
|
|
|
|
|
primary_key=True)
|
|
|
|
|
uuid = sqlalchemy.Column(sqlalchemy.String, nullable=False, default=_uuidgen)
|
|
|
|
|
fullname = sqlalchemy.Column(sqlalchemy.String, nullable=False)
|
|
|
|
|
shortcode = sqlalchemy.Column(sqlalchemy.String, unique=True, nullable=False)
|
|
|
|
|
sha1sum = sqlalchemy.Column(sqlalchemy.String, unique=True, nullable=False)
|
|
|
|
|
format = sqlalchemy.Column(sqlalchemy.String, nullable=False)
|
|
|
|
|
region = sqlalchemy.Column(sqlalchemy.String)
|
|
|
|
|
version = sqlalchemy.Column(sqlalchemy.String, nullable=False)
|
|
|
|
|
disambiguation = sqlalchemy.Column(sqlalchemy.String)
|
|
|
|
|
release_group_id = sqlalchemy.Column(sqlalchemy.Integer,
|
|
|
|
|
sqlalchemy.ForeignKey('release_groups.id'))
|
|
|
|
|
|
|
|
|
|
release_groups = sqlalchemy.orm.relationship('ReleaseGroup', order_by=ReleaseGroup.id,
|
|
|
|
|
back_populates='platform')
|
|
|
|
|
release_group = sqlalchemy.orm.relationship('ReleaseGroup', back_populates='releases')
|
|
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
|
return 'Platform: id: %s, uuid: %s, fullname: %s, shortcode: %s' % (self.id, self.uuid,
|
|
|
|
|
self.fullname, self.shortcode)
|
|
|
|
|
return ('ROM Image: id: %s, uuid: %s, sha1sum: %s, release-group: %s, region: %s, '
|
|
|
|
|
'version: %s, disambiguation: %s' % (
|
|
|
|
|
self.id, self.uuid, self.sha1sum, self.release_group.name, self.region,
|
|
|
|
|
self.version, self.disambiguation))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def configure(db_path):
|
|
|
|
|
'''
|
|
|
|
|
|