def post_notification(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Sing in current user to pushup notifications Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request None; Only http answer """ user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(env['HTTP_HOST']) key_obj = get_json_by_response(env) registration_id = key_obj['token'] sess = sql.get_session(cookie.get('sessid', '')) # Get session object hash_ = hash(sess['user_agent'] + sess['last_ip']) # TODO: save hash sql.set_notification(user_obj['id'], registration_id) # TODO: check status message_title = "Uber update" message_body = f"Hi {user_obj['name']}, your customized news for today is ready" result = push_service.notify_single_device(registration_id=registration_id, message_title=message_title, message_body=message_body) print('!!!!!!result!!!!!!!', result) return http.ok(env['HTTP_HOST'])
def get_feedback(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Account data HTTP request Got day num and return day event for feedback # TODO: Get data if feedback already exist Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ day = query['date'] # TODO: Check dd.mm of day_id # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(host=env['HTTP_HOST']) feedback_template, feedback_data = sql.get_feedback(user_obj['id'], day) top_object = sql.get_top(user_obj['id'], day) data = {'template': feedback_template, 'data': feedback_data, 'top': top_object} return http.ok(json_dict=data)
def post_deenroll_project(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ De Enroll current user to project HTTP request Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Send: 200 Ok: if all are ok 401 Unauthorized: if wrong session id 405 Method Not Allowed: already got it Returns: Response - result of request """ # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(host=env['HTTP_HOST']) # Check current user can edit if user_obj['project_id'] == 0: return http.conflict() sql.deenroll_project(user_obj['id']) return http.ok(host=env['HTTP_HOST'])
def change_password(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: TODO: add description """ data = get_json_by_response(env) if 'user_id' not in data or 'pass' not in data: return http.bad_request(host=env['HTTP_HOST']) logger('change_password()', f'Change password for {data["user_id"]}.', type_='LOG') if sql.change_password(data['user_id'], data['pass']): return http.ok(host=env['HTTP_HOST']) else: return http.bad_request(host=env['HTTP_HOST'])
def post_edit_project(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Post edit project HTTP request Edit project signed by cookie Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Send: 200 Ok: if all are ok 401 Unauthorized: if wrong session id 405 Method Not Allowed: already got it Returns: Response - result of request """ # Get json from response project_obj = get_json_by_response(env) # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(host=env['HTTP_HOST']) # Check current user can edit if user_obj['user_type'] == 0 and user_obj['project_id'] != project_obj['id']: return http.not_allowed() sql.update_in_table(project_obj, 'projects') return http.ok(host=env['HTTP_HOST'])
def send_data(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: TODO: add description """ table_name = query['table'] # Get json from response obj = get_json_by_response(env) if table_name in sql.table_fields.keys(): if 'id' not in obj.keys() or obj['id'] == '': sql.insert_to_table(obj, table_name) else: sql.update_in_table(obj, table_name) if table_name == 'events': config.add_place(obj['place']) return http.ok(host=env['HTTP_HOST'])
def post_config(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Config data HTTP request Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Send: 200 Ok: if user exist and session created correctly and send cookie with sess id Returns: Response - result of request None """ config_raw = get_json_by_response(env) config_dict = {} # type: tp.Dict[str, tp.Any] config_dict['CREDITS_TOTAL'] = config_raw['total'] config_dict['CREDITS_MASTER'] = config_raw['master'] config_dict['CREDITS_LECTURE'] = config_raw['lecture'] config_dict['CREDITS_ADDITIONAL'] = config_raw['additional'] config_dict['NUMBER_TEAMS'] = config_raw['groups'] config.set_config(config_dict) return http.ok(host=env['HTTP_HOST'])
def get_credits(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Credits data HTTP request Get credits data for chart according to user Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(host=env['HTTP_HOST']) user_id = user_obj['id'] if 'id' in query: # Request other's user credits if user_obj['user_type'] > 0: # Check admin rights user_id = query['id'] else: return http.forbidden() data = sql.get_credits_by_user_id(user_id) return http.ok(host=env['HTTP_HOST'], json_dict=data)
def users(): if request.method == 'GET': users = get_users(request) return ok(users) if request.method == 'POST': body = request.get_json() user = create_user(db, body) return created(user)
def get_names(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Send names data HTTP request Will check session id and return data according to user Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ data = sql.get_names() return http.ok(json_dict=data)
def get_credits(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: TODO: add description """ data = sql.get_credits_short() # Send req data tables return http.ok(host=env['HTTP_HOST'], json_dict=data)
def user(id): user_exists = User.query.get(id) if user_exists is None: return not_found('user') if request.method == 'GET': return ok(user_exists) if request.method == 'PUT': body = request.get_json() update_user(db, user_exists, body) return no_content() if request.method == 'DELETE': delete_user(db, user_exists) return no_content()
def get_places(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Places HTTP request Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ places = config.get_places() data = places return http.ok(host=env['HTTP_HOST'], json_dict=data)
def get_event(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Event data HTTP request Get event description by event id Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ data = sql.get_in_table(query['id'], 'events') # Json event data return http.ok(host=env['HTTP_HOST'], json_dict=data)
def get_projects(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Projects HTTP request Send list of projects in json format Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ data = sql.get_table('projects') data = [obj for obj in data if obj['id'] != 0] return http.ok(json_dict=data)
def get_class(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Class data HTTP request Get class description by class id Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ data = sql.get_in_table(query['id'], 'classes') # Json event data return http.ok(json_dict=data)
def get_days(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Days data HTTP request Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ days = sql.get_table('days') days = [obj for obj in days if obj['id'] != 0] data = {'days': days, 'today': get_date_str()} return http.ok(json_dict=data)
def get_project(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Get Project HTTP request by id Send project description in json format Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ project_id = query['id'] data = sql.get_in_table(project_id, 'projects') return http.ok(json_dict=data)
def post_places(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Places HTTP request Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request None """ places_raw = get_json_by_response(env) config.set_places(places_raw) return http.ok(host=env['HTTP_HOST'])
def post_mark_enrolls(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Sing in at lecture HTTP request (by student ) By cookie add credits to user Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Send: 200 Ok: if all are ok 401 Unauthorized: if wrong session id 405 Method Not Allowed: already got it or timeout Returns: Response - result of request None; Only http answer """ # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(host=env['HTTP_HOST']) enrolls = get_json_by_response(env) config_dict = config.get_config() if enrolls is not None: # TODO: check do better for enroll in enrolls: sql.update_in_table(enroll, 'enrolls') if enroll['attendance'] in (True, 'true'): sql.pay_credit(enroll['user_id'], enroll['class_id'], config_dict['CREDITS_MASTER'] + min(config_dict['CREDITS_ADDITIONAL'], enroll['bonus']), get_datetime_str()) # TODO: CREDITS_MASTER CREDITS_LECTURE check return http.ok(host=env['HTTP_HOST']) else: return http.not_allowed()
def post_credits(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Sing in at lecture HTTP request (by student ) By cookie add credits to user Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Send: 200 Ok: if all are ok 401 Unauthorized: if wrong session id 405 Method Not Allowed: already got it or timeout Returns: Response - result of request None; Only http answer """ # TODO: CREDITS # Event code # code = query['code'] # print('Credits code: ', code) event_id = 42 # TODO: Get event id from code # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(env['HTTP_HOST']) event_obj = sql.get_event(event_id) if event_obj is not None: # gsheets.save_credits(user_obj, event_obj) sql.checkin_user(user_obj, event_obj) logger('post_credits()', f'Checkin user {user_obj} to {event_obj}', type_='LOG') return http.ok(env['HTTP_HOST']) else: return http.not_allowed()
def codes(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: TODO: add description """ codes = generate_codes(20) for code in codes: data = {'code': code, 'type': 0, 'used': False} sql.insert_to_table(data, 'codes') return http.ok(host=env['HTTP_HOST'])
def post_remove_enroll(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Remove HTTP request (by student ) By cookie add credits to user Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Send: 200 Ok: if all are ok 401 Unauthorized: if wrong session id 405 Method Not Allowed: already got it or timeout Returns: Response - result of request None; Only http answer """ # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(host=env['HTTP_HOST']) enroll_id = query['id'] enroll = sql.get_in_table(enroll_id, 'enrolls') if enroll is not None and ( user_obj['user_type'] == 0 and enroll['user_id'] == user_obj['id'] or user_obj['user_type'] >= 1): # Check admin or user remove himself event = sql.get_event_with_date(enroll['class_id']) if not check_enroll_time(event['date'], event['time']): # Close for 15 min return http.gone() sql.remove_enroll(enroll_id) return http.ok(host=env['HTTP_HOST']) else: return http.not_allowed()
def get_user(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ User data HTTP request Will check session id and return data according to user Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(host=env['HTTP_HOST']) if 'id' in query: # Request other's user boi if user_obj['user_type'] > 0: # Check admin rights user_obj = sql.get_user_by_id(query['id']) else: return http.forbidden(host=env['HTTP_HOST']) # Json account data data = user_obj del data['pass'] data['enrolls'] = [{'class_id': enroll['class_id'], 'attendance': enroll['attendance'], 'bonus': enroll['bonus']} for enroll in sql.get_enrolls_by_user_id(user_obj['id'])] # TODO: Think do it that way ot not data['calendar'] = True data['feedback'] = False # TODO: Notifacation data['projects'] = user_obj['project_id'] == 0 or user_obj['project_id'] == '0' data['total'] = config.get_config()['CREDITS_TOTAL'] data['today'] = get_date_str() # TODO: remove. Only for debug??? database_update_time = sql.get_update_times() data['update_time'] = database_update_time return http.ok(host=env['HTTP_HOST'], json_dict=data)
def remove_data(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: TODO: add description """ table_name = query['table'] obj_id = query['id'] if table_name in sql.table_fields.keys(): sql.remove_in_table(obj_id, table_name) return http.ok(host=env['HTTP_HOST'])
def post_create_enroll(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Create HTTP request (by student ) By cookie add enroll to user Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Send: 200 Ok: if all are ok 401 Unauthorized: if wrong session id 405 Method Not Allowed: already got it or timeout Returns: Response - result of request None; Only http answer """ # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(host=env['HTTP_HOST']) event_id = query['event_id'] event = sql.get_event_with_date(event_id) if event is None: return http.not_allowed() if not check_enroll_time(event['date'], event['time']): # Close for 15 min return http.gone() if sql.enroll_user(event_id, user_obj['id'], event['date'], get_datetime_str()): return http.ok(host=env['HTTP_HOST']) else: return http.not_allowed()
def get_day(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Day schedule data HTTP request Get day num and return html Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Cached by TIMEOUT return day html by req from query string (if none return today) Returns: Response - result of request html data: day schedule """ # format is "dd.mm" try: day = query['day'] except KeyError: day = get_date_str() # Get for today day if day not in ['Template', '05.06', '06.06', '07.06', '08.06', '09.06', '10.06', '11.06', '12.06', '13.06', '14.06', '15.06', '16.06', '17.06', '18.06']: # print('day overflow, falling back to the last day available') # TODO: Remove or check in sql logger('get_day()', 'day overflow, falling back to the last day available', type_='ERROR') day = '05.06' # print('get data days for ', day) data = sql.get_day(day) data = sorted(data, key=lambda x: x['time']) groups = groupby(data, key=lambda x: x['time']) data = [{'time': time_, 'events': [event for event in group_]} for time_, group_ in groups] return http.ok(json_dict=data)
def post_feedback(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Login HTTP request By cookie create feedback for day Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Note: Send: 200 Ok: if all are ok 401 Unauthorized: if wrong session id 405 Method Not Allowed: already got it Returns: Response - result of request None; Only http answer """ date = query['date'] # Safety get user_obj user_obj = get_user_by_response(cookie) if user_obj is None: return http.wrong_cookie(env['HTTP_HOST']) # Get json from response feedback_obj = get_json_by_response(env) users = feedback_obj['users'] events = feedback_obj['events'] print('EVENTS', events) print('USERS', users) # TODO: check if sql.post_feedback(user_obj['id'], events) or sql.post_top(user_obj['id'], date, users): return http.ok(env['HTTP_HOST']) else: return http.not_allowed()
def clear_table(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: TODO: add description """ table_name = query['table'] if table_name in sql.table_fields.keys(): sql.clear_table(table_name) else: logger('admin_panel()', '400 Bad Request by admin', type_='ERROR') return http.bad_request(host=env['HTTP_HOST']) return http.ok(host=env['HTTP_HOST'])
def get_enrolls(env: TEnvironment, query: TQuery, cookie: TCookie) -> TResponse: """ Enrolls data HTTP request Get enrolls list by event id or user id Args: env: HTTP request environment query: url query parameters cookie: http cookie parameters (may be empty) Returns: Response - result of request """ data = [] if 'event_id' in query.keys(): data = sql.get_enrolls_by_event_id(query['event_id']) # print('enrolls by event_id ', data) elif 'user_id' in query.keys(): data = sql.get_enrolls_by_user_id(query['user_id']) # print('enrolls by user_id ', data) return http.ok(json_dict=data)