def main(args=sys.argv[1:]): """ main :) @param args: the args used for the parser, just useful for testing """ parser = argparse.ArgumentParser(description='Configuration tool') parser.add_argument('-d', '--database', type=str, metavar='"Connection String"', required=True) parser.add_argument('--debug', action='store_true') parser.add_argument('--source', type=str, metavar='URI', required=True) parser.add_argument('--dst', type=str, metavar='URI', required=True) parser.add_argument('--format', type=str, metavar='FORMAT', default='<SOURCE>::<TYPE>::<TARGET>') args = parser.parse_args(args) database = create_engine(args.database, echo=False) session_maker = sessionmaker(bind=database) session = session_maker() database_logging.DBSession = session_maker() if args.debug: logging.basicConfig(level=logging.DEBUG, handlers=(database_logging.SQLAlchemyHandler(), logging.StreamHandler())) logger.debug('Tool started with following arguments: %s' % args) else: logging.basicConfig(level=logging.INFO, handlers=(database_logging.SQLAlchemyHandler(), logging.StreamHandler())) try: source = Folder.by_uri(args.source, session) logger.info('Source: %s', source) dst = Folder.by_uri(args.dst, session) logger.info('Target: %s', dst) changes = ChangeSet(source=source, dst=dst, session=session) print('%sGB' % (changes.get_size() / 2 ** 30)) except Exception as e: logger.exception(e) return -1 finally: session.close_all() return 0
def _add_child(self, path: Path): """ Adds a Directory to the Database @param path: a pathlib Path object """ logger.info('Adding Item: [%r]' % path) session = database.get_session(new_engine=False) parent = Folder.by_uri('%s::%s' % (config.HOSTNAME, path.parent), session) if path.is_dir(): child = parent.add_folder(path.name) self._queue.put(path) elif path.is_file(): child = parent.add_file(name=path.name, mtime=datetime.fromtimestamp(path.stat().st_mtime), size=path.stat().st_size, fhash=None) else: session.close() raise RuntimeError('%s is neither File nor Folder' % path) session.add(child) session.commit() session.close()
def get_roles(configfile): """ @param configfile: The Path of the xml configfile @return a callable that creates the described role """ #TODO: Dummy Implementation roles = list() #roles.append(partial(hasher.run, 3, 120)) session = database.get_global_session() #host = Host.by_name('konsti-desktop', database.get_global_session()) #folder = host.add_root('/media/konsti/Storage/makeMKV', database.get_global_session()) #folder = host.add_root('/home/konsti/Code', database.get_global_session()) folder = Folder.by_uri('konsti-desktop::/home/konsti/Code', session) #session.add(host) #session.add(folder) #session.commit() roles.append(partial(scanner.run, folder, 300)) print(roles) return roles