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')
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')
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
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')
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()
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
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])
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()
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']