From 6cd69c5d4b40d1564f11951612dab8cea89a238e Mon Sep 17 00:00:00 2001 From: msinkec Date: Sat, 15 Jan 2022 10:37:40 +0100 Subject: [PATCH] server name config, top uploads for instituion, institution upload stats endpoint --- app.py | 19 ++++++++++++++----- config.ini | 1 + docker-compose.yml | 1 + portal/solar.py | 28 ++++++++++++++++++++++++---- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/app.py b/app.py index 8490437..60fe4fb 100644 --- a/app.py +++ b/app.py @@ -26,6 +26,7 @@ config = configparser.ConfigParser() config.read('config.ini') config = config['DEFAULT'] +SERVER_NAME = config['SERVER_NAME'] MAIL_HOST = config['MAIL_HOST'] MAIL_LOGIN = config['MAIL_LOGIN'] MAIL_PASS = config['MAIL_PASS'] @@ -47,6 +48,8 @@ if not UPLOADS_DIR.exists: UPLOADS_DIR.mkdir(parents=True) # Override configs with environment variables, if set +if 'PORTALDS4DS1_SERVER_NAME' in os.environ: + SERVER_NAME = os.environ['PORTALDS4DS1_SERVER_NAME'] if 'PORTALDS4DS1_MAIL_HOST' in os.environ: MAIL_HOST = os.environ['PORTALDS4DS1_MAIL_HOST'] if 'PORTALDS4DS1_MAIL_LOGIN' in os.environ: @@ -80,6 +83,7 @@ if 'PORTALDS4DS1_SQL_CONN_STR' in os.environ: app = Flask(__name__) app.config.update( + SERVER_NAME = SERVER_NAME, SECRET_KEY = APP_SECRET_KEY, UPLOADED_PATH = UPLOADS_DIR, MAX_CONTENT_LENGTH = MAX_UPLOAD_SIZE, @@ -99,6 +103,7 @@ manager.add_command('db', MigrateCommand) dropzone = Dropzone(app) upload_handler_solar = portal.solar.UploadHandlerSolar( + SERVER_NAME = SERVER_NAME, UPLOADS_DIR=UPLOADS_DIR, MAIL_HOST=MAIL_HOST, MAIL_LOGIN=MAIL_LOGIN, @@ -305,8 +310,6 @@ def solar(text): show_upload_form = True contract_school = portal.solar.get_institution_contract(current_user_institution.id) cooperation_history = portal.solar.get_institution_cooperation_history(current_user_institution.id) - logging.info('TEEEEEEEEEEEEEEEEEEEEEEEsst') - logging.info(cooperation_history[0].name) if portal.solar.is_institution_coordinator(current_user_obj.id, current_user_institution.id): contracts_students = portal.solar.get_institution_student_contracts(current_user_institution.id) enable_upload_school_contract = True @@ -461,10 +464,16 @@ def solar_topuploads(): return jsonify(portal.solar.get_top_uploading_institutions()) -@app.route('/topuploads-by-user') +@app.route('/topuploads-institution/') @login_required -def solar_topuploads_by_user(): - return jsonify(portal.solar.get_top_uploading_users()) +def solar_topuploads_institution(institution_id): + return jsonify(portal.solar.get_top_uploading_users(institution_id)) + + +@app.route('/uploadstats-institution/') +@login_required +def solar_uploadstats_institution(institution_id): + return jsonify(portal.solar.get_institution_upload_stats(institution_id)) @app.route('/deluser', methods=['POST']) diff --git a/config.ini b/config.ini index 2de54cd..0021cad 100644 --- a/config.ini +++ b/config.ini @@ -1,4 +1,5 @@ [DEFAULT] +SERVER_NAME=localhost:5000 SQL_CONN_STR=postgresql://portal:randompass123@localhost/portal MAIL_HOST=posta.cjvt.si MAIL_LOGIN=oddaja-besedil@cjvt.si diff --git a/docker-compose.yml b/docker-compose.yml index 4829e2f..b90d6b8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,7 @@ services: build: . restart: always environment: + - PORTALDS4DS1_SERVER_NAME=localhost:5000 - PORTALDS4DS1_SQL_CONN_STR=postgresql://portal:randompass123@db/portal - PORTALDS4DS1_MAIL_HOST=posta.cjvt.si - PORTALDS4DS1_MAIL_LOGIN=oddaja-besedil@cjvt.si diff --git a/portal/solar.py b/portal/solar.py index 7f6aa4f..d52c738 100644 --- a/portal/solar.py +++ b/portal/solar.py @@ -458,9 +458,9 @@ def get_top_uploading_institutions(): return dict(sorted(res.items(), key=lambda x:x[1], reverse=True)) -def get_top_uploading_users(): +def get_top_uploading_users(institution_id): res = dict() - users = get_all_active_users() + users = get_all_active_institution_users(institution_id) for user in users: uploads = UploadSolar.query.filter_by(upload_user=user.id).all() for upload in uploads: @@ -472,6 +472,27 @@ def get_top_uploading_users(): return dict(sorted(res.items(), key=lambda x:x[1], reverse=True)) +def get_institution_upload_stats(institution_id): + res = { + 'region': [], + 'program': [], + } + + # Region + for region in VALID_REGIONS: + count = UploadSolar.query.filter_by(institution=institution_id, region=region).count() + res['region'].append((region, count)) + res['region'] = sorted(res['region'], key=lambda x:x[1], reverse=True) + + # Program + for program in VALID_PROGRAMS: + count = UploadSolar.query.filter_by(institution=institution_id, program=program).count() + res['program'].append((program, count)) + res['program'] = sorted(res['program'], key=lambda x:x[1], reverse=True) + + return res + + def get_all_active_users(): # TODO: do filtering purely within an SQL query res = [] @@ -785,8 +806,7 @@ def send_resetpass_mail(email, config): body = ''' Zahtevali ste ponastavitev gesla vašega uporabniškega računa. - Geslo lahko ponastavite na naslednji povezavi: http://proc1.cjvt.si:5000/resetpass/{}'''.format(jwt_token) - logging.info(body) + Geslo lahko ponastavite na naslednji povezavi: https://{}/resetpass/{}'''.format(config['SERVER_NAME'], jwt_token) message = MIMEMultipart() message['From'] = config['MAIL_LOGIN'] message['To'] = email