def push(*, session, path, force=False, component_names=all_component_names()): """ Pushes files to the Aquarium instance Arguments: session (Session Object): Aquarium session object path (String): Directory where files are to be found force (Boolean): If set, overrides conflict checks for Field Types component_names (List): Files to include as part of OT """ if not is_operation_type(path): logging.warning('No Operation Type at %s', path) return definitions = definition.read(path) user_id = session.User.where({'login': session.login}) query = { 'category': definitions['category'], 'name': definitions['name'] } parent_object = session.OperationType.where(query) # TODO: Shouldn't finish create if there are FT conflicts if not parent_object: create(session=session, path=path, category=definitions['category'], name=definitions['name'], default_text=False) parent_object = session.OperationType.where(query) if definitions['inputs'] or definitions['outputs']: if not field_type.types_valid( definitions=definitions, operation_type=parent_object[0], force=force, session=session): return field_type.build( definitions=definitions, operation_type=parent_object[0], path=path, session=session) # TODO: Split out code creation to a seperate function for name in component_names: read_file = code_component.read(path=path, name=name) if read_file is None: return new_code = session.Code.new( name=name, parent_id=parent_object[0].id, parent_class=definitions['parent_class'], user_id=user_id, content=read_file ) logging.info('pushing file %s', parent_object[0].name) session.utils.update_code(new_code)
def is_operation_type(path): """Checks whether definition file exists and is for an Operation Type """ try: def_dict = definition.read(path) except NotADirectoryError: logging.warning('%s is not a directory', path) return False except FileNotFoundError: logging.warning('No definition file at %s', path) return False return definition.is_operation_type(def_dict)
def push(*, session, path): """ Pushes files to the Aquarium instance. Arguments: session (Session Object): Aquarium session object path (String): path to files to be pushed """ if not is_library(path): logging.warning('No Library at %s', path) return definitions = definition.read(path) user_id = session.User.where({"login": session.login}) query = { "category": definitions['category'], "name": definitions['name'] } parent_object = session.Library.where(query) component_names = ['source'] if not parent_object: logging.info('Library %s not found on this instance. Creating it now.', query['name']) create(session=session, path=path, category=definitions['category'], name=definitions['name']) parent_object = session.Library.where(query) # TODO: handle case where create failed for name in component_names: read_file = code_component.read(path=path, name=name) if read_file is None: logging.warning('Code Component File %s was not found', name) return new_code = session.Code.new( name=name, parent_id=parent_object[0].id, parent_class=definitions['parent_class'], user_id=user_id, content=read_file ) logging.info('writing file %s to instance', parent_object[0].name) session.utils.update_code(new_code)
def push(*, session, path): """ Pushes all files in directory to instance. If the path isn't a directory, returns. Arguments: session (Session): Aquarium session object path (String): path to directory """ if not os.path.isdir(path): logging.warning('Path %s is not a directory. Cannot push', path) return if is_category(path): category.push(session=session, path=path) return if definition.has_definition(path): def_dict = definition.read(path) if definition.is_operation_type(def_dict): operation_type.push(session=session, path=path) elif definition.is_library(def_dict): library.push(session=session, path=path) return categories = os.listdir(path) dir_entries = [entry for entry in categories if os.path.isdir(os.path.join(path, entry))] if not dir_entries: logging.warning('Nothing to push in path %s', path) return for entry in dir_entries: # TODO: account for errors coming back from category entry_path = os.path.join(path, entry) category.push(session=session, path=entry_path)
def run_tests(*, session, path, timeout: int = None): """ Runs tests on all operation types in directory Arguments: session (Session): Aquarium session object path (String): path to directory """ if not os.path.isdir(path): logging.warning( 'Path %s is not a directory. Cannot run tests', path) return # TODO: change get operation type to work without a category? if definition.has_definition(path): def_dict = definition.read(path) if definition.is_operation_type(def_dict): operation_type.run_test( session=session, path=path, category=def_dict['category'], name=def_dict['name'], timeout=timeout ) elif definition.is_library(def_dict): library.run_test( session=session, path=path, category=def_dict['category'], name=def_dict['name'], timeout=timeout ) return if is_category(path): name = os.path.basename(path) category.run_tests( session=session, path=path, name=name, timeout=timeout ) return entries = os.listdir(path) dir_entries = [entry for entry in entries if os.path.isdir( os.path.join(path, entry))] if not dir_entries: logging.warning('Nothing to test in path %s', path) return for entry in dir_entries: entry_path = os.path.join(path, entry) if is_category(entry_path): category.run_tests( session=session, path=entry_path, name=entry, timeout=timeout )