def get_date_range(request): dates = [] client = get_client() start_year = int(request.headers['start-year']) start_month = int(request.headers['start-month']) start_day = int(request.headers['start-day']) end_year = int(request.headers['end-year']) end_month = int(request.headers['end-month']) end_day = int(request.headers['end-day']) start = date(start_year, start_month, start_day) end = date(end_year, end_month, end_day) if start > end: raise InvalidUsage('Must enter valid date range.', status_code=400) else: for dt in rrule(DAILY, dtstart=start, until=end): year = int(dt.strftime("%Y")) month = int(dt.strftime("%m")) day = int(dt.strftime("%d")) dates.append(client.get_date(year, month, day)) return dates
def get_entries_history(): if 'username' in session: date_range = get_date_range(request) entries = {} for date in date_range: for meal in date.meals: for entry in meal: if entry.short_name not in entries: obj = { 'count': 1, 'nutrition': entry.nutrition_information } entries[entry.short_name] = obj else: entries[entry.short_name]['count'] += 1 old_entry = Counter( entries[entry.short_name]['nutrition']) new_entry = Counter(entry.nutrition_information) concat_entry = old_entry + new_entry entries[entry.short_name]['nutrition'] = concat_entry return jsonify(entries) else: raise InvalidUsage('Access Denied', status_code=403)
def logout(): if 'username' not in session: raise InvalidUsage('Not Logged In', status_code=401) else: del clients[session['username']] session.clear() return jsonify(Success=True), 200
def login(): if not request.json or not 'username' in request.json or not 'password' in request.json: return jsonify({"error": "Invalid request format"}), 404 else: if session.get('logged_in'): return jsonify(success=True), 200 else: try: # Strip the unicode username = str(request.json['username']) client = myfitnesspal.Client(username, request.json['password']) clients[username] = client session['logged_in'] = True session['username'] = username print('Querying...') if User.query.filter_by(username=username).first(): print("Successful login.") return jsonify(success=True), 200 else: newUser = User(username, request.json['password']) db.session.add(newUser) db.session.commit() print("User created.") return jsonify(success=True), 200 except ValueError: raise InvalidUsage('Invalid Credentials', status_code=401)
def range_meals(): if 'username' in session: date_range = get_date_range(request) meals = {} for day in date_range: date = day.date.strftime('%m/%d/%Y') meals[date] = get_meals(day) return jsonify(meals) else: raise InvalidUsage('Access Denied', status_code=403)
def entries(): if 'username' in session: date = get_date(request) entries = {} for meal in date.meals: for entry in meal: entryDict = entry.get_as_dict() entries[entryDict['name']] = entryDict['nutrition_information'] return jsonify(entries) else: raise InvalidUsage('Access Denied', status_code=403)
def get_weight_history(): if 'username' in session: client = get_client() start_year = int(request.headers['start-year']) start_month = int(request.headers['start-month']) start_day = int(request.headers['start-day']) end_year = int(request.headers['end-year']) end_month = int(request.headers['end-month']) end_day = int(request.headers['end-day']) start = date(start_year, start_month, start_day) end = date(end_year, end_month, end_day) if start > end: raise InvalidUsage('Must enter valid date range', status_code=400) else: weight = client.get_measurements('Weight', end, start) res = {k.strftime('%Y/%m/%d'): v for k, v in weight.iteritems()} return jsonify(res) else: raise InvalidUsage('Access Denied', status_code=403)
def get_weight(): if 'username' in session: client = get_client() year = int(request.headers['year']) month = int(request.headers['month']) day = int(request.headers['day']) currentDate = date(year, month, day) try: weight = client.get_measurements(currentDate, currentDate) print(weight) return jsonify(weight) except ValueError: return jsonify({}), 204 else: raise InvalidUsage('Access Denied', status_code=403)
def average_totals(): print(session) if 'username' in session: date_range = get_date_range(request) totals = Counter(date_range[0].totals) days = len(date_range) if not totals: days -= 1 for day in date_range[1:]: date = day.date.strftime('%m/%d/%Y') if day.totals: totals += Counter(day.totals) else: days -= 1 for key in totals: totals[key] /= days return jsonify({'totals': totals, 'trackedDays': days}) else: raise InvalidUsage('Access Denied', status_code=403)
def water(): if 'username' in session: date = get_date(request) return jsonify(date.water) else: raise InvalidUsage('Access Denied', status_code=403)