applications
This commit is contained in:
1
app.py
1
app.py
@@ -29,6 +29,7 @@ blueprints = [
|
||||
(routes.printing_blueprint, '/printing'),
|
||||
(routes.assembly_blueprint, '/assembly'),
|
||||
(routes.general_blueprint, '/general'),
|
||||
(routes.application_blueprint, '/application'),
|
||||
]
|
||||
|
||||
for blueprint, url_prefix in blueprints:
|
||||
|
||||
@@ -7,3 +7,7 @@ APP_PATH = os.path.dirname(sys.executable) if getattr(sys, 'frozen', False) else
|
||||
LOGGER_NAME = 'assemblr'
|
||||
LOG_FILE = Path(APP_PATH) / Path(f'{LOGGER_NAME}.log')
|
||||
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)
|
||||
|
||||
@@ -33,3 +33,12 @@ class Barcode(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True, comment='ID пользователя')
|
||||
denco_article = db.Column(db.Integer, 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)
|
||||
|
||||
@@ -4,3 +4,4 @@ from routes.barcode import barcode_blueprint
|
||||
from routes.printing import printing_blueprint
|
||||
from routes.assembly import assembly_blueprint
|
||||
from routes.general import general_blueprint
|
||||
from routes.application import application_blueprint
|
||||
|
||||
61
routes/application.py
Normal file
61
routes/application.py
Normal 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}
|
||||
Reference in New Issue
Block a user