Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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
            )