示例#1
0
    def test_entity_to_dict(self):
        """Converts a datastore.Entity instance to a JSON encodable dict."""

        from datetime import datetime
        from gaesynkit import handlers
        from google.appengine.api import datastore
        from google.appengine.api import datastore_types
        from google.appengine.api import users
        from google.appengine.ext import db

        entity = datastore.Entity("Test")
        entity.update({
            "string": "A string.",
            "byte_string": datastore_types.ByteString("Byte String"),
            "boolean": True,
            "int": 42,
            "float": 1.82,
            "date": datetime(2011, 01, 06),
            "list": [1, 2, 3, 4],
            "key": db.Key.from_path("Kind", "name"),
            "user": users.User("*****@*****.**"),
            "email": db.Email("*****@*****.**"),
            "location": db.GeoPt(52.500556, 13.398889),
            "category": db.Category("coding"),
            "link": db.Link("http://www.google.com"),
            "im": db.IM("sip", "foobar"),
            "phone": db.PhoneNumber("1 (206) 555-1212"),
            "address": db.PostalAddress("Address"),
            "rating": db.Rating(99)
        })
def hook(dct):
    clsType = dct[CLASS_TYPE_STR]
    if clsType == 'date':
        return datetime.date.fromtimestamp(dct[CLASS_VALUE_STR])
    if clsType == 'email':
        return db.Email(dct[CLASS_VALUE_STR])
    if clsType == 'phone':
        return db.PhoneNumber(dct[CLASS_VALUE_STR])
    elif clsType == 'rating':
        return db.Rating(dct[CLASS_VALUE_STR])
    # The constructor can't handle the clsType tag, so delete it!
    dictCopy = dict((key, value) for key, value in dct.iteritems()
                    if not key.startswith('__'))
    return globals()[clsType](**dictCopy).put()
示例#3
0
 def harvest_yelp_reviews(self, social_account):
     """ Harvest yelp reviews and put into data model """
     
     # Build connector
     yelp_connector = connectors.yelp.YelpConnector()        
     
     last_review_date = None
     review_id_list = []
     
     # Get most recent review date
     q = datamodel.SocialReview.gql('WHERE social_account = :1 ORDER BY review_date DESC LIMIT 1', social_account)
     
     
     last_social_review = q.get()
     
     # Do we have data... then pull from last post
     if last_social_review:
         last_review_date = last_social_review.review_date
         
         # Load reviews on that review_date so we can check to see if we reloaded them in this last harvest
         q = db.GqlQuery("SELECT __key__ FROM SocialReview WHERE social_account = :1 AND review_date = :2", social_account, last_review_date)
         for review_key in q:
             review_id_list.append(datamodel.SocialReview.get(review_key).social_account_item_id)
         
         
     # Call Yelp
     review_list = yelp_connector.get_reviews(social_account.user_id, last_review_date)
     
     # Iterate through and store in db... lets check against 
     for review in review_list:
     
         if (review.review_id not in review_id_list):
             
             social_review = datamodel.SocialReview(user = social_account.user,
                                                    social_account = social_account,
                                                    social_account_item_id = review.review_id,
                                                    full_business_name = review.business_name,
                                                    business_address = db.PostalAddress(review.business_address),
                                                    social_account_business_id = review.business_id,
                                                    review_rating = db.Rating(review.rating*4),
                                                    review_date = review.review_date,
                                                    review_text = review.review)
             
             # Build category list
             for c in review.category_list:
                 social_review.business_category_list.append(c)
             
             social_review.put()
    def post(self):
        self.log.info(self.request.POST)
        if self.request.get('winery_submit'):
            m = self.toTime(self.request.get('monday'))
            t = self.toTime(self.request.get('tuesday'))
            w = self.toTime(self.request.get('wednesday'))
            th = self.toTime(self.request.get('thursday'))
            f = self.toTime(self.request.get('friday'))
            s = self.toTime(self.request.get('saturday'))
            su = self.toTime(self.request.get('sunday'))
            h = WeeklyHours(monday=m,
                            tuesday=t,
                            wednesday=w,
                            thursday=th,
                            friday=f,
                            saturday=s,
                            sunday=su).put()

            lat_long = self.request.get('location').split(',')
            loc = db.GeoPt(float(lat_long[0].strip()),
                           float(lat_long[1].strip()))

            blb = db.Blob(self.request.get('picture').encode('base64'))

            Winery(name=self.request.get('name'),
                   description=self.request.get('description'),
                   email=self.request.get('email'),
                   phone=self.request.get('phone'),
                   location=loc,
                   hours=h,
                   image=blb,
                   address=db.PostalAddress(self.request.get('address')),
                   rating=db.Rating(int(self.request.get('rating')))).put()
        else:
            wineryKey = db.Key.from_path('Winery',
                                         int(self.request.get("winery_id")))
            sdate = datetime.datetime.strptime(self.request.get("start_date"),
                                               '%Y/%m/%d')
            edate = datetime.datetime.strptime(self.request.get("end_date"),
                                               '%Y/%m/%d')
            Event(name=self.request.get("name"),
                  description=self.request.get("description"),
                  winery=wineryKey,
                  startDate=sdate,
                  startTime=self.request.get("start_time").strip(),
                  endDate=edate,
                  endTime=self.request.get("end_time").strip()).put()
        self.redirect('/')
示例#5
0
    def HandleRequest(self):
        template_data = {
            'logout_url': users.create_logout_url("/"),
            'message': '',
        }

        responder = common.LookupModelFromRequest(self.request)
        rating = self.request.get('rating')
        if responder is not None and rating is not None:
            rating_int = StringToInt(rating, False)
            if rating_int >= 0 and rating_int <= 100:
                template_data['message'] = (
                    'Set rating of %s to %d' %
                    (responder.model_description, rating_int))
                responder.rdm_responder_rating = db.Rating(rating_int)
                responder.put()

        self.response.headers['Content-Type'] = 'text/html'
        self.response.out.write(
            template.render('templates/admin-adjust-test-score.tmpl',
                            template_data))
示例#6
0
    datetime=d,
    date=d.date(),
    time=d.time(),
    list=[1, 2, 3],
    strlist=["hello", u'world'],
    user=users.User("*****@*****.**"),
    blob=db.Blob("somerandomdata"),
    text=db.Text("some random text"),
    category=db.Category("awesome"),
    link=db.Link("http://www.10gen.com"),
    email=db.Email("*****@*****.**"),
    geopt=db.GeoPt(40.74067, -73.99367),
    im=db.IM("http://aim.com/", "example"),
    phonenumber=db.PhoneNumber("1 (999) 123-4567"),
    postaladdress=db.PostalAddress("40 W 20th St., New York, NY"),
    rating=db.Rating(99),
)
out = db.get(e1.put())


def failIfNot(reference, value, type):
    assert value == reference
    assert isinstance(value, type)


failIfNot(e1.str, out.str, types.UnicodeType)

failIfNot(e1.bool, out.bool, types.BooleanType)

# TODO on AE this would always be types.LongType
# This gets difficult with our database, as longs are stored as doubles.
示例#7
0
def getproperty(kind, p, key=False):
    if key:
        input_name = 'input__p__key__%s' % p
    else:
        input_name = 'input__p__%s' % p
    v = getattr(request.forms, input_name)
    if not key:
        property_class = kind._properties[p]
    else:
        property_class = db.StringProperty()
    logging.info("p = %s" % p)
    logging.info("v = %s" % v)
    logging.info("property_class = %s" % property_class)
    if not v:
        v = None
    else:
        if isinstance(property_class, db.BooleanProperty):
            if v.lower() in ['false', 'no']:
                v = False
            else:
                v = bool(v)
        elif isinstance(property_class, db.IntegerProperty):
            v = long(v)
        elif isinstance(property_class, db.FloatProperty):
            v = float(v)
        elif isinstance(property_class, db.DateTimeProperty):
            v = datetime.datetime.strptime(v, '%Y-%m-%d %H:%M:%S.%f')
        elif isinstance(property_class, db.LinkProperty):
            v = db.Link(v)
        elif isinstance(property_class, db.TextProperty):
            v = db.Text(v)
        elif isinstance(property_class, db.BlobProperty):
            v = db.Blob(v)
        elif isinstance(property_class, db.EmailProperty):
            v = db.Email(v)
        elif isinstance(property_class, db.GeoPtProperty):
            lat, lon = [float(x) for x in v.split(',', 1).strip()]
            v = db.GeoPt(lat, lon)
        elif isinstance(property_class, db.RatingProperty):
            v = db.Rating(int(v))
        elif isinstance(property_class, db.CategoryProperty):
            v = db.Category(v)
        elif isinstance(property_class,
                        (db.ListProperty, db.StringListProperty)):
            # todo assumes list of strings
            v = list([v.strip() for v in v.split(",")])
        elif isinstance(property_class, db.ReferenceProperty):
            kindname = property_class.reference_class.__name__
            v = db.Key(kindname, v)
        elif isinstance(property_class, blobstore.BlobReferenceProperty):
            v = blobstore.BlobKey(v)
        elif isinstance(
                property_class,
            (db.IMProperty, db.PhoneNumberProperty, db.PostalAddressProperty)):
            abort(
                500, 'Unsupported property type %s for model %s' %
                (property_class, kind.__name__))
    if key and v is None:
        abort(
            400, 'Property %s is part of the key for model %s so is required' %
            (p, kind.__name__))
    return v