/
sdsamyo
/
QR-code-generator
Обзор
Документация
Войти
/
sdsamyo
/
QR-code-generator
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
utils.py
113 строк
5 KB
sdsamyo
fix(qr): устранение ошибки валидации и поддержка RGB цветов
29 июн 2026, 06:05
Верифицирован
29 июн 2026, 06:05
f83da2b
Код
Авторство
О чём код?
import os from re import compile from datetime import datetime import logging as log import qrcode # Настройка логирования log.basicConfig(level=log.INFO, filename='log.log', filemode='a', format='%(asctime)s %(levelname)s %(message)s', encoding='utf-8') def check_data(text_input:str) -> bool: """Проверка введённых данных""" print('\n') text = text_input is_text:bool = False is_url:bool = False if not text.strip(): print("Ошибка: Ввод не может быть пустым.") log.error('Ошибка: Ввод не может быть пустым.') else: print("Ввод успешно получен:", text) log.info(f'Ввод успешно получен: {text}') # Проверка на допустимые символы (только буквы, цифры, пробелы и основные знаки препинания) allowed_chars_pattern = compile(r"^[a-zA-Zа-яА-Я0-9\s.,!?'\"()-]*$") if allowed_chars_pattern.match(text): print("Ввод содержит только допустимые символы.") log.info('Ввод содержит только допустимые символы.') is_text = True else: print("Ошибка: Ввод содержит недопустимые символы.") log.error('Ошибка: Ввод содержит недопустимые символы.') # Проверка на формат ссылки (простая проверка URL) # Этот шаблон является базовым и может быть улучшен для более строгой валидации URL. url_pattern = compile(r"https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)") if url_pattern.match(text): print("Ввод соответствует формату ссылки.") log.info('Ввод соответствует формату ссылки.') is_url = True else: print("Ввод не соответствует формату ссылки.") log.info('Ввод не соответствует формату ссылки.') return is_text or is_url def check_filename(file_name:str) -> str: """ Проверка названия файла, если пользователь ввёл название, то возвращается название пользователя, если поле осталось пустым, то название генерируется автоматически """ if file_name.strip(): return file_name else: date = datetime.now().strftime("%Y_%m_%d-%H_%M") return f'qr-{date}' def check_and_create_folders(folder_paths): for folder_path in folder_paths: if not os.path.exists(folder_path): os.makedirs(folder_path) print(f'Папка "{folder_path}" успешно создана.') log.info(f'Папка "{folder_path}" успешно создана.') else: print(f'Папка "{folder_path}" уже существует.') log.info(f'Папка "{folder_path}" уже существует.') def make_qrcode(data:str, file_name:str, version:int, error_correction_str:str, fill_color_str:str='black', back_color_str:str='white') -> None: """Генерация QR-кода и сохранение в файл""" if error_correction_str == 'L': error_correction = qrcode.ERROR_CORRECT_L elif error_correction_str == 'M': error_correction = qrcode.ERROR_CORRECT_M elif error_correction_str == 'Q': error_correction = qrcode.ERROR_CORRECT_Q elif error_correction_str == 'H': error_correction = qrcode.ERROR_CORRECT_H if ',' in fill_color_str: fill_color_str = tuple(map(int, fill_color_str.strip().replace('(', '').replace(')', '').split(','))) if ',' in back_color_str: back_color_str = tuple(map(int, back_color_str.strip().replace('(', '').replace(')', '').split(','))) # Создаём объект QRCode с выбранными параметрами qr = qrcode.QRCode( version=version, error_correction=error_correction ) # Добавляем данные в объект qr.add_data(data) qr.make(fit=True) img = qr.make_image(fill_color=fill_color_str, back_color=back_color_str) img.save(f'./OUTPUT/{file_name}.png') print(f'QR-код с текстом "{data}" сгенерирован и сохранён в папку: {file_name}')