From 7ea5711bccbe143f0cc88cf81b6a8a59a535885b Mon Sep 17 00:00:00 2001 From: Emily Frost Date: Sun, 24 May 2020 18:17:02 -0500 Subject: [PATCH] Renamed Image to Release, removed a redundant function, and updated documentation. --- lark | 22 +++++++++++----------- metadata.md | 4 ++-- metadata.py | 22 +++------------------- readme.md | 6 +++--- 4 files changed, 19 insertions(+), 35 deletions(-) diff --git a/lark b/lark index 00f1f82..974c3e8 100755 --- a/lark +++ b/lark @@ -13,8 +13,8 @@ Intended features: UI notes # Key terms - - hash Unique identifier for each ROM image. - - image ROM image, ripped from physical media. + - 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. @@ -163,18 +163,18 @@ elif action_object == 'release-group': print('Removing %s.' % release_group.name) session.delete(release_group) -elif action_object == 'image': +elif action_object == 'release': if action == 'add': properties = _kwargs_parse(sys.argv[3:]) - image = metadata.Image(filename=properties['filename'], + release = metadata.Release(filename=properties['filename'], sha1sum=properties['sha1sum']) with metadata.get_db_session() as session: if properties['release-group']: release_group = metadata.search(session, metadata.ReleaseGroup, name=properties['release-group'])[0] - image.release_group = release_group - session.add(image) + release.release_group = release_group + session.add(release) if action == 'list': # TODO: Filter support is exclusively limited to SQLAlchemy's filter.ilike function. Figure @@ -182,16 +182,16 @@ elif action_object == 'image': print('Listing release groups.') filters = _kwargs_parse(sys.argv[3:]) with metadata.get_db_session() as session: - print(metadata.search(session, metadata.Image, **filters)) + print(metadata.search(session, metadata.Release, **filters)) elif action == 'remove': constraints = sys.argv[3:] filters = _kwargs_parse(sys.argv[3:]) with metadata.get_db_session() as session: - release_groups = metadata.search(session, metadata.Image, **filters) - for image in release_groups: - print('Removing %s.' % image.name) - session.delete(image) + release_groups = metadata.search(session, metadata.Release, **filters) + for release in release_groups: + print('Removing %s.' % release.name) + session.delete(release) else: print('Unknown object.') diff --git a/metadata.md b/metadata.md index f76e297..d598c54 100644 --- a/metadata.md +++ b/metadata.md @@ -1,6 +1,6 @@ # Metadata definitions -## Release image -- A single release of a game. For example: Star Fox 64 (U) v1.2 [!] +## Release +- A single release of a game. For example: Star Fox 64 (U) v1.2 * UUID * sha1sum diff --git a/metadata.py b/metadata.py index 52e514d..4328e9f 100644 --- a/metadata.py +++ b/metadata.py @@ -4,7 +4,6 @@ metadata.py Everything needed to interact with the metadata database; namely SQL ORM objects, a context generator for the actual database, and a handful of convenience functions. ''' -# TODO: Rename file to metadata.py import contextlib import collections import hashlib @@ -28,8 +27,7 @@ def _uuidgen(): _SQLBase = sqlalchemy.ext.declarative.declarative_base() -# TODO: Rename Image concept to "Release". -class Image(_SQLBase): +class Release(_SQLBase): '''SQLAlchemy ORM class for ROM image metadata.''' # TODO: Split filenames into more meaningful metadata. __tablename__ = 'images' @@ -41,7 +39,7 @@ class Image(_SQLBase): release_group_id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey('release_groups.id')) - release_group = sqlalchemy.orm.relationship('ReleaseGroup', back_populates='images') + 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' % ( @@ -57,7 +55,7 @@ class ReleaseGroup(_SQLBase): platform_id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey('platforms.id')) platform = sqlalchemy.orm.relationship('Platform', back_populates='release_groups') - images = sqlalchemy.orm.relationship('Image', back_populates='release_group') + images = sqlalchemy.orm.relationship('Release', back_populates='release_group') def __repr__(self): return 'Release Group: id: %s, uuid: %s, name: %s, platform:%s' % (self.id, self.uuid, @@ -80,19 +78,6 @@ class Platform(_SQLBase): return 'Platform: id: %s, uuid: %s, fullname: %s, shortcode: %s' % (self.id, self.uuid, self.fullname, self.shortcode) - -# TODO: This should go in the eventual romdb class. -def get_file_sha1sum(filename): - sha1sum = hashlib.sha1() - with open(filename, 'rb') as file_contents: - while True: - chunk = file_contents.read(HASH_CHUNK_SIZE) - if not chunk: - break - sha1sum.update(chunk) - - return sha1sum.hexdigest() - def configure(db_path): ''' Configure and initialize the database for the entire module. @@ -106,7 +91,6 @@ def configure(db_path): _db_session_maker.configure(bind=_engine) # TODO: Passing the session object is a little clunky. Maybe there's a way to infer it somehow? -# Maybe setting a _session class variable? def search(session, table_object, **constraints): ''' Search the database for entries matching the given constraints. diff --git a/readme.md b/readme.md index fb58781..e8329bf 100644 --- a/readme.md +++ b/readme.md @@ -1,14 +1,14 @@ # Lark -Lark is a ROM organizer that uses known hash lists to validate and sort ROM files into a library +Lark is a ROM organizer that uses known hashes to validate and sort ROM files into a library directory structure. ## Current features -* Nothing really works yet. +* Basic database editing works. ## Planned features * Validate ROM images. -* Download DAT files +* Import DAT files * Rename/move ROM files * Maintain a database of present ROMs * A nice, Beets-like interface