コード例 #1
0
ファイル: gaedocstore.py プロジェクト: abelenki/gaedocstore
                def ExpandLinkedDict(aSourceDict):                
                    aTarget = {}
                    aTarget["key"] = aSourceDict["key"]
                    
                    llinkkeyid = aSourceDict["key"]
                    
                    aLinksList.append(llinkkeyid)
                    
                    llinkobj = None
                    if llinkkeyid:
                        llinkkey = Key(GDSDocument, llinkkeyid)
                        llinkobj = llinkkey.get()
                    
                    if llinkobj:
                        # we have a linked object. Populate aTarget with values from the linked object.
                        llinkdict = llinkobj.to_dict()

                        # do transform if ther is one
                        ltransform = GDSDocument.GetbOTLTransform(lkey)
                        if ltransform:
                            llinkdict = bOTL.Transform(llinkdict, ltransform)
                        
                        if "key" in llinkdict:
                            del llinkdict["key"]
                        aTarget.update(llinkdict)
                    else:
                        aTarget["link_missing"] = True

                    return aTarget
コード例 #2
0
ファイル: decorators.py プロジェクト: motord/1742834685
 def decorated_view(*args, **kwargs):
     if request.method=='POST':
         code=request.form['code']
         message=request.form['message']
         url=request.form['url']
         time=request.form['time']
         # sign=request.form['sign']
     else:
         code=request.args['code']
         message=request.args['message']
         url=request.args['url']
         time=request.args['time']
         # sign=request.args['sign']
     logging.info(url)
     m = re.match(r'/(.*)/(.*)\.(.*)', url)
     if m:
         key=m.group(2)
         v=memcache.get(key)
         if v and v==url:
             logging.info('bump')
         else:
             campaign=Key(urlsafe=m.group(1)).get()
             qrcode=Key(urlsafe=key).get()
             suffix=m.group(3)
             qrcode.redirect=UPYUN_URL.format(UPYUN_BUCKET, m.group(1), m.group(2), suffix)
             qrcode.target=TARGET_CDN
             qrcode.put()
             memcache.set(key, url)
         kwargs['key']=key
     return func(*args, **kwargs)
コード例 #3
0
class ConferenceRoom:
    def __init__(self, kwargs):
        self.args = kwargs
#         self.room = getModel('conferencerooms', kwargs)
        Id = kwargs.get('id', None)
        if (Id == None) or (len(Id.strip()) == 0):
            self.room = conferencerooms()
        else:
            self.room = Key("conferencerooms", int(Id)).get()
        
    def create(self):
        room = self.args.get('room', None)
        if (room != None) or (len(room.strip()) > 0):
            self.room.room = room
            self.room.put()
            return {'id' : str(self.room.key.id())}
        else:
            return {'error' : 'room name cannot be null / empty'}
    
    def list(self):
        return self.room.query()
    
    def update(self):
        self.room.room = self.args.get('roomname', self.room.room)
        self.room.put()
         
    def delete(self):
        self.room.key.delete()
コード例 #4
0
def get_user(user_id):
    user_key = Key(User, user_id)
    user = user_key.get()

    if not user:
        return 'User not found!', 404

    return jsonify(_to_dict(user))
コード例 #5
0
ファイル: worker.py プロジェクト: studyindenmark/clerkster
  def fetch_page(self):
    key = Key(urlsafe=self.request.get('key'))
    page = key.get()

    fetch_feed(page)
    fetch_threads(page)

    page.last_fetched = datetime.now()
    page.put()
コード例 #6
0
    def get(email):

        """
        Obtiene la autorización pendiente correspondiente al buzón dado.
        :param email: Usuario del buzón.
        :return: La aurotización obtenido.
        """

        entity = Key(PendingAuthorizationDao, str(email)).get()
        return None if entity is None else entity.to_dict()
コード例 #7
0
ファイル: main.py プロジェクト: ligthyear/mihats
 def _get_profile(self, params):
     try:
         profile_name = params.get("profile_name").lower()
         if not profile_name:
             raise ValueError()
         key = Key(models.Profile, profile_name)
         model = key.get()
         if not model:
             raise ValueError()
         return model
     except (KeyError, ValueError):
         raise webapp2.abort(404, "Profile not found")
コード例 #8
0
 def get(self, test_key):
     survey = Key(urlsafe=test_key).get()
     self.response.out.write(json.dumps({'code': survey.key.urlsafe(), 
                                         'script': survey.script,
                                         'text': yaml.safe_dump(survey.to_json(),
                                                                encoding='utf-8',
                                                                allow_unicode=True,
                                                                default_flow_style=False),
                                         'resources': yaml.safe_dump(survey.resource,
                                                                     encoding='utf-8',
                                                                     allow_unicode=True, default_flow_style=False)
                                         }))
コード例 #9
0
ファイル: base_tests.py プロジェクト: felipevolpone/gaeforms
    def test_normalization_wit_kind(self):
        class ModelMock(Model):
            pass

        key = Key(ModelMock, 1)

        field = KeyField(ModelMock)
        self.assertIsNone(field.normalize(None))
        self.assertIsNone(field.normalize(''))
        self.assertEqual(key, field.normalize(key))
        self.assertEqual(key, field.normalize(key.urlsafe()))
        self.assertEqual(key, field.normalize('1'))
        self.assertRaises(Exception, field.normalize, 'abcd')
コード例 #10
0
ファイル: base_tests.py プロジェクト: felipevolpone/gaeforms
    def test_validation_with_kind(self):
        class ModelMock(Model):
            pass

        key = Key(ModelMock, 1)

        field = KeyField(ModelMock)
        self.assertIsNone(field.validate(None))
        self.assertIsNone(field.validate(''))
        self.assertIsNone(field.validate(key))
        self.assertIsNone(field.validate(key.urlsafe()))
        self.assertIsNone(field.validate('1'))
        self.assertEqual('Invalid key', field.validate('abcd'))
コード例 #11
0
ファイル: main.py プロジェクト: cgearhart/Resound-App
    def post(self):
        """
        Find the best matching song id in response to POST requests containing
        a file-like object with valid WAV encoding in the request body by
        correlating hashes and relative offsets from the WAV data with
        previously-computed hash records.
        """
        request_file = self.request.body_file.file
        rate, src_audio = wavfile.read(request_file)
        votes = defaultdict(lambda: 0)

        hashes = list(resound.hashes(src_audio, rate))
        keys = [Key(Hashes, h_id) for h_id, _ in hashes]

        futures = ndb.get_multi_async(keys)
        for (h_id, offset), future in zip(hashes, futures):
            entity = future.get_result()  # wait for response from each key

            if not entity:
                continue

            for song_id, abs_offset in entity.song_list:
                delta = abs_offset - offset
                votes[(song_id, delta)] += 1

        # Find the best match
        max_votes, best_id = 0, None
        p_votes, prev = 0, None
        s_votes, prev_2 = 0, None
        for (song_id, _), vote_count in votes.iteritems():
            if max_votes < vote_count:
                max_votes, p_votes, s_votes = vote_count, max_votes, p_votes
                best_id, prev, prev_2 = song_id, best_id, prev
            elif p_votes < vote_count:
                p_votes, s_votes = vote_count, p_votes
                prev, prev_2 = song_id, prev
            elif s_votes < vote_count:
                s_votes = vote_count
                prev_2 = song_id

        msg = "Best ids:\n1. {} - {}\n2. {} - {}\n3. {} - {}"
        logging.debug(msg.format(best_id, max_votes,
                                 prev, p_votes,
                                 prev_2, s_votes))

        if max_votes > MIN_MATCH_THRESHOLD:
            key = Key(Songs, best_id)
            song = key.get()
            self.response.write(json.dumps({'artist': song.artist,
                                            'title': song.title,
                                            'year': song.year}))
コード例 #12
0
ファイル: track.py プロジェクト: stretchhog/prfit
	def post(self, category_key):
		form = self.get_form(category_key)
		if form.validate_on_submit():
			for changed in set(form.activities.default).symmetric_difference(set(form.activities.data)):
				activity = Key(urlsafe=changed).get()
				if changed in form.activities.data:
					activity.tracked = True
				else:
					activity.tracked = False
				activity.put()
			flash('Update successful', category='success')
			return redirect(api.url_for(Activities, category_key=category_key))
		flash('Update not successful', category='warning')
		return self.response('track/track_activity.html', form, category_key)
コード例 #13
0
 def delete(self, trailId):
     try:
         trail = Key("Trail", long(trailId)).get()
         
         if(trail is not None):
             trail.delete()
             self.response.clear()
             self.response.set_status(200)
         else:
             self.error(404)
             
     except:
         logging.exception("An exception occurred when removing the trail")
         self.error(500)  
コード例 #14
0
    def post(self):
        user = self.validate_user()
        if user is not None:
            self.redirect('/')
            return

        form = RegisterForm(self.request.params)

        # validate form
        if not form.validate():
            self.r(form)
            return

        # validate csrf
        if not self.validate_csrf(form.csrf_token.data):
            form.csrf_token.data = self.generate_csrf()
            self.r(form, flashes=flash('Please submit the form again'))
            return

        # check for an existing account
        # using the lowercase username as a key
        # to ensure users are unique
        username = form.username.data
        username = re.sub(r'[\!\@\#\$\%\^\&\*\-_=\+\?<>,\.\"\':;\{\}\[\]|\\~\/`]', '', username)

        try:
            user = Key("User", lower(username)).get()
        except:
            user = None

        if user is not None:
            self.r(form, flashes=flash('That username is taken'))
            return

        # create the user
        try:
            user = User(
                username=username,
                password=pw.gen_hash(form.password.data),
            )
            user.key = Key("User", lower(user.username))
            user.put()
            # create a hash with our secret so we know the cookie is legit later
            self.generate_sig(user.username)
            self.redirect('/?welcome=%s' % user.username)
            return
        except:  # guess something happened eh?
            self.r(form, flashes=flash())
            return
コード例 #15
0
 def __init__(self, currentUser, Id = None):
     self.currentUser = currentUser
     if (Id == None) or (len(Id.strip()) == 0):
         self.identity = identities()
     else:
         self.identity = Key('identities',int(Id)).get()
     self.history = identityHistory()
コード例 #16
0
ファイル: pos.py プロジェクト: mrngm/tantalus
def addposproduct():
    form = request.json

    if request.method == "POST":
        try:
            pos = PosProduct(price=form["price"],
                             scan_id=form.get("scan_id", ""),
                             keycode=form.get("keycode", ""))

            if 'product' in form:
                prd = Key("Product",
                          form['product'],
                          parent=TypeGroup.product_ancestor()).get()
                if prd is None:
                    raise BadValueError("Product does not exist.")
                pos.product = prd.key
                pos.name = prd.contenttype
            elif 'name' in form:
                if len(form['name']) < 1:
                    raise BadValueError("Name too short!")
                pos.name = form['name']
            else:
                raise BadValueError("Need to specify either product or name!")
            pos.put()
        except (BadValueError, KeyError) as e:
            return jsonify({"messages": [e.message]}, 400)
        return jsonify(pos)

    return render_template(
        'tantalus_posproduct.html',
        products=Product.query(Product.hidden == False).order(
            Product.contenttype).fetch())
コード例 #17
0
ファイル: gaedocstore.py プロジェクト: paulogr/gaedocstore
    def _objectToGDSDocument(aSource, aBaseGDSDocument = None):
        retval = None
        if IsDict(aSource):
            if aBaseGDSDocument:
                retval = aBaseGDSDocument
            else:
                retval = GDSDocument()
                
            for lkey, lvalue in aSource.iteritems():
                if lkey == "key":
                    retval.key = Key(GDSDocument, lvalue)
                else:
                    lchildBaseDocument = None
                    if aBaseGDSDocument and IsDict(aBaseGDSDocument) and lkey in aBaseGDSDocument:
                        lchildBaseDocument = aBaseGDSDocument[lkey]
                    lconvertedValue = _objectToGDSDocument(lvalue, lchildBaseDocument)

                    retval.populate(**{lkey: lconvertedValue})
                            
        elif IsList(aSource):
            if IsListOfSimpleValues(aSource):
                retval = aSource
            else:
                retval = GDSJson(json = aSource)
        else:
            lneedTextBlob = isinstance(aSource, (str, unicode)) and sys.getsizeof(aSource) >= 500 
            
            if lneedTextBlob:
                retval = GDSTextBlobWrapper(text = aSource)
            else:
                retval = aSource
        return retval
コード例 #18
0
def update_user(user_id):
    user_key = Key(User, user_id)
    user = user_key.get()

    lat = random.random() * 180 - 90
    lng = random.random() * 360 - 180

    if not user.location:
        user.location = Location()

    user.location.lat = lat
    user.location.lng = lng

    user.put()

    return jsonify(_to_dict(user))
コード例 #19
0
ファイル: gaedocstore.py プロジェクト: paulogr/gaedocstore
    def ConstructFromDict(cls, aDict, aReplace=True):
        aDenormalizedDict = UpdateDenormalizedObjectLinking(aDict)
        
        
        if aReplace:
            retval = DictToGDSDocument(aDenormalizedDict)
        else:
            lgdsDocument = None
            if aDict and IsDict(aDict) and "key" in aDict:
                lkeyid = aDict["key"]
                lkey = Key(GDSDocument, lkeyid)
                lgdsDocument = lkey.get()

            retval = DictToGDSDocument(aDenormalizedDict, lgdsDocument)
        
        return retval
コード例 #20
0
ファイル: profile.py プロジェクト: Ramesh7128/udacityplus
    def post(self, username):
        fields = self.get_params_dict((
            'real_name',
            'email',
            'short_about',
            'dob',
            'tools',
            'password',
            'password_confirm',
            'notify_on_msg'
            ))

        iclasses = self.request.get_all('classes_inprog')
        cclasses = self.request.get_all('classes_completed')
        fields['iclasses'] = iclasses
        fields['cclasses'] = cclasses
        fields['username'] = username

        user = Key(User, username).get()

        errors = self.clean_user_data(user, **fields)

        context = {
            'errors': errors,
            'user': user
        }

        if not errors:
            user.update(**fields)
            self.redirect('/{}'.format(username))
        else:

            if user.dob:
                dob = user.dob.strftime('%m/%d/%Y')
            else:
                dob = None
            all, ic, cc = self.organize_courses_for(user)
            context['courses_all'] = Course.courses_to_dict()
            context['courses_completed'] = cc
            context['courses_incomplete'] = ic
            context['dob'] = dob
            context['username'] = username
            context['gravatar'] = user.avatar_url
            context['friends'] = []
            context['friend_btn'] = False
            context['errors'] = errors
            self.render('profile/edit.html'.format(username), context)
コード例 #21
0
	def post(self):
		
		response = self.request.get('response')
		question = Key(urlsafe = self.session.get('question_key')).get()
		accountname = self.session.get('account')
		accounttype = self.session.get('accounttype')
		classname = self.session.get('class')
		categoryname = self.request.get('cname')
		
		new_cname = self.request.get('new_cname')
		
		if self.validate_user(accountname, accounttype = ADMIN):
			#user is logged in as accountname qand accounttype is ADMIN
			user = User.query(User.username == accountname).fetch()[0]
			classes = Class.query(Class.classname == classname).fetch()
			if len(classes) == 1:
				classy = classes[0]
				
				if self.request.get('add_to_category') == '1' and categoryname != '':
				
					if categoryname == 'Default' and new_cname != '':
						categoryname = new_cname
						
					category = Category.query(Category.name == categoryname, ancestor=classy.key).fetch()
					if len(category) == 1:
						category = category[0]
					elif len(category) == 0:
						category = Category(name=categoryname, parent=classy.key)
						category.put()
						time.sleep(2)
					else:
						category = None
					if category != None:
						question.category = category.key
				if question.respond_question(user.key, response)==1:
					self.session.pop('class')
					self.session.pop('question_key')
					super(ResponseHandler, self).success_redirect('RSUBMIT_SUCCESS', '/instructorhomepage')
				else:
					super(ResponseHandler, self).error_redirect('RSUBMIT_FAIL', '/instructorhomepage')
			else:
				super(ResponseHandler, self).error_redirect('CLASS_NOT_FOUND', '/instructorhomepage')
		else:		
			super(ResponseHandler, self).error_redirect('INVALID_LOGIN_STATE', '/')
			
#	def respond_question_wrapper(self, response, question, accountname, accounttype, classname, categoryname, new_cname):
#		return 0
コード例 #22
0
    def __init__(self, kwargs):
        self.args = kwargs
#         self.skejule = getModel('schedule', kwargs)
        Id = kwargs.get('id', None)
        if (Id == None) or (len(Id.strip()) == 0):
            self.skejule = schedule()
        else:
            self.skejule = Key("schedule" ,int(Id)).get()
コード例 #23
0
    def __init__(self, kwargs):
        self.args = kwargs
#         self.room = getModel('conferencerooms', kwargs)
        Id = kwargs.get('id', None)
        if (Id == None) or (len(Id.strip()) == 0):
            self.room = conferencerooms()
        else:
            self.room = Key("conferencerooms", int(Id)).get()
コード例 #24
0
    def get(self, request, key):
        text = Key(urlsafe=key).get()
        if not text:
            return HttpResponseNotFound()

        if not text.password and self._has_read_permission(text):
            return self._render_image(text)
        return HttpResponseForbidden()
コード例 #25
0
    def post(self):
        user_key = Key('User', self.session.get('user_key_id'))
        user_obj = user_key.get()

        self.session['dp_url'] = self.request.get('dp_url')
        self.session['email'] = self.request.get('email')
        self.session['f_name'] = self.request.get('first_name')
        self.session['l_name'] = self.request.get('last_name')

        user_obj.dp_url = self.request.get('dp_url')
        user_obj.email = self.request.get('email')
        user_obj.first_name = self.request.get('first_name')
        user_obj.last_name = self.request.get('last_name')
        user_obj.put()

        time.sleep(0.1)
        self.redirect('/profile')
コード例 #26
0
    def addActivity(self, request):
        #todo refactor , try optimize

        if (request.id):
            activityKey = Key(urlsafe=request.id)
            activity = activityKey.get()
            oldActivityCode = activity.code
            activity.code = request.code
            activity.name = request.name
            activity.tags = request.tags
            activity.defaultEventValue = request.defaultEventValue
            activity.thumbUrl = request.thumbUrl
            activity.put()

            #update existed items
            if (oldActivityCode != request.code):
                deferred.defer(update_events.UpdateEventActivityName,
                               users.get_current_user(), oldActivityCode,
                               request.code)

            return activityToMessage(activity)
        else:
            activityIter = Activity.query(
                ndb.AND(Activity.actor == users.get_current_user(),
                        Activity.code == request.code), ).iter(keys_only=True)

            if (activityIter.has_next()):
                activity = activityIter.next()
                activity.code = request.code
                activity.name = request.name
                activity.tags = request.tags
                activity.defaultEventValue = request.defaultEventValue
                activity.thumbUrl = request.thumbUrl
                activity.put()
                return activityToMessage(activity)
            else:
                activity = Activity(
                    actor=users.get_current_user(),
                    defaultEventValue=request.defaultEventValue,
                    name=request.name,
                    code=request.code,
                    tags=request.tags,
                    thumbUrl=request.thumbUrl)
                activity.put()
                return activityToMessage(activity)
コード例 #27
0
 def update(self, request):
     startedEvent = Key(urlsafe=request.id).get()
     startedEvent.startTime = parseMsgTime(request.startTime)
     startedEvent.eventValue = request.eventValue
     startedEvent.activityCode = request.activityCode
     startedEvent.put()
     return (request)
コード例 #28
0
 def tween(request):
     branch = None
     m = match("/sede/([a-z]+)/.*", request.path)
     if m:
         branch = Key("Branch", m.group(1)).get()
         if not branch:
             return HTTPNotFound()
     request.branch = _session.branch = branch
     return handler(request)
コード例 #29
0
def addproduct():
    form = request.json

    if request.method == "POST":
        group = Group.query(Group.name == form['group']).fetch(1)
        if len(group) == 0:
            if form.get('group', '') != '':
                group = Group(name=form['group'])
                group.put()
            else:
                return abort(403)
        else:
            group = group[0]

        try:
            name = form.get('name') or form.get('contenttype')
            if len(Product.query(Product.contenttype == name).fetch()):
                raise BadValueError("A product with this name already exists.")

            losemods = [Key("Mod", id, parent=TypeGroup.product_ancestor()) for id in (form.get('losemods') or [])]
            for mod in losemods:
                if mod.get() is None:
                    raise BadValueError("Mod {} does not exists.".format(mod))

            gainmods = [Key("Mod", id, parent=TypeGroup.product_ancestor()) for id in (form.get('gainmods') or [])]
            for mod in gainmods:
                if mod.get() is None:
                    raise BadValueError("Mod {} does not exists.".format(mod))

            product = Product(
                contenttype=name,
                tag=form.get('tag', ''),
                group=group.key,
                amount=form.get('amount', 0),
                value=form.get('value', 0),
                hidden=False,
                losemods=losemods,
                gainmods=gainmods
            ).put()
        except (BadValueError, KeyError) as e:
            return jsonify({"messages": [e.message]}, 400)
        return jsonify(product)

    return render_template('tantalus_product.html', mods=Mod.query().fetch())
コード例 #30
0
ファイル: history.py プロジェクト: jwelker110/yahtzee-api
    def roll_history(self, request):
        """
        JWT required. Retrieves user's roll history for the provided game
        """
        game_key = request.game_key
        payload = token.decode_jwt(request.jwt_token)

        try:
            game = Key(urlsafe=game_key)
            user = Key(urlsafe=payload.get('user_key'))
        except TypeError:
            raise endpoints.BadRequestException(
                'key was unable to be retrieved')
        except ProtocolBufferDecodeError:
            raise endpoints.BadRequestException(
                'key was unable to be retrieved')
        except Exception as e:
            raise endpoints.InternalServerErrorException(
                'An error occurred when retrieving roll history')

        turncard = TurnCard.query(TurnCard.owner == user,
                                  TurnCard.game == game).get()
        if turncard is None:
            raise endpoints.BadRequestException(
                'There are no turns associated with that turncard')
        turns = []
        for turn in turncard.turns:
            turn = turn.get()
            turns.append({
                "roll_one": turn.roll_one,
                "roll_two": turn.roll_two,
                "roll_three": turn.roll_three,
                "allocated_to": turn.allocated_to,
                "date_completed": turn.date_completed.isoformat()
            })

        return UserRollHistoryResponseForm(rolls=[
            UserRollHistory(roll_one=turn['roll_one'],
                            roll_two=turn['roll_two'],
                            roll_three=turn['roll_three'],
                            allocated_to=turn['allocated_to'],
                            date_completed=turn['date_completed'])
            for turn in turns
        ])
コード例 #31
0
ファイル: Admin.py プロジェクト: dthung1602/Money-Calculation
    def get_person_info(self):
        try:
            key = Key(urlsafe=self.request.get("key"))
            person = key.get()

            # get total spend
            months = list(Month.query().filter(Month.people == key).fetch())
            total_spend = sum(month.average for month in months) * 1000

            # get payments made for every one
            money_usages = list(
                MoneyUsage.query().filter(MoneyUsage.person == key).fetch())
            payment = sum(money_usage.money_spend
                          for money_usage in money_usages) * 1000

            # last month
            if person.last_money_usage:
                last_money_usage = person.last_money_usage.get()
                last_month = last_money_usage.month.get()

                last_month_str = last_month.to_string_long()
                next_month_left = last_money_usage.next_month_left * 1000
                in_current_month = last_month.key == Month.get_current_month_key(
                )
            else:
                last_month_str = next_month_left = in_current_month = "N/A"

            # write
            s = ";".join(
                map(unicode, [
                    person.name,
                    key.id(), total_spend,
                    len(months), payment, last_month_str, next_month_left,
                    in_current_month
                ]))
            self.write(s)

        except Exception as e:
            print(e)
            self.response.status = 409
            self.write(
                "Can not resolve this buyer's key. Please reload this page or try again later"
            )
コード例 #32
0
 def read(self, request):
     if (request.id):
         return activityToMessage(Key(urlsafe=request.id).get())
     else:
         if (request.code):
             activity = Activity.query(
                 Activity.code == request.code,
                 Activity.actor == users.get_current_user()).fetch(1)[0]
             return activityToMessage(activity)
     return None  #todo throw error
コード例 #33
0
ファイル: pos.py プロジェクト: mrngm/tantalus
def sell():
    sale = request.json
    if not sale:
        return jsonify({"messages": ["No JSON supplied."]}, 400)

    try:
        prd = Key("PosProduct",
                  sale["product"],
                  parent=TypeGroup.product_ancestor())
        if prd.get() is None:
            raise BadValueError("Product does not exist")

        possale = PosSale(user=current_user.key,
                          product=prd,
                          amount=sale.get('amount', 1))
        possale.put()
    except (BadValueError, KeyError) as e:
        return jsonify({"messages": [e.message]}, 400)
    return jsonify(possale)
コード例 #34
0
ファイル: transaction.py プロジェクト: mrngm/tantalus
def resend(transaction_id):
    transaction = Key("Transaction", transaction_id, parent=TypeGroup.transaction_ancestor()).get()

    if transaction is None:
        return abort(404)

    taskqueue.add(url='/invoice',
                  target='worker',
                  params={'transaction': transaction.key.id()})
    return redirect(url_for(".showtransaction", transaction_id=transaction_id))
コード例 #35
0
 def get(self, month_key):
     """Get month info and render html"""
     try:
         month = Key(urlsafe=month_key).get()
         if month is None:
             raise ValueError
     except:
         self.error(404)
     else:
         self.render_month(month)
コード例 #36
0
    def get(self, request, key):
        text = Key(urlsafe=key).get()
        if not text:
            return HttpResponseNotFound()

        if not text.password and self._has_read_permission(text):
            return self._render_to_plane_text_response(text.text)
        elif not self._is_public(text):
            return self._to_login(urllib.quote_plus('plaintext/' + key))
        return HttpResponseForbidden()
コード例 #37
0
    def post(self, user):
        # grab the form
        form = PostDeleteForm(self.request.params)

        # validate csrf
        if not self.validate_csrf(form.csrf_token.data):
            form.csrf_token.data = self.generate_csrf()
            self.r(form, flashes=flash('Please submit the form again.'))
            return

        # get the post please
        try:
            post = Key(urlsafe=form.key.data).get()
        except:
            post = None

        # as usual, this really shouldn't
        # be None unless unnatural navigation
        if post is None:
            self.redirect('/')
            return

        # the post exists, is it owned by the user?
        if post.author != user:
            self.redirect('/')
            return

        # check if the user is the owner or not
        if post.author != user:
            self.redirect('/')
            return

        # everything checks out so let's remove the post
        # first though, we need to remove the comments
        # assoc with the post and the likes
        # TODO query these entities to make sure they are removed
        comments = Comment.query(ancestor=post.key).fetch()
        ks = put_multi(comments)
        delete_multi(ks)

        likes = Like.query(Like.post == post.key).fetch()
        ks = put_multi(likes)
        delete_multi(ks)

        # got everything else removed, let's
        # remove the post
        try:
            post.key.delete()
            self.redirect('/')
            return
        except Exception as e:
            # let them try again
            form.csrf_token.data = self.generate_csrf()
            self.r(form, post, flashes=flash())
            return
コード例 #38
0
ファイル: endpoints_api.py プロジェクト: chirayuk/ng-dash
 def recreate_api_user(self, api_user):
   auth.ensure_recognized_user(require_admin=True)
   if not api_user.email:
     raise Error("recreate_api_user: E-mail cannot be blank")
   db_key = Key(models.ApiUserModel, api_user.email)
   api_user_model = db_key.get()
   if api_user_model:
     if (api_user.secret and
         api_user_model.msg.secret != api_user.secret):
       raise Error("Can't set a custom secret. If you want a new one, just clear it and the server will generate a new one for you.")
   else:
     api_user_model = models.ApiUserModel(msg=api_user)
     api_user_model.key = db_key
   secret = api_user.secret
   if not api_user.secret:
     print("ckck: temp new token=" + auth.create_secret_token())
     api_user_model.msg.secret = auth.create_secret_token()
     print("ckck: new secret = " + api_user_model.msg.secret)
   api_user_model.put()
   return api_user_model.msg
コード例 #39
0
    def post(self, user):
        # grab the form
        form = CommentForm(self.request.params)

        if not form.validate():
            form.csrf_token.data = self.generate_csrf()
            self.r(form)
            return

        # get the comment
        try:
            comment = Key(urlsafe=form.key.data).get()
        except:
            # invalid key
            comment = None

        if comment is None:
            self.redirect('/')
            return

        if comment.author != user:
            self.redirect('/')
            return

        # better be a post here or else!
        post = comment.key.parent().get()
        if post is None:
            self.redirect('/')
            return

        # update the comment
        try:
            comment.content = form.comment.data
            comment.put()
            self.redirect('/post/view?key=%s' % post.key.urlsafe())
            return
        except:
            # let's give them another chance
            form.csrf_token.data = self.generate_csrf()
            self.r(form, flashes=flash())
            return
コード例 #40
0
ファイル: relation.py プロジェクト: mrngm/tantalus
def editrelation(relation_id):
    form = request.json or request.form

    relation = Key("Relation",
                   relation_id,
                   parent=TypeGroup.relation_ancestor()).get()

    if request.method == "POST":
        relation.name = form.get('name', relation.name)
        relation.email = form.get('email', relation.email)
        relation.budget = form.get('budget', relation.budget)
        relation.has_budget = form.get('has_budget', relation.has_budget)
        relation.send_mail = form.get('send_mail', relation.send_mail)
        relation.put()
        return jsonify(relation)

    return render_template('tantalus_relation.html', relation=relation)
コード例 #41
0
ファイル: edit.py プロジェクト: jwelker110/multi-user-blog
    def post(self, user):
        # grab the form
        form = CommentForm(self.request.params)

        if not form.validate():
            form.csrf_token.data = self.generate_csrf()
            self.r(form)
            return

        # get the comment
        try:
            comment = Key(urlsafe=form.key.data).get()
        except:
            # invalid key
            comment = None

        if comment is None:
            self.redirect('/')
            return

        if comment.author != user:
            self.redirect('/')
            return

        # better be a post here or else!
        post = comment.key.parent().get()
        if post is None:
            self.redirect('/')
            return

        # update the comment
        try:
            comment.content = form.comment.data
            comment.put()
            self.redirect('/post/view?key=%s' % post.key.urlsafe())
            return
        except:
            # let's give them another chance
            form.csrf_token.data = self.generate_csrf()
            self.r(form, flashes=flash())
            return
コード例 #42
0
ファイル: main.py プロジェクト: rookie/Resound-App
    def get(self, song_id=None):
        """
        Render the song lookup response page based on the urlsafe id parameter
        """
        template = JINJA_ENV.get_template('song.html')
        params = {}
        logging.info("Get song: {}".format(song_id))

        if not song_id:
            logging.debug("Blank id parameter.")
            params = {"msg": "Sorry! No match found."}
        else:
            song_key = Key(urlsafe=song_id)
            if song_key.id():
                params = {"song": song_key.get()}
                logging.debug("song key: {}\nsong: {}".format(
                    str(song_key), params["song"]))
            else:
                params = {"msg": "Invalid song ID."}

        self.response.write(template.render(**params))
コード例 #43
0
 def get(self, trailId): 
     trail = Key("Trail", long(trailId)).get()
     if(trail is not None):
         if(self.request.get("remote") and self.request.get("callback")):
             #If the client provides a "callback" argument, then we assume we have a JSONP call.
             jsonpContent = self.request.get("callback") + "(" + trail.toJson() + ")"
             self.response.headers["Content-Type"] = "text/javascript"
             self.response.out.write(jsonpContent)
         elif(self.request.headers['accept'] in ["application/json", "text/json"]): 
             #If the client requests json them encode the trail as JSON and send it over the wire
             self.response.headers["Content-Type"] = "application/json"
             self.response.out.write(trail.toJson())
         else:
             #otherwise, render the default view
             path = os.path.join('default/', 'trail.html')
             uploadUrlStr = '/trail/' + str(trail.key.id)
             uploadUrl = blobstore.create_upload_url(uploadUrlStr)
             context = {'trail': trail, 'jsonTrail': trail.toJson(), 'logoutUrl': users.create_logout_url("/"), 'uploadUrl': uploadUrl}
             self.render_template(path, **context)
     else:
         self.error(404)
コード例 #44
0
    def add_course(self, **kwargs):
        source = kwargs['source']
        parent = Key(Source, source)

        kwargs['source'] = parent
        kn = self.centid(source, kwargs['dept'], kwargs['number'])
        kwargs['number'] = int(kwargs['number'])

        # remove if a new course added
        memcache.delete('courses_by_level_cid', namespace='udacityplus')

        return Course.get_or_insert(kn, **kwargs)
コード例 #45
0
ファイル: main.py プロジェクト: cgearhart/Resound-App
    def get(self, song_id=None):
        """
        Render the song lookup response page based on the urlsafe id parameter
        """
        template = JINJA_ENV.get_template('song.html')
        params = {}
        logging.info("Get song: {}".format(song_id))

        if not song_id:
            logging.debug("Blank id parameter.")
            params = {"msg": "Sorry! No match found."}
        else:
            song_key = Key(urlsafe=song_id)
            if song_key.id():
                params = {"song": song_key.get()}
                logging.debug("song key: {}\nsong: {}".format(str(song_key),
                                                              params["song"]))
            else:
                params = {"msg": "Invalid song ID."}

        self.response.write(template.render(**params))
コード例 #46
0
    def post(self, user):
        # grab the form
        form = LikeForm(self.request.params)
        username = user

        # grab the user (for their key)
        user = User.query(User.username == username).get()

        if user is None:
            self.redirect('/user/login')
            return

        # grab the post via what should be it's key
        try:
            post = Key(urlsafe=form.key.data).get()
        except Exception as e:
            post = None

        if post is None:
            self.redirect('/')
            return

        if user.username == post.author:
            error = 'you can\'t like or unlike you own post'
            self.render("index.html", error=error)
            return

        # is the post liked by this user already?
        try:
            liked = Like.query(Like.owner == user.key,
                               Like.post == Key(urlsafe=form.key.data)).get()
        except Exception as e:
            print e.message
            liked = None

        # let's set the Like entity up and like the post
        try:
            if liked is None:  # hasn't been liked yet
                liked = Like(owner=user.key,
                             post=Key(urlsafe=form.key.data),
                             liked=True)
                liked.put()
            else:
                liked.liked = True if liked.liked is False else False
                liked.put()

            # inc/dec the post likes
            if liked.liked is True:
                post.likes += 1
            else:
                post.likes -= 1

            post.put()
            # go back to the post!
            self.redirect('/post/view?key=%s' % post.key.urlsafe())
            return
        except Exception as e:
            # go back to the post even if we fail to like it
            self.redirect('/post/view?key=%s' % post.key.urlsafe())
            return
コード例 #47
0
ファイル: services.py プロジェクト: chaos-adept/timelyb
 def update(self, request):
     startedEvent = Key(urlsafe = request.id).get()
     startedEvent.startTime = parseMsgTime(request.startTime)
     startedEvent.eventValue = request.eventValue
     startedEvent.activityCode = request.activityCode
     startedEvent.put()
     return (request)
コード例 #48
0
ファイル: Admin.py プロジェクト: dthung1602/Money-Calculation
    def delete_items(self):
        try:
            month = Key(urlsafe=self.request.get("key")).get()
            items_to_del = set(map(int, self.request.get("items").split(",")))

            items = [
                month.items[i]
                for i in set(range(len(month.items))) - items_to_del
            ]

            month.items = items
            month.update()

            # write
            self.write(month.key.urlsafe())

        except Exception as e:
            print(e)
            self.response.status = 409
            self.write(
                "Can not delete item(s) in this month. Please reload this page or try again later"
            )
コード例 #49
0
ファイル: utils.py プロジェクト: maciekrb/mapreduceutils
def parse_model_path(path):
  """ Parses different values of path into a list of tuples """

  if isinstance(path, ndbkey):
    rule = path.pairs()
  elif isinstance(path, dbkey):
    rule = ndbkey.from_old_key(path).pairs()
  elif all(isinstance(p, (tuple, list)) for p in path):
    rule = tuple(path)
  else:
    raise ValueError("Path should be a list of tuples (Model, id/name): {}".format(path))

  return rule
コード例 #50
0
    def add(self, request):

        if (request.id):
            eventKey = Key(urlsafe=request.id)
            event = eventKey.get()
            event.actor = users.get_current_user()
            event.activityCode = (request.activity)
            event.comment = (request.comment)
            event.startTime = parseMsgTime(request.startTime)
            event.endTime = parseMsgTime(request.endTime)
            event.value = request.value
            event.put()
        else:
            event = Event(actor=users.get_current_user(),
                          activityCode=(request.activity),
                          comment=(request.comment),
                          startTime=parseMsgTime(request.startTime),
                          endTime=parseMsgTime(request.endTime),
                          value=request.value)
            event.put()

        return eventToMessage(event)
コード例 #51
0
ファイル: services.py プロジェクト: chaos-adept/timelyb
    def add(self, request):

        if (request.id):
            eventKey = Key(urlsafe = request.id)
            event = eventKey.get()
            event.actor = users.get_current_user()
            event.activityCode = (request.activity)
            event.comment = (request.comment)
            event.startTime = parseMsgTime(request.startTime)
            event.endTime = parseMsgTime(request.endTime)
            event.value = request.value
            event.put()
        else:
            event = Event(
                actor = users.get_current_user(),
                activityCode = (request.activity),
                comment = (request.comment),
                startTime = parseMsgTime(request.startTime), endTime = parseMsgTime(request.endTime),
                value = request.value)
            event.put()

        return eventToMessage(event)
コード例 #52
0
 def recreate_api_user(self, api_user):
     auth.ensure_recognized_user(require_admin=True)
     if not api_user.email:
         raise Error("recreate_api_user: E-mail cannot be blank")
     db_key = Key(models.ApiUserModel, api_user.email)
     api_user_model = db_key.get()
     if api_user_model:
         if (api_user.secret
                 and api_user_model.msg.secret != api_user.secret):
             raise Error(
                 "Can't set a custom secret. If you want a new one, just clear it and the server will generate a new one for you."
             )
     else:
         api_user_model = models.ApiUserModel(msg=api_user)
         api_user_model.key = db_key
     secret = api_user.secret
     if not api_user.secret:
         print("ckck: temp new token=" + auth.create_secret_token())
         api_user_model.msg.secret = auth.create_secret_token()
         print("ckck: new secret = " + api_user_model.msg.secret)
     api_user_model.put()
     return api_user_model.msg
コード例 #53
0
def initialize(request):
    key = Key(Branch, "caba")
    if not key.get():
        Branch(key=key, name=u"Capital").put()
        u_roles = [roles.SECRETARY, roles.ADVISOR]
        User(parent=key,
             name=u"Juan Prueba",
             email="*****@*****.**",
             roles=u_roles).put()
        User(parent=key,
             name=u"Augusto D'Amario",
             email="*****@*****.**",
             roles=u_roles).put()
        User(parent=key,
             name=u"Julio Veronelli",
             email="*****@*****.**",
             roles=u_roles).put()
        User(parent=key,
             name=u"Hernán Acosta",
             email="*****@*****.**",
             roles=u_roles).put()
    return "OK"
コード例 #54
0
ファイル: services.py プロジェクト: chaos-adept/timelyb
    def addActivity(self, request):
        #todo refactor , try optimize

        if (request.id):
            activityKey = Key(urlsafe = request.id)
            activity = activityKey.get()
            oldActivityCode = activity.code
            activity.code = request.code
            activity.name = request.name
            activity.tags = request.tags
            activity.defaultEventValue = request.defaultEventValue
            activity.thumbUrl = request.thumbUrl
            activity.put()

            #update existed items
            if (oldActivityCode != request.code):
                deferred.defer(update_events.UpdateEventActivityName, users.get_current_user(), oldActivityCode, request.code)

            return activityToMessage(activity)
        else:
            activityIter = Activity.query(ndb.AND(
                        Activity.actor == users.get_current_user(),
                        Activity.code == request.code),
                        ).iter(keys_only=True)

            if (activityIter.has_next()):
                activity = activityIter.next()
                activity.code = request.code
                activity.name = request.name
                activity.tags = request.tags
                activity.defaultEventValue = request.defaultEventValue
                activity.thumbUrl = request.thumbUrl
                activity.put()
                return activityToMessage(activity)
            else:
                activity = Activity(actor = users.get_current_user(), defaultEventValue = request.defaultEventValue, name = request.name, code = request.code, tags = request.tags, thumbUrl = request.thumbUrl)
                activity.put()
                return activityToMessage(activity)
コード例 #55
0
ファイル: profile.py プロジェクト: bakwasscoder/udacityplus
    def post(self, username):
        fields = self.get_params_dict(
            ('real_name', 'email', 'short_about', 'dob', 'tools', 'password',
             'password_confirm', 'notify_on_msg'))

        iclasses = self.request.get_all('classes_inprog')
        cclasses = self.request.get_all('classes_completed')
        fields['iclasses'] = iclasses
        fields['cclasses'] = cclasses
        fields['username'] = username

        user = Key(User, username).get()

        errors = self.clean_user_data(user, **fields)

        context = {'errors': errors, 'user': user}

        if not errors:
            user.update(**fields)
            self.redirect('/{}'.format(username))
        else:

            if user.dob:
                dob = user.dob.strftime('%m/%d/%Y')
            else:
                dob = None
            all, ic, cc = self.organize_courses_for(user)
            context['courses_all'] = Course.courses_to_dict()
            context['courses_completed'] = cc
            context['courses_incomplete'] = ic
            context['dob'] = dob
            context['username'] = username
            context['gravatar'] = user.avatar_url
            context['friends'] = []
            context['friend_btn'] = False
            context['errors'] = errors
            self.render('profile/edit.html'.format(username), context)
コード例 #56
0
ファイル: main.py プロジェクト: ligthyear/mihats
    def post(self, params):
        try:
            model = self._get_model(params)
        except Exception:
            pass
        else:
            if model:
                raise webapp2.abort(400, "Profile already exists")

        profile_name = params.get("profile_name").lower()
        email = params.get("email").lower()
        if not profile_name or not email:
            raise ValueError("Please specify 'profile_name' and 'email'.")
        key = Key(models.Profile, profile_name)
        if key.get() is not None:
            raise ValueError("Profile already exists.")

        profile = models.Profile(key=key, owner_email=email, edit_key=uuid4().hex)

        mail.send_mail(sender="Benjamin Kampmann <*****@*****.**>",
              to=email,
              subject="Your miHats Admin Link",
              body="""
Hi there,

thanks for signing up for the miHats Hat-Sharing Webservice.
You can administer it at:

 http://amasoeany.appspot.com/#/{0}/{1}

DON'T share this link!

Best
Ben
""".format(profile_name, profile.edit_key))
        profile.put()
        return {"profile_name": profile_name, "key": profile.edit_key}
コード例 #57
0
    def post(self, user):
        # grab the form
        form = PostForm(self.request.params)

        # check if the person exists in the db or not
        try:
            user = Key("User", lower(user)).get()
        except:
            user = None

        # shouldn't be None if we got this far
        # but check anyway
        if user is None:
            self.invalidate_sig()
            self.redirect('/user/login')
            return

        # validate form
        if not form.validate():
            self.r(form)
            return

        # validate csrf
        if not self.validate_csrf(form.csrf_token.data):
            form.csrf_token.data = self.generate_csrf()
            self.r(form, flashes=flash('Please submit the form again.'))
            return

        t = form.title.data

        try:
            # let's create the post
            post = Post(
                title=t,
                author=user.username,
                author_lower=lower(user.username),
                subject=form.subject.data,
                content=form.content.data
            )
            post.put()
            # maybe they want to create another post?
            self.r(PostForm(data={'csrf_token': self.generate_csrf()}),
                   flashes=flash('Your new post can be viewed <a href="/post/view?key=%s">here</a>.' % post.key.urlsafe(), 'success'))
            return
        except Exception as e:
            # give them another chance
            form.csrf_token.data = self.generate_csrf()
            self.r(form)
            return
コード例 #58
0
    def get(self, request, key):
        if key:
            try:
                text = Key(urlsafe=key).get()
                if not text.password and self._has_read_permission(text):
                    return self._render_to_json_response(self._text2dict(text))
                elif not self._is_public(text):
                    return HttpResponseUnauthorized()
            except:
                return HttpResponseBadRequest()

        email = self._get_current_user_email()
        if not email:
            return HttpResponseUnauthorized()
        return self._render_to_json_response({'user': email})
コード例 #59
0
ファイル: utils.py プロジェクト: jerrico/backend
class MySelfProvider(Provider):

    def __init__(self, *args, **kwargs):
        Provider.__init__(self, *args, **kwargs)
        self.app_access = Key(urlsafe=self.key).get()

    def _set_memcache(self, *args, **kwargs):
        # ignore internal memcache
        pass

    def _signin(self, user):
        state = self.app_access.compile_profile_state(user.user_id, user.device_id)
        user.load_state(state)

    def did(self, user, action, change, **kwargs):
        LogEntry.make(self.app_access.key, user.user_id, user.device_id,
            action=action, quantity=change, **kwargs).put()