示例#1
0
def _create_db():
    """
    Функция создания БД
    :return:
    возвращает ошибку в случае неуспеха
    """
    db_create_loger = create_loger(_create_db.__name__)
    connection = _get_connection_to_db()
    with connection as c:
        cursor = c.cursor()
        with open('./db/create_table_query.sql') as q1:
            create_table_db: str = q1.read()
            cursor.execute(create_table_db)
            db_create_loger.debug('DataBase created')
示例#2
0
def _get_folders():
    """
    Получаем список альбомов из БД
    для создания архитектуры с папками локально
    :return:
    """
    loger = create_loger(_get_folders.__name__)
    with open('db/select_albums.sql') as q1:
        select_albums: str = q1.read()
        try:
            res = execute_query(select_albums)
            loger.info('Albums data exported successfully')
            return res
        except:
            loger.error('Error while executing SQL query')
示例#3
0
def _get_connection_to_db(
        db_name: str = 'getphotosapp.db') -> sqlite3.Connection:
    """
    - создает базу данных getphotosapp.db или присоединяется к ней, если она создана
    - возвращает объект sqlite3.Connection
    - особенность в том, что соединение происходит с учетом объявленных типов.
    - добавлена поддержка ненативного типа list с помощью конвертера и адаптера
    """
    loger = create_loger(_get_connection_to_db.__name__)

    with sqlite3.connect(db_name,
                         detect_types=sqlite3.PARSE_DECLTYPES) as connection:
        loger.debug('Created connection to db')
        sqlite3.register_adapter(list,
                                 lambda x: ','.join(map(lambda y: str(y), x)))
        return connection
示例#4
0
def add_photo_func(photos):
    """
    Функция апдейтит базу фотками
    :param photos:
    передайте переменную с текущим дампом фото
    :return:
    заполняет таблицу фото
    """
    loger = create_loger(add_photo_func.__name__)
    data: dict = _get_photo_size(photos)
    with open('db/insert_photos.sql') as q1:
        insert_photo: str = q1.read()
        try:
            execute_query(insert_photo, data)
            loger.info('Data was loaded successfully')
        except:
            loger.error('Error while executing SQL query')
示例#5
0
def _execute_for_select(query):
    """
    Функция для селекта, так как
    :param query:
    :return:
    """
    db_loger = create_loger(_execute_for_select.__name__)
    connection = _get_connection_to_db()
    with connection as c:
        cursor = c.cursor()
        try:
            cursor.execute(query)
        except sqlite3.Error as e:
            db_loger.error(e)
            c.rollback()
        else:
            return cursor.fetchall()
示例#6
0
def _get_photo_size(data: dict) -> dict:
    loger = create_loger(_get_photo_size.__name__)
    num_list: list = []
    for photo in data:
        for key in photo:
            if 'photo' in key:
                word_list: list = key.split('_')
                num_list = [
                    int(num)
                    for num in filter(lambda num: num.isnumeric(), word_list)
                ]
        bigest_photo_size = max(num_list)
        try:
            response = requests.get(photo['photo_' + str(bigest_photo_size)])
            photo['photo'] = response.content
        except:
            loger.error("Can't upload photo")
    final: dict = _add_none_values(data)
    return final
示例#7
0
def create_local_copy_photo():
    """
    фунция создания файлов локально, с фотографиями
    :return:
    файлы созданы как результат выполнения функции
    """
    loger = create_loger(create_local_copy_photo.__name__)
    _create_photo_folders()
    with open('db/select_photos.sql') as q1:
        select_photo: str = q1.read()
        try:
            res = execute_query(select_photo)
            loger.info('Photos data exported successfully')
        except:
            loger.error('Error while executing SQL query')
        for r in res:
            path: str = './photos/' + 'album' + str(r[0]) + '/photo' + str(
                r[1]) + '.jpeg'
            with open(path, 'wb') as file:
                file.write(r[2])
示例#8
0
def _execute_many(query: str, data: Optional):
    """
    Фнукция обогащения БД данными по принципу executemany
    :param query:
    запрос SQL
    :param data:
    данные для загрузки
    :return:
    """
    db_loger = create_loger(_execute_many.__name__)
    connection = _get_connection_to_db()
    with connection as c:
        cursor = c.cursor()
        try:
            cursor.executemany(query, data)
        except sqlite3.Error as e:
            db_loger.error(e)
            c.rollback()
        else:
            c.commit()
示例#9
0
def get_all_photo_func() -> dict:
    """
    Функция запроса всех фотографий с вашей страницы
    :key - ключ авторизации для вашего приложения, должен быть в окружении.
    :return:
    Возвращает rawdata от метода
    """
    error_log = create_loger(get_all_photo_func.__name__)
    error_log.debug('Starting to collect data from function')
    url: str = 'https://api.vk.com/method/photos.getAll?v=5.52&access_token=' + str(
        key)
    try:
        response = requests.get(url)
        response.raise_for_status()
    except HTTPError as http_err:
        error_log.error(f'Function failed because of this: {http_err}')
    except Exception as err:
        error_log.error(f'Function failed because of this: {err}')
    else:
        print('Success!')
        error_log.debug('Requested successfully')
    res: dict = response.json()
    return res['response']['items']