diff --git a/lark b/lark index 974c3e8..4b05ce7 100755 --- a/lark +++ b/lark @@ -1,35 +1,8 @@ #!/usr/bin/python3 """ 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] - 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. +Verify and sort game ROM images. """ # TODO: Write decent UI import hashlib @@ -166,8 +139,7 @@ elif action_object == 'release-group': elif action_object == 'release': if action == 'add': properties = _kwargs_parse(sys.argv[3:]) - release = metadata.Release(filename=properties['filename'], - sha1sum=properties['sha1sum']) + release = metadata.Release(**properties) with metadata.get_db_session() as session: if properties['release-group']: @@ -179,7 +151,7 @@ elif action_object == 'release': if action == 'list': # TODO: Filter support is exclusively limited to SQLAlchemy's filter.ilike function. Figure # out a good way to include other filters. - print('Listing release groups.') + print('Listing releases.') filters = _kwargs_parse(sys.argv[3:]) with metadata.get_db_session() as session: print(metadata.search(session, metadata.Release, **filters)) diff --git a/metadata.md b/metadata.md index d598c54..8f2c714 100644 --- a/metadata.md +++ b/metadata.md @@ -4,10 +4,12 @@ * UUID * sha1sum - * filename + * format (For now this is just the file extension) + * region + * version + * disambiguation * release group - ## Release group - A container for all versions of a release. For example, the Star Fox 64 release group would contain: diff --git a/metadata.py b/metadata.py index 4328e9f..3ff9efe 100644 --- a/metadata.py +++ b/metadata.py @@ -35,15 +35,20 @@ class Release(_SQLBase): primary_key=True) uuid = sqlalchemy.Column(sqlalchemy.String, nullable=False, default=_uuidgen) 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, sqlalchemy.ForeignKey('release_groups.id')) release_group = sqlalchemy.orm.relationship('ReleaseGroup', back_populates='releases') def __repr__(self): - return 'ROM Image: id: %s, uuid: %s, sha1sum: %s, filename: %s, release-group: %s' % ( - self.id, self.uuid, self.sha1sum, self.filename, self.release_group.name) + 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)) class ReleaseGroup(_SQLBase): '''SQLAlchemy ORM class for release group metadata.'''