コード例 #1
0
def store_package_rows(package_name, user, filepath, tag):
    """ 
    The complete storing of an entire package
    """

    # this is used to detect if the package already existed before this
    # attempt.  aids in cleanup
    curr_package_id = lookup_package_id(package_name=package_name)

    package_id = curr_package_id
    if None == package_id:
        package_id = store_package_name(package_name=package_name, user=user)

    curr_filestore_id = lookup_filestore_id_by_path(filepath=filepath)
    filestore_id = curr_filestore_id
    if None == filestore_id:
        try:
            filestore_id = store_filestore(filepath=filepath)
        except Exception as err:
            current_app.logger.error("Exception in store_filestore")

            cleanup_add(package_id=package_id if
                        (curr_package_id == None) else None,
                        filestore_id=None)
            raise UnhandledError()

    tag_id = lookup_tag_id(package_id=package_id, tag=tag)
    if None != tag_id:
        # this means the tag already exists for adding this package
        cleanup_add(package_id=package_id if
                    (curr_package_id == None) else None,
                    filestore_id=filestore_id if
                    (curr_filestore_id == None) else None)
        raise IntegrityError(message='tag is already in use for package')

    # store the tag in the database
    try:
        tag_id = store_tag(package_id=package_id,
                           filestore_id=filestore_id,
                           tag=tag)
    except IntegrityError as err:
        cleanup_add(package_id=package_id if
                    (curr_package_id == None) else None,
                    filestore_id=filestore_id if
                    (curr_filestore_id == None) else None)
        raise err
    except Exception as err:
        current_app.logger.error("Exception in store_tag")
        cleanup_add(package_id=package_id if
                    (curr_package_id == None) else None,
                    filestore_id=filestore_id if
                    (curr_filestore_id == None) else None)
        raise UnhandledError()
    return {'package_id': package_id, 'tag_id': tag_id}
コード例 #2
0
def store_filestore(filepath):
    """
    stores a new filestore in the database, should only be used after checking lookup_filestore_id_by_path
    """
    try:
        add_filestore_id = insert_db(table='filestore',
                                     fields=['package_filepath'],
                                     values=[filepath])
        return add_filestore_id
    except sqlite3.IntegrityError as err:
        current_app.logger.error(
            "Package location is not unique : {f}".format(f=filepath))
        raise UnhandledError()
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in store_filestore filepath={f} : {e}".format(
                f=filepath, e=err))
        raise UnhandledError()
コード例 #3
0
def lookup_filepath_from_id(filestore_id):
    """
    returns the filepath for a specified filestore_id
    """

    try:
        search_query = "SELECT package_filepath FROM filestore WHERE id = ?"
        filepath = query_db(query=search_query, args=[filestore_id], one=True)
        return filepath['package_filepath'] if filepath is not None else None
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in lookup_filepath: filestore_id {fi} : {e}".
            format(fi=filestore_id, e=err))
        raise UnhandledError()
コード例 #4
0
def lookup_tag_id(package_id, tag):
    """
    looks up the tag_id of a package and file location
    """
    try:
        search_query = "SELECT id FROM tags WHERE package_id = ? AND tag = ?"

        tag_id = query_db(query=search_query, args=[package_id, tag], one=True)
        return tag_id['id'] if tag_id is not None else None
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error lookup_tag_id package_id={pi} tag={t} : {e} {et}".
            format(pi=package_id, t=tag, e=err, et=type(err)))
        raise UnhandledError()
コード例 #5
0
def delete_filestore(filestore_id):
    """
    deletes a filestore from the database, used for cleanup from errors
    """
    try:
        delete_query = "DELETE FROM filestore WHERE id = ?"

        query_db(query=delete_query, args=[filestore_id])
        return True
    except Exception as err:
        current_app.logger.error(
            "could not delete filestore id {fi} from filestore : {e}".format(
                fi=filestore_id, e=err))
        raise UnhandledError()
コード例 #6
0
def lookup_filestore_id_by_path(filepath):
    """
    looks up a current filestore_id from a package location
    """
    try:
        search_query = "SELECT id FROM filestore WHERE package_filepath = ?"

        filestore_id = query_db(query=search_query, args=[filepath], one=True)
        return filestore_id['id'] if filestore_id is not None else None
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in lookup_filestore_id_by_path filestore={f} : {e}"
            .format(f=filepath, e=err))
        raise UnhandledError()
コード例 #7
0
def delete_package(package_id):
    """
    removes a package from the database package table, used for cleanup from errors
    """
    try:
        delete_query = "DELETE FROM packages WHERE id = ?"

        query_db(query=delete_query, args=[package_id])
        return True
    except Exception as err:
        current_app.logger.error(
            "could not delete package {pd} from table : {e}".format(
                pd=package_id, e=err))
        raise UnhandledError()
コード例 #8
0
def lookup_user_id(username):
    """
    looks up a user id by their username
    """

    try:
        search_query = "SELECT id FROM users WHERE username = ?"
        user_id = query_db(query=search_query, args=[username], one=True)
        return user_id['id'] if user_id != None else None
    except Exception as err:
        current_app.logger.error(
            "Unable to lookup_user_id username={u} : {e}".format(u=username,
                                                                 e=err))
        raise UnhandledError()
コード例 #9
0
def search_all_packages():
    """
    returns a list of all packages currently being stored
    """
    try:
        all_packages_query = "SELECT title, id FROM packages"
        packages = query_db(query=all_packages_query)
        if None == packages:
            packages = []
        return packages
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in search_all_packages : {e}".format(e=err))
        raise UnhandledError()
コード例 #10
0
def add_user(username, password, key):
    """
    adds a user to the database
    """
    try:
        add_query = insert_db(table='users',
                              fields=['username', 'password', 'apikey'],
                              values=[username, password, key])
    except sqlite3.IntegrityError as err:
        raise IntegrityError(message='username is already in use')
    except Exception as err:
        current_app.logger.error(
            "Unable to add user {u}, password {p}, apikey {k} because {e}({et})"
            .format(u=username, p=password, k=key, e=err, et=type(err)))
        raise UnhandledError()
コード例 #11
0
def search_all_tags_by_id(package_id):
    """
    returns a list of all tags for a specific package
    """
    try:
        all_tags_query = "SELECT tag, id FROM tags WHERE package_id = ?"
        tags = query_db(query=all_tags_query, args=[package_id])
        if None == tags:
            tags = []
        return tags
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in search_all_tags_by_id: package_id {pi} : {e}".
            format(pi=package_id, e=err))
        raise UnhandledError()
コード例 #12
0
def lookup_filestore_id_from_tag(package_id, tag):
    """
    makes the database search for the filestore_id of a file referenced by package_id and tag
    """
    try:
        search_query = "SELECT filestore_id FROM tags WHERE package_id = ? AND tag = ?"
        filestore_id = query_db(query=search_query,
                                args=[package_id, tag],
                                one=True)
        return filestore_id[
            'filestore_id'] if filestore_id is not None else None
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in lookup_filestore_id_from_tag: package_id {pi}, tag {t} : {e}"
            .format(pi=package_id, t=tag, e=err))
        raise UnhandledError()
コード例 #13
0
def search_tags_by_id_and_term(package_id, tag_search_term):
    """
    Allows users to search for specific text within a packages' tag
    """
    try:
        search_query = "SELECT tag, id FROM tags WHERE package_id = ? AND tag LIKE ?"
        search_term = "%{tst}%".format(tst=tag_search_term)
        tags = query_db(query=search_query, args=[package_id, search_term])
        if None == tags:
            tags = []
        return tags
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in search_tags_by_id_and_term: package_id {pi}, tag_search_term {tst} : {e}"
            .format(pi=package_id, tst=tag_search_term, e=err))
        raise UnhandledError()
コード例 #14
0
def search_packages(search_term):
    """
    Allows users to search for specific text within a package name
    """
    try:
        search_query = "SELECT title, id FROM packages WHERE title LIKE ?"
        search_term = "%{st}%".format(st=search_term)
        packages = query_db(query=search_query, args=[search_term])
        if None == packages:
            packages = []
        return packages
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in search_packages {st} : {e}".format(
                st=search_term, e=err))
        raise UnhandledError()
コード例 #15
0
def store_package_name(package_name, user):
    """
    stores a new package in the database, should only be used after checking lookup_package_id
    """
    try:
        add_package_id = insert_db(table='packages',
                                   fields=['title', 'user_id'],
                                   values=[package_name, user])
        return add_package_id
    except sqlite3.IntegrityError as err:
        raise IntegrityError(message='package name already in use')
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in store_package_name package_name={pn} user={u} : {e}"
            .format(pn=package_name, u=user, e=err))
        raise UnhandledError()
コード例 #16
0
def lookup_package_id(package_name):
    """
    looks up the package id for the given package name, if exists
    """
    try:
        search_query = "SELECT id FROM packages WHERE title = ?"

        package_id = query_db(query=search_query,
                              args=[package_name],
                              one=True)

        return package_id['id'] if package_id is not None else None
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in lookup_package_id {pn} : {e}".format(
                pn=package_name, e=err))

        raise UnhandledError()
コード例 #17
0
def lookup_password(user):
    """
    Lookup a users password.  This is not a good way of doing this.  The 
    database is not salted or hashed.  But this is a quick way of doing this.
    """

    try:
        password_query = "SELECT password FROM users WHERE username = ?"
        password = query_db(query=password_query, args=[user])
        if None == password:
            raise NotFoundError(message='username not found')
        return password[0]['password']
    except NotFoundError as err:
        raise err
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error lookup up user {u} : {e}".format(u=user, e=err))
        raise UnhandledError()
コード例 #18
0
def store_tag(package_id, filestore_id, tag):
    """
    This is used to store a new tag in the tag table
    """
    try:
        add_tag_id = insert_db(table='tags',
                               fields=['tag', 'package_id', 'filestore_id'],
                               values=[tag, package_id, filestore_id])
        return add_tag_id
    except sqlite3.IntegrityError as err:
        current_app.logger.error(
            "Tag and package_id are not unique. package_id={pi} filestore_id={fi} tag={t}: {e}"
            .format(pi=package_id, fi=filestore_id, t=tag, e=err))
        raise IntegrityError(message='Tag is not unique to package')
    except Exception as err:
        current_app.logger.error(
            "Unhandled Error in store_tag_id package_id={pi} filestore_id={fi} tag={t} : {e}"
            .format(pi=package_id, fi=filestore_id, t=tag, e=err))
        raise UnhandledError()