mirror of
https://github.com/Maks1mS/altlinux-autorepacked.git
synced 2024-12-23 22:52:59 +03:00
wip
This commit is contained in:
parent
233c11efec
commit
657c424bf1
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
.env
|
.env
|
||||||
|
venv
|
@ -2,9 +2,15 @@ FROM registry.altlinux.org/alt/python:p10
|
|||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
eepm \
|
eepm \
|
||||||
wget
|
wget \
|
||||||
|
apt-repo-tools \
|
||||||
|
alien \
|
||||||
|
pip
|
||||||
# && rm -rf /var/lib/apt/lists/*
|
# && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip --no-cache-dir install -r requirements.txt
|
||||||
|
|
||||||
COPY ./autorepacked ./autorepacked
|
COPY ./autorepacked ./autorepacked
|
||||||
|
|
||||||
ENV PYTHONPATH "${PYTHONPATH}:."
|
ENV PYTHONPATH "${PYTHONPATH}:."
|
||||||
|
@ -1,13 +1,19 @@
|
|||||||
|
import datetime
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import importlib
|
import importlib
|
||||||
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
|
from fastapi import BackgroundTasks, FastAPI
|
||||||
|
import uvicorn
|
||||||
|
from fastapi_utils.tasks import repeat_every
|
||||||
|
|
||||||
from autorepacked import utils
|
from autorepacked import utils
|
||||||
from autorepacked.base_provider import BaseProvider
|
from autorepacked.base_provider import BaseProvider
|
||||||
from autorepacked.config import Config
|
from autorepacked.config import Config
|
||||||
|
|
||||||
|
|
||||||
def create_repo(config):
|
def create_repo(config: Config):
|
||||||
utils.run([
|
utils.run([
|
||||||
'epm',
|
'epm',
|
||||||
'repo',
|
'repo',
|
||||||
@ -16,22 +22,38 @@ def create_repo(config):
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
def main():
|
@asynccontextmanager
|
||||||
config = Config()
|
async def lifespan(app: FastAPI):
|
||||||
|
await update_repeat()
|
||||||
|
yield
|
||||||
|
|
||||||
create_repo(config)
|
|
||||||
|
|
||||||
providers_path = os.path.join(os.getcwd(), 'autorepacked/providers')
|
app = FastAPI(lifespan=lifespan)
|
||||||
modules = os.listdir(providers_path)
|
config = Config()
|
||||||
|
|
||||||
|
update_task_started = False
|
||||||
|
|
||||||
|
|
||||||
|
def update():
|
||||||
json_file_path = os.path.join(config.get('repo_path'), 'data.json')
|
json_file_path = os.path.join(config.get('repo_path'), 'data.json')
|
||||||
if not os.path.exists(json_file_path):
|
if not os.path.exists(json_file_path):
|
||||||
with open(json_file_path, 'w') as data_file:
|
with open(json_file_path, 'w') as data_file:
|
||||||
json.dump({'versions': {}}, data_file, indent=4)
|
json.dump({'versions': {}}, data_file, indent=4)
|
||||||
|
|
||||||
with open(json_file_path, 'r') as data_file:
|
with open(json_file_path, 'r') as data_file:
|
||||||
repo_data = json.load(data_file)
|
repo_data = json.load(data_file)
|
||||||
|
|
||||||
|
global update_task_started
|
||||||
|
|
||||||
|
if 'last_version_check' in repo_data:
|
||||||
|
last_version_check = datetime.datetime.fromisoformat(repo_data['last_version_check'])
|
||||||
|
|
||||||
|
if datetime.datetime.now() - datetime.timedelta(minutes=5) < last_version_check:
|
||||||
|
update_task_started = False
|
||||||
|
return
|
||||||
|
|
||||||
|
providers_path = os.path.join(os.getcwd(), 'autorepacked/providers')
|
||||||
|
modules = os.listdir(providers_path)
|
||||||
|
|
||||||
versions = repo_data['versions']
|
versions = repo_data['versions']
|
||||||
need_update_index = False
|
need_update_index = False
|
||||||
for module_name in modules:
|
for module_name in modules:
|
||||||
@ -49,8 +71,7 @@ def main():
|
|||||||
|
|
||||||
repo_data['versions'] = versions
|
repo_data['versions'] = versions
|
||||||
|
|
||||||
with open(json_file_path, 'w') as data_file:
|
current_date = datetime.datetime.utcnow()
|
||||||
json.dump(repo_data, data_file, indent=4)
|
|
||||||
|
|
||||||
if need_update_index:
|
if need_update_index:
|
||||||
utils.run(
|
utils.run(
|
||||||
@ -61,7 +82,33 @@ def main():
|
|||||||
config.get('repo_path'),
|
config.get('repo_path'),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
repo_data['last_index_update'] = current_date.isoformat()
|
||||||
|
|
||||||
|
repo_data['last_version_check'] = current_date.isoformat()
|
||||||
|
|
||||||
|
with open(json_file_path, 'w') as data_file:
|
||||||
|
json.dump(repo_data, data_file, indent=4)
|
||||||
|
|
||||||
|
update_task_started = False
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/update")
|
||||||
|
def update_method(background_tasks: BackgroundTasks):
|
||||||
|
global update_task_started
|
||||||
|
if not update_task_started:
|
||||||
|
update_task_started = True
|
||||||
|
background_tasks.add_task(update)
|
||||||
|
return {'status': 'OK'}
|
||||||
|
|
||||||
|
|
||||||
|
@repeat_every(seconds=60 * 60 * 4)
|
||||||
|
def update_repeat():
|
||||||
|
global update_task_started
|
||||||
|
if not update_task_started:
|
||||||
|
update_task_started = True
|
||||||
|
update()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
create_repo(config)
|
||||||
|
uvicorn.run(app, host="0.0.0.0", port=8000)
|
||||||
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fastapi==0.109.0
|
||||||
|
uvicorn==0.26.0
|
||||||
|
fastapi-utils==0.2.1
|
Loading…
Reference in New Issue
Block a user