コード例 #1
0
    def test_study_group_list(self):
        user = User(username='******',
                    email='*****@*****.**',
                    password='******',
                    first_name="Unit",
                    last_name="Test")
        user.save()
        profile = Profile(user=user, reports=0, user_type=0)
        profile.save()
        c = Client()
        course = Courses(course_number=309,
                         course_department="COM S",
                         course_name="Software Project")
        course.save()
        response = c.post('/api/studygroup/create/',
                          json.dumps({"course_id": 1}),
                          content_type="application/json")
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            StudyGroup.objects.get(course=1).course.course_name,
            'Software Project')
        self.assertEqual(response.content, b'Software Project')

        response = c.post('/api/studygroup/join/',
                          json.dumps({
                              "id": 1,
                              "studygroup_id": 1
                          }),
                          content_type="application/json")
        studentgroup = StudentsStudyGroups.objects.get(
            user=user, group=StudyGroup.objects.get(id=1))
        self.assertEqual(1, studentgroup.user.id)
        self.assertEqual(1, studentgroup.group.id)

        response = c.get('/api/studygroup/list/')
        self.assertJSONEqual(response.content, [{
            "id":
            1,
            "course_department":
            "COM S",
            "course_number":
            309,
            "course_name":
            "Software Project",
            "members": [{
                "id": 1,
                "username": "******",
                "email": "*****@*****.**",
                "first_name": "Unit",
                "last_name": "Test"
            }]
        }])
コード例 #2
0
ファイル: profile.py プロジェクト: Sagelt/dungeon-world-codex
 def get(self, profile_id=None):
   """HTML GET handler.
   
   Check the query parameters for the ID of the profile to be displayed.
   If found, display the user. Otherwise display current user"""
   
   template_values = self.build_template_values()
   
   if profile_id and template_values[handlers.base.PROFILE_KEY] and int(profile_id) == template_values[handlers.base.PROFILE_KEY].key().id():
     template_values['viewed_profile'] = template_values[handlers.base.PROFILE_KEY]
   elif profile_id:
     template_values['viewed_profile'] = Profile.get_by_id(int(profile_id))
   elif template_values[handlers.base.PROFILE_KEY]:
     return self.redirect(self.uri_for("profile", profile_id=template_values[handlers.base.PROFILE_KEY].key().id()))
   else:
     return self.forbidden()
   
   favorites = Vote.all().filter("voter = ", template_values['viewed_profile']).filter("is_up = ", True).fetch(1)
   if favorites:
     template_values['recent_up_monster'] = favorites[0].monster
     
   created =   Monster.get_recent(1, creator=template_values['viewed_profile'], user=template_values[handlers.base.PROFILE_KEY])
   if created:
     template_values['recent_monster'] = created[0]
   template = configuration.site.jinja_environment.get_template('profile/view.html')
   return self.response.write(template.render(template_values))
コード例 #3
0
ファイル: profile.py プロジェクト: Sagelt/dungeon-world-codex
  def get(self):
    """HTML GET handler.
    
    If user if not logged in, send them to login.

    If user is logged in but has no profile, set one up.

    Otherwise, redirect to profile page."""
    
    template_values = self.build_template_values()
    if not template_values[handlers.base.PROFILE_KEY]:
      profile = Profile()
      profile.display_name = "A Person With No Name"
      profile.account = template_values[handlers.base.USER_KEY]
      profile.put()
      template_values[handlers.base.PROFILE_KEY] = profile
      template_values['new'] = True
    template = configuration.site.jinja_environment.get_template('profile/edit.html')
    self.response.write(template.render(template_values))
コード例 #4
0
    def test_join_study_group(self):
        user = User(username='******',
                    email='*****@*****.**',
                    password='******',
                    first_name="Unit",
                    last_name="Test")
        user.save()
        profile = Profile(user=user, reports=0, user_type=0)
        profile.save()
        c = Client()
        course = Courses(course_number=309,
                         course_department="COM S",
                         course_name="Software Project")
        course.save()
        response = c.post('/api/studygroup/create/',
                          json.dumps({"course_id": 1}),
                          content_type="application/json")
        self.assertEqual(response.status_code, 200)
        self.assertEqual(
            StudyGroup.objects.get(course=1).course.course_name,
            'Software Project')
        self.assertEqual(response.content, b'Software Project')

        response = c.post('/api/studygroup/join/',
                          json.dumps({
                              "id": 1,
                              "studygroup_id": 1
                          }),
                          content_type="application/json")
        studentgroup = StudentsStudyGroups.objects.get(
            user=user, group=StudyGroup.objects.get(id=1))
        self.assertEqual(1, studentgroup.user.id)
        self.assertEqual(1, studentgroup.group.id)

        response = c.post('/api/studygroup/join/',
                          json.dumps({
                              "id": 1,
                              "studygroup_id": 1
                          }),
                          content_type="application/json")
        self.assertEqual(response.content,
                         b'You are already a member of this group.')
コード例 #5
0
ファイル: auth.py プロジェクト: Sagelt/dungeon-world-codex
 def get(self):
   """HTML GET handler.
   
   Check login status and redirect appropriately."""
   
   user = users.get_current_user()
   if user:
     profile = Profile.for_user(user)
     if profile:
       self.redirect(self.uri_for('home'))
     else:
       self.redirect(self.uri_for('profile.edit'))
   else:
     self.redirect(users.create_login_url(self.uri_for('login')))
コード例 #6
0
ファイル: views.py プロジェクト: mmorth/CyStudy
def create_user(request):
    """
    Creates a new user. The username, first_name, last_name, email, password, and user_type of the user are passed in from the client as json.

    :param request: The request made from the client.
    :return: An HttpResponse with the username of the user created (used for testing).
    """
    create_username = json.loads(request.body.decode("utf-8"))['username']
    create_first_name = json.loads(request.body.decode("utf-8"))['first_name']
    create_last_name = json.loads(request.body.decode("utf-8"))['last_name']
    create_email = json.loads(request.body.decode("utf-8"))['email']
    create_password = json.loads(request.body.decode("utf-8"))['password']

    new_user = User(username=create_username, first_name=create_first_name, last_name=create_last_name, email=create_email, password=create_password)
    new_user.set_password(new_user.password)

    # user_type = json.loads(request.body.decode("utf-8"))['user_type']

    new_user.save()
    new_profile = Profile(user=new_user, reports=0, user_type=0)
    new_profile.save()

    return HttpResponse(new_user.username)
コード例 #7
0
ファイル: monster.py プロジェクト: Sagelt/dungeon-world-codex
 def get(self, entity_id=None):
   """HTML GET handler.
   
   Check if the user has already voted. If they haven't, -1 the monster.
   Otherwise, error."""
   
   user = users.get_current_user()
   profile = Profile.all().filter("account = ", user).get()
   monster = Monster.get_by_id_safe(int(entity_id), profile)
   
   if (not monster) or (not profile):
     return self.forbidden()
     
   previous_vote = Vote.all().filter("voter = ", profile).filter("monster = ",monster).get()
   if previous_vote and previous_vote.is_up:
     previous_vote.is_up = False
     previous_vote.put()
     
     if monster.downs:
       monster.downs += 1
     else:
       monster.downs = 1
       
     if monster.ups:
       monster.ups -= 1
     else:
       monster.ups = 0
       
     monster.compute_score()
     monster.put()
   elif previous_vote:
     return self.response_set_status(500)
   else:
     vote = Vote()
     vote.voter = profile
     vote.monster = monster
     vote.is_up = False
     vote.put()
     
     if monster.downs:
       monster.downs += 1
     else:
       monster.downs = 1
     monster.compute_score()
     monster.put()
コード例 #8
0
ファイル: profile.py プロジェクト: Sagelt/dungeon-world-codex
 def post(self):
   """HTML POST handler.
   
   Setup profile."""
   user = users.get_current_user()
   if user:
     profile = Profile.for_user(user)
     if not profile:
       profile = Profile()
     profile.display_name = self.request.get('display_name')
     profile.account = user
     profile.put()
     return self.redirect(self.uri_for('profile.me'))
   else:
     return self.redirect(users.create_login_url(self.request.uri))
コード例 #9
0
ファイル: profile.py プロジェクト: Sagelt/dungeon-world-codex
 def get(self, access_code=None):
   """HTML GET handler.
   
   Check the query parameters for the access code and grant access to that
   product."""
   
   user = users.get_current_user()
   profile = Profile.for_user(user)
   if not profile:
     return self.forbidden()
   if not access_code:
     return self.forbidden()
     
   product = Product.get_by_access_code(access_code)
   if not product:
     return self.not_found()
     
   profile.products.append(product.key().id())
   profile.put()
   
   return self.redirect(self.uri_for('profile.edit'))
コード例 #10
0
ファイル: profile.py プロジェクト: Sagelt/dungeon-world-codex
 def get(self, profile_id=None):
   """HTML GET handler.
   
   Renders a response to a GET. Queries monsters to feature and renders
   them to the index.html template. Does not accept any query parameters"""
   
   template_values = self.build_template_values()
   skip = int(self.request.get("skip", default_value=0))
   favoriter = Profile.get_by_id(int(profile_id))
   template_values['favoriter'] = favoriter
   template_values['monsters'] = favoriter.get_favorites(
     10,
     user=template_values[handlers.base.PROFILE_KEY],
     skip=skip)
   
   if len(template_values['monsters']) >= 10:
     template_values['next'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip+10)
     
   if skip >= 10:
     template_values['prev'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip-10)
  
   template = configuration.site.jinja_environment.get_template('monster/all.html')
   self.response.write(template.render(template_values))
コード例 #11
0
ファイル: base.py プロジェクト: Sagelt/dungeon-world-codex
 def build_template_values(self):
   template_values = {}
   template_values[USER_KEY] = users.get_current_user()
   if not template_values[USER_KEY]:
     template_values[LOGIN_URL_KEY] = users.create_login_url(self.uri_for('login'))
     template_values[PROFILE_KEY] = None
   else:
     template_values[PROFILE_KEY] = Profile.for_user(template_values[USER_KEY])
   
   common_urls = {}
   common_urls['home_url'] = self.uri_for('home')
   common_urls['create_url'] = self.uri_for('monster.create')
   common_urls['profile_url'] = self.uri_for('profile.me')
   common_urls['login_url'] = self.uri_for('login')
   common_urls['logout_url'] = self.uri_for('logout')
   common_urls['search_url'] = self.uri_for('search')
   common_urls['product_create_url'] = self.uri_for('product.create')
   common_urls['browse_url'] = self.uri_for('monster.all')
   template_values['common_urls'] = common_urls
   
   format_urls = {}
   format_urls['monster_url'] = self.uri_for('monster', entity_id=r'%d')
   format_urls['monster.edit_url'] = self.uri_for('monster.edit', entity_id=r'%d')
   format_urls['monster.delete_url'] = self.uri_for('monster.delete', entity_id=r'%d')
   format_urls['monster.up_url'] = self.uri_for('monster.upvote', entity_id=r'%d')
   format_urls['monster.down_url'] = self.uri_for('monster.downvote', entity_id=r'%d')
   format_urls['profile'] = self.uri_for('profile', profile_id=r'%d')
   format_urls['product'] = self.uri_for('product', entity_id=r'%d')
   format_urls['product.update'] = self.uri_for('product.update', entity_id=r'%d')
   format_urls['profile.add'] = self.uri_for('profile.add', access_code=r'%s')
   template_values['format_urls'] = format_urls
   
   template_values['licenses'] = configuration.site.licenses
   
   self.template_values = template_values
   return template_values
コード例 #12
0
ファイル: profile.py プロジェクト: Sagelt/dungeon-world-codex
 def get(self, profile_id=None):
   """HTML GET handler.
   
   Renders a response to a GET. Queries monsters to feature and renders
   them. Easy enough, right?"""
   
   template_values = self.build_template_values()
   skip = int(self.request.get("skip", default_value=0))
   creator = Profile.get_by_id(int(profile_id))
   template_values['creator'] = creator
   template_values['monsters'] = Monster.get_recent(
     10,
     creator=creator,
     user=template_values[handlers.base.PROFILE_KEY],
     skip=skip)
   
   if len(template_values['monsters']) >= 10:
     template_values['next'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip+10)
     
   if skip >= 10:
     template_values['prev'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip-10)
  
   template = configuration.site.jinja_environment.get_template('monster/all.html')
   self.response.write(template.render(template_values))