def create_user_goal(): user_data = models.UserData.current() if not user_data: return api_invalid_param_response("User is not logged in.") user_override = request.request_user_data("email") if user_data.developer and user_override and user_override.key_email != user_data.key_email: user_data = user_override json = request.json title = json.get('title') if not title: return api_invalid_param_response('Title is invalid.') objective_descriptors = [] goal_exercises = GoalList.exercises_in_current_goals(user_data) goal_videos = GoalList.videos_in_current_goals(user_data) if json: for obj in json['objectives']: if obj['type'] == 'GoalObjectiveAnyExerciseProficiency': objective_descriptors.append(obj) if obj['type'] == 'GoalObjectiveAnyVideo': objective_descriptors.append(obj) if obj['type'] == 'GoalObjectiveExerciseProficiency': obj['exercise'] = models.Exercise.get_by_name(obj['internal_id']) if not obj['exercise'] or not obj['exercise'].is_visible_to_current_user(): return api_invalid_param_response("Internal error: Could not find exercise.") if user_data.is_proficient_at(obj['exercise'].name): return api_invalid_param_response("Exercise has already been completed.") if obj['exercise'].name in goal_exercises: return api_invalid_param_response("Exercise is already an objective in a current goal.") objective_descriptors.append(obj) if obj['type'] == 'GoalObjectiveWatchVideo': obj['video'] = models.Video.get_for_readable_id(obj['internal_id']) if not obj['video']: return api_invalid_param_response("Internal error: Could not find video.") user_video = models.UserVideo.get_for_video_and_user_data(obj['video'], user_data) if user_video and user_video.completed: return api_invalid_param_response("Video has already been watched.") if obj['video'].readable_id in goal_videos: return api_invalid_param_response("Video is already an objective in a current goal.") objective_descriptors.append(obj) if objective_descriptors: objectives = GoalObjective.from_descriptors(objective_descriptors, user_data) goal = Goal(parent=user_data, title=title, objectives=objectives) user_data.save_goal(goal) return goal.get_visible_data(None) else: return api_invalid_param_response("No objectives specified.")
def test_required_fields(self): goal = Goal( name="The name", description="The description", image=self.test_file, slug="the-slug", ) expected = None assert expected == goal.clean_fields()
def totals(request): totals = [] if request.user.is_authenticated(): r = Goal().redis pipe = r.pipeline() for k in r.keys(): pipe.get(k) totals = [{'date': k, 'count': c} for k in r.keys() for c in pipe.execute()] return r2r("totals.jinja",request,{'totals':totals})
def test_create_goal(django_user_model): user = django_user_model.objects.create( username='******', password='******' ) name = 'Creative Writing' description = 'Write creatively 3x a week for the next 3 months.' end_date = datetime.datetime.now() + datetime.timedelta(days=90) goal = Goal(user=user, name=name, description=description, end_date=end_date) goal.save() assert len(Goal.objects.all()) == 1
def goals(request): if request.user.is_authenticated(): goals = request.user.goal_set.order_by('frequency') else: goals = [ Goal(name="Exercise", frequency=Goal.FREQ_DAILY), Goal(name="Meditate", frequency=Goal.FREQ_DAILY), Goal(name="Floss", frequency=Goal.FREQ_WEEKLY), Goal(name="Read", frequency=Goal.FREQ_WEEKLY), Goal(name="Blog", frequency=Goal.FREQ_MONTHLY), ] for goal in goals: goal.get_date_count = lambda d: random.randint(0, 2) return r2r("index.jinja", request, {"goals": goals})
def goal_list(request, weekly=False): """ List current goals, or create a new one """ weekly_param = request.GET.get('weekly','false') weekly = weekly or weekly_param != 'false' try: year = int(request.GET.get('year', 0)) except ValueError as e: year = 0 if year is not 0: month = int(request.GET.get('month', 0)) day = int(request.GET.get('day', 0)) today = date(year, month, day) else: today = False if request.method == 'GET': user = request.user.id goals = Goal.getGoals(user=user, weekly=weekly, day=today) serializer = GoalSerializer(goals, many=True) return JSONResponse(serializer.data) elif request.method == 'POST': data = JSONParser().parse(request) data['owner'] = request.user.id if not data['date']: data['date'] = today.isoformat() if today else date.today().isoformat() serializer = GoalSerializer(data=data, partial=True) if serializer and serializer.is_valid(): serializer.save() return JSONResponse(serializer.data, status=status.HTTP_201_CREATED) return JSONResponse(serializer.errors, status=400)
def test_archive_goal(django_user_model): user = django_user_model.objects.create( username='******', password='******' ) name = 'Creative Writing' description = 'Write creatively 3x a week for the next 3 months.' end_date = datetime.datetime.now() + datetime.timedelta(days=90) goal = Goal(user=user, name=name, description=description, end_date=end_date, active=False) goal.save() goal.archive assert Goal.objects.first().archived == True
def api_goal_new(request): if not request.user.is_authenticated(): return {"logged_out": True} goal_name = request.GET['name'] goal_freq = request.GET['frequency'] Goal(name=goal_name, frequency=goal_freq, user=request.user).save() return JsonResponse({})
def create_goal(name, group, created_by): goal = Goal() goal.name = name goal.short_description = "Test goal %s" % name goal.group_profile = group goal.created_by = created_by goal.save() return goal
def get_user_goal(id): user_data = models.UserData.current() if not user_data: return api_invalid_param_response("User not logged in") goal = Goal.get_by_id(id, parent=user_data) if not goal: return api_invalid_param_response("Could not find goal with ID " + str(id)) return goal.get_visible_data(None)
def test_create_goallog(django_user_model): user = django_user_model.objects.create(username='******', password='******') name = 'Creative Writing' description = 'Write creatively 3x a week for the next 3 months.' end_date = datetime.datetime.now() + datetime.timedelta(days=90) goal = Goal(user=user, name=name, description=description, end_date=end_date) goal.save() start_time = datetime.datetime.now() end_time = datetime.datetime.now() + datetime.timedelta(hours=2) goal_log = GoalLog(goal=goal, notes='some notes on how the log went.', start_time=start_time, end_time=end_time) goal_log.save() assert len(GoalLog.objects.all()) == 1
def put_user_goal(id): user_data = models.UserData.current() if not user_data: return api_invalid_param_response("User not logged in") goal = Goal.get_by_id(id, parent=user_data) if not goal: return api_invalid_param_response("Could not find goal with ID " + str(id)) goal_json = request.json # currently all you can modify is the title if goal_json['title'] != goal.title: goal.title = goal_json['title'] goal.put() # or abandon something if goal_json.get('abandoned') and not goal.abandoned: goal.abandon() goal.put() return goal.get_visible_data(None)
def test_has_description(self): goal = Goal(description="The description") expected = "The description" assert expected == goal.description
def get(self): if not hasattr(secrets, 'ka_api_consumer_key') or \ not hasattr(secrets, 'ka_api_consumer_secret') or \ not hasattr(secrets_dev, 'ka_api_token_key') or \ not hasattr(secrets_dev, 'ka_api_token_secret'): return self.redirect("/") self.setup_oauth() self.email = self.request_string("email") if not self.email: raise "Must supply email for user to import" params = copy.copy(self._default_kinds) params.update(self.request.params) # get proper user from addition 1 userexercise user_id_json = json.loads( self.api("/api/v1/user/exercises/addition_1")) user = users.User(user_id_json['user']) # UserData user_data_json_raw = self.api("/api/v1/user") user_data = UserData.from_json(json.loads(user_data_json_raw), user=user) self.output('user_data', user_data, user_data_json_raw) user_data.put() if 'UserVideo' in params: user_videos_json = json.loads(self.api("/api/v1/user/videos")) user_videos = [] for user_video_json in user_videos_json[:params['UserVideo']]: user_video = UserVideo.from_json(user_video_json, user_data=user_data) user_videos.append(user_video) self.output('user_video', user_video, jsonify(user_video_json)) video_logs = defaultdict(list) if 'VideoLog' in params: for user_video in user_videos: ytid = user_video.video.youtube_id video_logs_json = json.loads( self.api("/api/v1/user/videos/%s/log" % ytid)) problem_log_limit = params['ProblemLog'] for video_log_json in video_logs_json[:problem_log_limit]: video_log = VideoLog.from_json(video_log_json, user_video.video, user) video_logs[user_video].append(video_log) self.output("video_log", video_log, jsonify(video_log_json)) # delete old video logs query = VideoLog.all(keys_only=True) query.filter('user ='******'UserExercise' in params: user_exercises_json = json.loads( self.api("/api/v1/user/exercises")) user_exercises = [] exercise_limit = params['UserExercise'] for user_exercise_json in user_exercises_json[:exercise_limit]: user_exercise = UserExercise.from_json(user_exercise_json, user_data) if user_exercise: user_exercises.append(user_exercise) self.output("user_exercise", user_exercise, jsonify(user_exercise_json)) problem_logs = defaultdict(list) if 'ProblemLog' in params: for user_exercise in user_exercises: problem_logs_json = json.loads( self.api("/api/v1/user/exercises/%s/log" % user_exercise.exercise)) problem_log_limit = params['ProblemLog'] problem_logs_json = problem_logs_json[:problem_log_limit] for problem_log_json in problem_logs_json: problem_log = ProblemLog.from_json( problem_log_json, user_data=user_data, exercise=user_exercise.exercise_model) problem_logs[user_exercise].append(problem_log) self.output("problem_log", problem_log, jsonify(problem_log_json)) db.put(user_exercises) for k, v in problem_logs.iteritems(): db.put(v) if 'Goal' in params: with AutoNowDisabled(Goal): goals_json = json.loads(self.api("/api/v1/user/goals")) goals = [] for goal_json in goals_json[:params['Goal']]: goal = Goal.from_json(goal_json, user_data=user_data) goals.append(goal) self.output("goal", goal, jsonify(goal_json)) db.put(goals) # need to tell the userdata that it has goals user_data.has_current_goals = not all( [g.completed for g in goals]) user_data.put()
def new(request): if request.POST: new_goal_form = AddGoalForm(request.POST) if new_goal_form.is_valid(): goal = Goal() goal.created_by = request.user goal.modified_by = request.user goal.user = request.user goal.name = new_goal_form.cleaned_data['name'] if new_goal_form.cleaned_data['specific_target'] is True: goal.target_amount = new_goal_form.cleaned_data['target_amount'] goal.target_date = new_goal_form.cleaned_data['target_date'] if new_goal_form.cleaned_data['regular_payins'] is True: goal.period = new_goal_form.cleaned_data['period'] goal.period_step = new_goal_form.cleaned_data['step'] goal.period_increment = new_goal_form.cleaned_data['increment'] goal.status = 2 if new_goal_form.cleaned_data['regular_payins'] is True else 0 goal.save() return redirect('goals_home') else: new_goal_form = AddGoalForm() template_variables = { 'form': new_goal_form } return render_response(request, "goals/new.html", template_variables)
def get(self): if ( not hasattr(secrets, "ka_api_consumer_key") or not hasattr(secrets, "ka_api_consumer_secret") or not hasattr(secrets_dev, "ka_api_token_key") or not hasattr(secrets_dev, "ka_api_token_secret") ): return self.redirect("/") self.setup_oauth() self.email = self.request_string("email") if not self.email: raise "Must supply email for user to import" params = copy.copy(self._default_kinds) params.update(self.request.params) # get proper user from addition 1 userexercise user_id_json = json.loads(self.api("/api/v1/user/exercises/addition_1")) user = users.User(user_id_json["user"]) # UserData user_data_json_raw = self.api("/api/v1/user") user_data = UserData.from_json(json.loads(user_data_json_raw), user=user) self.output("user_data", user_data, user_data_json_raw) user_data.put() if "UserVideo" in params: user_videos_json = json.loads(self.api("/api/v1/user/videos")) user_videos = [] for user_video_json in user_videos_json[: params["UserVideo"]]: user_video = UserVideo.from_json(user_video_json, user_data=user_data) user_videos.append(user_video) self.output("user_video", user_video, jsonify(user_video_json)) video_logs = defaultdict(list) if "VideoLog" in params: for user_video in user_videos: ytid = user_video.video.youtube_id video_logs_json = json.loads(self.api("/api/v1/user/videos/%s/log" % ytid)) problem_log_limit = params["ProblemLog"] for video_log_json in video_logs_json[:problem_log_limit]: video_log = VideoLog.from_json(video_log_json, user_video.video, user) video_logs[user_video].append(video_log) self.output("video_log", video_log, jsonify(video_log_json)) # delete old video logs query = VideoLog.all(keys_only=True) query.filter("user ="******"UserExercise" in params: user_exercises_json = json.loads(self.api("/api/v1/user/exercises")) user_exercises = [] exercise_limit = params["UserExercise"] for user_exercise_json in user_exercises_json[:exercise_limit]: user_exercise = UserExercise.from_json(user_exercise_json, user_data) if user_exercise: user_exercises.append(user_exercise) self.output("user_exercise", user_exercise, jsonify(user_exercise_json)) problem_logs = defaultdict(list) if "ProblemLog" in params: for user_exercise in user_exercises: problem_logs_json = json.loads(self.api("/api/v1/user/exercises/%s/log" % user_exercise.exercise)) problem_log_limit = params["ProblemLog"] problem_logs_json = problem_logs_json[:problem_log_limit] for problem_log_json in problem_logs_json: problem_log = ProblemLog.from_json( problem_log_json, user_data=user_data, exercise=user_exercise.exercise_model ) problem_logs[user_exercise].append(problem_log) self.output("problem_log", problem_log, jsonify(problem_log_json)) db.put(user_exercises) for k, v in problem_logs.iteritems(): db.put(v) if "Goal" in params: with AutoNowDisabled(Goal): goals_json = json.loads(self.api("/api/v1/user/goals")) goals = [] for goal_json in goals_json[: params["Goal"]]: goal = Goal.from_json(goal_json, user_data=user_data) goals.append(goal) self.output("goal", goal, jsonify(goal_json)) db.put(goals) # need to tell the userdata that it has goals user_data.has_current_goals = not all([g.completed for g in goals]) user_data.put()
def test_has_slug(self): goal = Goal(slug="the-slug") expected = "the-slug" assert expected == goal.slug
def test_has_name(self): goal = Goal(name="The name") expected = "The name" assert expected == goal.name
def signup(request): if request.method == "POST": if not request.POST['email'] or not request.POST['username'] or not request.POST['password1']: # Check if email field empty return render(request, 'accounts/signup.html', {'error': 'Cannot leave fields blank'}) if request.POST['password1'] == request.POST['password2']: # Check that email is not already taken try: profile = User.objects.get(email=request.POST['email']) return render(request, 'accounts/signup.html', {'error': 'Email has already been taken'}) except: pass # Check that username is not already taken try: user = User.objects.get(username=request.POST['username']) return render(request, 'accounts/signup.html', {'error': 'Username has already been taken'}) except User.DoesNotExist: user = User.objects.create_user(request.POST['username'], email=request.POST['email'], password=request.POST['password1']) login(request, user) # If successful sign up, create a profile profile = Profile() profile.user = request.user profile.save() # Add examples to profile # Example todo todo = Todo() todo.title = "Groceries" todo.pub_date = timezone.now() todo.author = request.user todo.point_value = 10 todo.completed = False todo.save() todo2 = Todo() todo2.title = "Add a new Task!" todo2.pub_date = timezone.now() todo2.author = request.user todo2.point_value = 10 todo2.completed = False todo2.save() todo3 = Todo() todo3.title = "Clean room" todo3.pub_date = timezone.now() todo3.author = request.user todo3.point_value = 10 todo3.completed = False todo3.save() # Example Goals goal = Goal() goal.title = "Study" goal.amount_goal = 10 goal.units = "hours" goal.amount_per_increment = 1 goal.point_value = 25 goal.pub_date = timezone.now() goal.author = request.user goal.current_amount_done = 0 goal.times_completed = 0 goal.save() goal2 = Goal() goal2.title = "Jogging" goal2.amount_goal = 30 goal2.units = "miles" goal2.amount_per_increment = 1 goal2.point_value = 30 goal2.pub_date = timezone.now() goal2.author = request.user goal2.current_amount_done = 0 goal2.times_completed = 0 goal2.save() goal2 = Goal() goal2.title = "Pull-ups" goal2.amount_goal = 100 goal2.units = "reps" goal2.amount_per_increment = 20 goal2.point_value = 15 goal2.pub_date = timezone.now() goal2.author = request.user goal2.current_amount_done = 0 goal2.times_completed = 0 goal2.save() # Example journal entry entry = Entry() entry.title = "Hello world!" entry.content = "Welcome to the Productivity Helper app! This is an example Journal entry, which you are free to edit or delete." entry.author = request.user entry.published_date = timezone.now() entry.save() return redirect('todos:home') else: return render(request, 'accounts/signup.html', {'error': 'Passwords did not match'}) else: return render(request, 'accounts/signup.html')