/
nollieundergrob
/
PythonPackageStorage
Обзор
Документация
Войти
/
nollieundergrob
/
PythonPackageStorage
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
backend/src/utils/parse/general.py
84 строки
2 KB
nollieundergrob
GENERAL FIX BACKEND
15 авг 2025, 16:01
15 авг 2025, 16:01
a8b7dd5
Код
Авторство
О чём код?
import re import os from config.settings import settings from functools import lru_cache from config.settings import settings def uniq(lst): last = object() for item in lst: if item == last: continue yield item last = item def sort_and_deduplicate(array): return list(uniq(sorted(array, reverse=True))) def check_file_extension(file: str): extensions = [ ".zip", ".7z", ".rar", ".win", ".win32", ".tar.gz", 'alpha', 'beta' ] sub_result = (file.endswith(i) for i in extensions) return True in sub_result def check_category(category: str): res = category if category == 'nodejs': res = 'npm' return category @lru_cache(maxsize=128) def get_list_files(category: str, library: str, version: str): if category == 'nodejs': category = 'npm' print(category,library,version) dir = os.path.join(f'{settings.BASE_PATH}/storage', category, library, version) print(dir) try: if not os.listdir(dir): return False except: raise FileNotFoundError("Directory not found") if category == "pypi": file_sizes = [os.path.getsize(dir) for f in os.listdir(dir)] file_tuples = list(zip(os.listdir(dir), file_sizes)) sorted_files = sorted(file_tuples, key=lambda x: x[1]) sorted_files = [f[0] for f in sorted_files] archives = [f for f in sorted_files if f.endswith( '.tar.gz') or f.endswith('.zip')] non_archives = [f for f in sorted_files if not f.endswith( '.tar.gz') and not f.endswith('.zip')] sorted_files = non_archives + archives return 'pip install ' + ' '.join([f'http://10.14.37.165:{settings.port}/simple/dev/{category}/{library}/{version}/{i}' for i in sorted_files]) + ' --no-deps' elif category == "npm": return "npm install "+''.join([f'http://10.14.37.165:{settings.port}/simple/dev/{category}/{library}/{version}/{file} ' for file in os.listdir(dir)]) + ' --no-deps' else: return False def get_bytes_file(category: str, library: str, version: str, file: str): dir = os.path.join(category, library, version) if not os.listdir(dir): return False file = open(f'/{category}/{library}/{version}/{file}', 'rb') return file.read() def split_and_convert(s): return [int(x) if x.isdigit() else x for x in re.split("(\d+)", s)] if __name__ == "__main__": get_list_files('pypi', 'django', '5.2b1')