Updated Release model to use metadata instead of filenames.

dev
Emily Frost 6 years ago
parent 7ea5711bcc
commit 7956707763
No known key found for this signature in database
GPG Key ID: FD1FA524668FB1FA

34
lark

@ -1,35 +1,8 @@
#!/usr/bin/python3 #!/usr/bin/python3
""" """
lark lark
Verify and sort game ROM images.
Intended features:
DAT downloading
File validation
File renaming/moving
Nice Beets-inspired UI.
Release grouping (maybe, this might require another large external database)
UI notes
# Key terms
- hash Unique identifier for each ROM release.
- release ROM release, ripped from physical media.
- dat List of hashes, with associated filenames.
- platform The original hardware on which the image was intended to run.
# Verbs
- list [hash, dat, platform, image]
List items in the database.
- import [datfile, imagefile] Verify and sort game ROM images.
Process and add external items to the database.
- add [platform, hash]
Manually add items to the database.
- remove [hash, dat, platform]
Delete items from the database.
""" """
# TODO: Write decent UI # TODO: Write decent UI
import hashlib import hashlib
@ -166,8 +139,7 @@ elif action_object == 'release-group':
elif action_object == 'release': elif action_object == 'release':
if action == 'add': if action == 'add':
properties = _kwargs_parse(sys.argv[3:]) properties = _kwargs_parse(sys.argv[3:])
release = metadata.Release(filename=properties['filename'], release = metadata.Release(**properties)
sha1sum=properties['sha1sum'])
with metadata.get_db_session() as session: with metadata.get_db_session() as session:
if properties['release-group']: if properties['release-group']:
@ -179,7 +151,7 @@ elif action_object == 'release':
if action == 'list': if action == 'list':
# TODO: Filter support is exclusively limited to SQLAlchemy's filter.ilike function. Figure # TODO: Filter support is exclusively limited to SQLAlchemy's filter.ilike function. Figure
# out a good way to include other filters. # out a good way to include other filters.
print('Listing release groups.') print('Listing releases.')
filters = _kwargs_parse(sys.argv[3:]) filters = _kwargs_parse(sys.argv[3:])
with metadata.get_db_session() as session: with metadata.get_db_session() as session:
print(metadata.search(session, metadata.Release, **filters)) print(metadata.search(session, metadata.Release, **filters))

@ -4,10 +4,12 @@
* UUID * UUID
* sha1sum * sha1sum
* filename * format (For now this is just the file extension)
* region
* version
* disambiguation
* release group * release group
## Release group ## Release group
- A container for all versions of a release. - A container for all versions of a release.
For example, the Star Fox 64 release group would contain: For example, the Star Fox 64 release group would contain:

@ -35,15 +35,20 @@ class Release(_SQLBase):
primary_key=True) primary_key=True)
uuid = sqlalchemy.Column(sqlalchemy.String, nullable=False, default=_uuidgen) uuid = sqlalchemy.Column(sqlalchemy.String, nullable=False, default=_uuidgen)
sha1sum = sqlalchemy.Column(sqlalchemy.String, unique=True, nullable=False) sha1sum = sqlalchemy.Column(sqlalchemy.String, unique=True, nullable=False)
filename = 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, release_group_id = sqlalchemy.Column(sqlalchemy.Integer,
sqlalchemy.ForeignKey('release_groups.id')) sqlalchemy.ForeignKey('release_groups.id'))
release_group = sqlalchemy.orm.relationship('ReleaseGroup', back_populates='releases') release_group = sqlalchemy.orm.relationship('ReleaseGroup', back_populates='releases')
def __repr__(self): def __repr__(self):
return 'ROM Image: id: %s, uuid: %s, sha1sum: %s, filename: %s, release-group: %s' % ( return ('ROM Image: id: %s, uuid: %s, sha1sum: %s, release-group: %s, region: %s, '
self.id, self.uuid, self.sha1sum, self.filename, self.release_group.name) 'version: %s, disambiguation: %s' % (
self.id, self.uuid, self.sha1sum, self.release_group.name, self.region,
self.version, self.disambiguation))
class ReleaseGroup(_SQLBase): class ReleaseGroup(_SQLBase):
'''SQLAlchemy ORM class for release group metadata.''' '''SQLAlchemy ORM class for release group metadata.'''

Loading…
Cancel
Save