import functools import git import logging from os import path import vj4 from vj4.util import argmethod _logger = logging.getLogger(__name__) @functools.lru_cache() @argmethod.wrap def get(): try: return git.Repo(path.dirname(path.dirname(vj4.__file__))).git.describe(always=True, tags=True, dirty=True) except (git.InvalidGitRepositoryError, git.GitCommandError) as e: _logger.error('Failed to get repository: %s', repr(e)) return 'unknown' if __name__ == '__main__': argmethod.invoke_by_args()
@argmethod.wrap async def link_by_md5(file_md5: str): """Link a file by MD5 if exists.""" coll = db.Collection('fs.files') doc = await coll.find_and_modify(query={'md5': file_md5}, update={'$inc': { 'metadata.link': 1 }}) if doc: return doc['_id'] @argmethod.wrap async def unlink(file_id: objectid.ObjectId): """Unlink a file.""" coll = db.Collection('fs.files') doc = await coll.find_and_modify(query={'_id': file_id}, update={'$inc': { 'metadata.link': -1 }}, new=True) if not doc['metadata']['link']: fs = db.GridFS('fs') await fs.delete(file_id) if __name__ == '__main__': argmethod.invoke_by_args()