applications

This commit is contained in:
2023-11-20 06:44:44 +03:00
parent 57bb4fd5e4
commit 21313f053b
5 changed files with 76 additions and 0 deletions

1
app.py
View File

@@ -29,6 +29,7 @@ blueprints = [
(routes.printing_blueprint, '/printing'), (routes.printing_blueprint, '/printing'),
(routes.assembly_blueprint, '/assembly'), (routes.assembly_blueprint, '/assembly'),
(routes.general_blueprint, '/general'), (routes.general_blueprint, '/general'),
(routes.application_blueprint, '/application'),
] ]
for blueprint, url_prefix in blueprints: for blueprint, url_prefix in blueprints:

View File

@@ -7,3 +7,7 @@ APP_PATH = os.path.dirname(sys.executable) if getattr(sys, 'frozen', False) else
LOGGER_NAME = 'assemblr' LOGGER_NAME = 'assemblr'
LOG_FILE = Path(APP_PATH) / Path(f'{LOGGER_NAME}.log') LOG_FILE = Path(APP_PATH) / Path(f'{LOGGER_NAME}.log')
MAX_LOG_FILE_SIZE_BYTES = 400 * 1024 ** 2 MAX_LOG_FILE_SIZE_BYTES = 400 * 1024 ** 2
APKS_PATH = os.path.join(APP_PATH, 'apks')
if not os.path.isdir(APKS_PATH):
os.mkdir(APKS_PATH)

View File

@@ -33,3 +33,12 @@ class Barcode(db.Model):
id = db.Column(db.Integer, primary_key=True, comment='ID пользователя') id = db.Column(db.Integer, primary_key=True, comment='ID пользователя')
denco_article = db.Column(db.Integer, nullable=False, comment='Артикул', index=True) denco_article = db.Column(db.Integer, nullable=False, comment='Артикул', index=True)
barcode = db.Column(db.String, nullable=False, comment='Баркод', index=True) barcode = db.Column(db.String, nullable=False, comment='Баркод', index=True)
class Application(db.Model):
__tablename__ = 'applications'
id = db.Column(db.Integer, primary_key=True, comment='')
name = db.Column(db.String(40), nullable=False)
version = db.Column(db.String(10), nullable=False)
uploaded = db.Column(db.DateTime, nullable=False)
filename = db.Column(db.String, nullable=False)

View File

@@ -4,3 +4,4 @@ from routes.barcode import barcode_blueprint
from routes.printing import printing_blueprint from routes.printing import printing_blueprint
from routes.assembly import assembly_blueprint from routes.assembly import assembly_blueprint
from routes.general import general_blueprint from routes.general import general_blueprint
from routes.application import application_blueprint

61
routes/application.py Normal file
View File

@@ -0,0 +1,61 @@
import datetime
import os.path
import uuid
from flask import Blueprint, request
import database
from constants import APKS_PATH
application_blueprint = Blueprint('application', __name__)
@application_blueprint.before_request
def auth():
API_KEY = 'AF9A20DD9264C134CDA0ADACED834368'
if request.headers.get('Authorization') != API_KEY:
return {'error': 'Unauthorized'}, 401
@application_blueprint.get('<string:application_name>/download/<string:version>')
def download_version(application_name: str, version: str):
application = database.Application.query.filter_by(version=version,
name=application_name).first()
if not application:
return {
"error": f"Application version '{version}' not found."
}, 404
@application_blueprint.get('<string:application_name>/version')
def get_version(application_name: str):
version = (database.Application.query.
filter_by(name=application_name).
order_by(database.Application.uploaded.desc()).
with_entities(database.Application.version).
limit(1).
scalar())
return {'latest_version': version}
@application_blueprint.post('<string:application_name>/upload')
def upload(application_name: str):
file = request.files.get('file')
version = request.form.get('version')
if (not file) or (not version):
return {"error": "Invalid form data. There is no file or version field"}, 400
version = version.strip()
application = (database.Application.query.
filter_by(version=version).
with_entities(database.Application.id).first())
if application:
return {"error": f"Specified version ({version}) already uploaded"}, 400
filename = uuid.uuid4().hex + '.apk'
file.save(os.path.join(APKS_PATH, filename))
application = database.Application(name=application_name,
version=version,
uploaded=datetime.datetime.now(),
filename=filename)
database.db.session.add(application)
database.db.session.commit()
return {'filename': filename, 'version': version}