Example #1
0
 def get_keg_or_bust(self, keg_id):
     keg = Keg.get_by_key_name(keg_id)
     if not keg:
         keg = Keg.get(keg_id)
     if not keg:
         raise webob.exc.HTTPNotFound()
     return keg
Example #2
0
 def post(self, keg_id):
     keg = self.get_keg_or_bust(keg_id)
     keg.geo_location.lat = self.request.params.get('latitude',
                                                    keg.geo_location.lat)
     keg.geo_location.lon = self.request.params.get('longitude',
                                                    keg.geo_location.lon)
     keg.photo_url = self.request.params.get('photo_url', keg.photo_url)
     keg_id = self.request.params.get('keg')
     if keg_id:
         keg = Keg.get_by_key_name(keg_id)
         if not keg:
             raise InvalidParameterException(
                 param='keg',
                 value=keg_id,
                 description='The given keg could not be located')
         if keg.empty():
             raise InvalidParameterException(
                 param='keg',
                 value=keg_id,
                 description='The given keg is reported empty')
         query = Keg.all(keys_only=True).filter('keg =', keg)
         keys = [key for key in query]
         if keys and not keg.key() in keys:
             raise InvalidParameterException(
                 param='keg',
                 value=keg_id,
                 description=
                 'The given keg is already associated to another keg')
         keg.put()
         keg.keg = keg.key()
     keg.put()
     webapp2.redirect_to('keg', keg_id=keg_id)
Example #3
0
 def post(self):
     beer_id = self.request.params['beer']
     if Keg.get_by_key_name(name):
         raise Conflict(name, webapp2.uri_for('keg', keg_id=name))
     latitude = self.request.params['latitude']
     longitude = self.request.params['longitude']
     a_keg = Keg(key_name=name, geo_location=db.GeoPt(latitude, longitude))
     a_keg.put()
     webapp2.redirect_to('keg', keg_id=name)
Example #4
0
    def post(self):
        keg_json = request.get_json()

        try:
            keg = Keg(pints=keg_json['pints'],
                      starting_pints=keg_json['starting_pints'],
                      kegerator_ordinal=keg_json['kegerator_ordinal'])

            # TODO: Check for if the count will pass the kegerator max_count value and fail if so
            keg.kegerator = session.query(Kegerator).filter(
                Kegerator.id == int(keg_json['kegerator_id'])).first()
            keg.beer = session.query(Beer).filter(
                Beer.id == int(keg_json['beer_id'])).first()

            if keg.beer and keg.kegerator:
                session.add(keg)
                session.commit()
                return (jsonify(keg.to_json()), 201)
            else:
                return ('Beer or Kegerator not found', 400)
        except Exception as e:
            session.rollback()
            return ('Missing Parameters', 400)
Example #5
0
 def get(self):
    full = self.request.GET.get('full', False)
    limit = self.request.params.get('limit', 20)
    offset = self.request.params.get('offset', 0)
    all_kegs = Keg.all(keys_only=not full)
    total = all_kegs.count(read_policy=db.EVENTUAL_CONSISTENCY, deadline=5)
    payload = [a_keg for a_keg in all_kegs.run(offset=offset, limit=min(limit, total))]
    if not payload:
       raise webob.exc.HTTPNotFound()
    data = {}
    if not full:
       data['kegs'] = [webapp2.uri_for('keg', keg_id=keg.name()) for keg in all_kegs]
    else:
       data['kegs'] = [funcs.convert_model(keg) for keg in all_kegs]
    data['meta'] = funcs.meta_ok()
    self.response.write(json.json.dumps(data))