def addbusiness(self): user = users.get_current_user() if not user: self.redirect('/') val = db.GqlQuery("SELECT * FROM Users " + "WHERE email = :1", user.email()) val_results = val.get() if val_results: if val_results.is_business: self.redirect('/business') else: self.redirect('/feedme') else: #user is logged into google+ but doesnt have an account yet self.redirect('/register') #add the user to the database using the same user datapoints entry = Users(user_id=user.user_id(), is_business=True, email=user.email()) entry.put() business_name = self.request.get("name") business_address = self.request.get("address") business_phone = self.request.get("phone") business = Business(user_id=user.user_id(), address=business_address, name=business_name, phone_number=db.PhoneNumber(business_phone), location=db.GeoPt(30, -140)) business.put() #done adding user to database so send them to the correct main page self.redirect('/business')
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 adduser(self): user = users.get_current_user() if not user: self.redirect('/') val = db.GqlQuery("SELECT * FROM Users " + "WHERE email = :1", user.email()) val_results = val.get() if val_results: if val_results.is_business: self.redirect('/business') else: self.redirect('/feedme') user_name = self.request.get("name") user_address = self.request.get("address") user_phone = self.request.get("phone") user_dietary = self.request.get("diet", allow_multiple=True) #add the user to the database using the same user datapoints new_customer = Customers(user_id=user.user_id(), email=user.email(), name=user_name, address=user_address, phone_number=db.PhoneNumber(user_phone), restrictions=user_dietary) new_customer.put() new_user = Users(user_id=user.user_id(), email=user.email(), is_business=False) new_user.put() #done adding user to database so send them to the correct main page self.redirect('/feedme')
def add(form): image_thumb = images.resize(form['image'], 100, 100) image_medium = images.resize(form['image'], 480, 480) image_small = images.resize(form['image'], 200, 200) billboard = Billboard(title=form['title']) billboard.phone = db.PhoneNumber(form['phone']) billboard.email = db.Email(form['email']) billboard.image = db.Blob(form.get('image')) billboard.image_thumb = db.Blob(image_thumb) billboard.image_medium = db.Blob(image_medium) billboard.image_small = db.Blob(image_small) billboard.put()
def post(self, member_no): member = self.get_member(member_no) member.name = self.get_required('name') member.address = self.get_required('address') member.zipcode = self.get_required('zip') member.city = self.get_required('city') country = Country.get(self.get_required('country')) email = self.get_required('email') if email != '': member.email = db.Email(email) mobile = self.get_required('mobile') if mobile != '': member.phone = db.PhoneNumber(mobile) home = self.request.get('fixed') if home != '': member.phone_home = db.PhoneNumber(home) work = self.request.get('work') if work != '': member.phone_work = db.PhoneNumber(work) member.put() member.update_index() template = JINJA_ENVIRONMENT.get_template( 'templates/selfservice/profile_edit.html') countries = Country.all().order('order').fetch(FETCH_LIMIT) data = { 'message': 'Medlemsprofilen din er oppdatert.', 'member': member, 'countries': countries } self.response.write(template.render(data))
def saveAsPendingUser(self, data): greek_aff = Greek.gql("WHERE name=:1", data["greek"]).get() pending_user = User(email=data['email'], password=md5.new(data['password']).hexdigest(), first_name=data['first_name'], last_name=data['last_name'], phone=db.PhoneNumber(data['phone']), greek_aff=greek_aff, pending=True) pending_user.setRandomCode() pending_user.put() # ask the user to confirm their account ConfirmUserEmail(pending_user).send() return pending_user
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()
def post(self): title = self.request.get('title') blurb = self.request.get('blurb') phone = self.request.get('phone') image = self.request.get('image') email = self.request.get('email') price = self.request.get('price') image_thumb = images.resize(image, 100, 100) image_medium = images.resize(image, 480, 480) image_small = images.resize(image, 200, 200) billboards = self.request.get('selected_billboards') billboards = [db.Key(key) for key in billboards.split(' ')] ad = Ad(title=title) ad.ip = self.request.remote_addr ad.sold = False ad.blurb = blurb ad.image = db.Blob(image) ad.image_thumb = db.Blob(image_thumb) ad.image_medium = db.Blob(image_medium) ad.image_small = db.Blob(image_small) ad.phone = db.PhoneNumber(phone) ad.email = db.Email(email) ad.price2 = int(price) ad.billboards = billboards ad.put() ad.password = hashlib.md5(SALT + ad.ip + str(ad.key())).hexdigest() ad.save() for billboard in db.get(billboards): billboard.ads.append(ad.key()) billboard.put() path = os.path.join(os.path.dirname(__file__), 'success.html') self.response.out.write( template.render( path, { 'ad': ad, 'secret_link': 'http://%s/ads/%s/edit?password=%s' % (self.request.host, ad.key(), ad.password) }))
def task_member_restore(items): for item in items: member = Member() member.number = item['number'] member.address = item['address'] if item['email'] != '' and item['email'] != None: member.email = db.Email(item['email']) member.name = item['name'] member.member_since = string_to_date(item['memberSince']) if item['phone'] != '' and item['phone'] != None: member.phone = db.PhoneNumber(item['phone']) if item['phoneWork'] != '' and item['phoneWork'] != None: member.phone_work = item['phoneWork'] if item['phoneHome'] != '' and item['phoneHome'] != None: member.phone_home = item['phoneHome'] member.notes = item['notes'] member.zipcode = item['zipcode'] member.city = item['city'] member.county = item['county'] member.country = db.get(db.Key.from_path('Country', item['countryId'])) member.status = db.get(db.Key.from_path('Status', item['statusId'])) member.membertype = db.get( db.Key.from_path('MemberType', item['typeId'])) member.put() for itemdue in item['membershipDues']: due = MembershipDues(parent=member, year=itemdue['year'], paid=itemdue['paid']) due.put() for itemcar in item['cars']: car = Car() car.member = member car.registration = itemcar['registration'] car.model = db.get(db.Key.from_path('CarModel', itemcar['modelId'])) car.bought_year = itemcar['boughtYear'] car.sold_year = itemcar['soldYear'] car.year = itemcar['year'] car.notes = itemcar['notes'] car.serial_no = itemcar['serialNo'] car.put()
def populate(self): context = {} bus = Business(location=db.GeoPt(39.95, -75.17), name="Pat's King of Steaks", address="1237 E Passyunk Ave, Philadelphia, PA 19147", boo=0, user_id="32023", phone_number=db.PhoneNumber("+12154681546")) bus.update_location() bus.put() #menu = Menu(user_id="32023", # dish_name="Philly CheeseSteak", # price=6.34, # photo_link="http://www3.gazette.com/bots/sites/default/files/m3rmh6-m3rmgwphillycheesesteaksandwich.jpg", # restriction_list=["Meat", "Dairy"] # ) #menu.put() return self.render_string('loaded the business data', context)
int=10, float=5.05, 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)
def populate(obj): global _obj _obj = obj WADE = "*****@*****.**" CHER = "*****@*****.**" admins = [ ["M", "Wade Carpenter", WADE, ["+1-604-788-5894"]], ["F", "Cher Choi", CHER, ["+1-604-833-2437", "+1-604-395-5293"]], ] players = [ [ "M", "Non Admin", "*****@*****.**", ["+1-604-420-1297 x 6912"] ], ["M", "Guy One", "*****@*****.**", []], ["M", "Guy Two", "*****@*****.**", []], ["F", "Girl One", "*****@*****.**", []], ["F", "Girl Two", "*****@*****.**", []], ] # Add Admins for a in admins: ph = [] for p in a[3]: ph.append(db.PhoneNumber(p)) q = models.Admin.all() q.filter("name =", a[1]) q.filter("user ="******"Added admin: %s" % repr(a)) else: log("Admin already exists: %s" % repr(a)) admin.refresh() admin.gender = a[0] admin.mail = a[2] admin.put() # Add Regular Players for a in players: ph = [] for p in a[3]: ph.append(db.PhoneNumber(p)) q = models.Player.all() q.filter("name =", a[1]) q.filter("mail =", a[2]) if q.get() == None: pl = models.Player(gender=a[0], name=a[1], mail=a[2], phone=ph) pl.put() log("Added player: %s" % repr(a)) else: log("Player already exists: %s" % repr(a)) # Add games (to all teams) games = [ { "d": [2012, 6, 2], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 6, 9], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 6, 16], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 6, 23], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 6, 30], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 7, 3], "t": "6:00 PM", "dur": 180, "info": "MyInfo for game" }, { "d": [2012, 7, 10], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 7, 17], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 7, 24], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 7, 31], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 8, 3], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 8, 10], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 8, 17], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 8, 24], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 8, 31], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 9, 3], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 9, 10], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 9, 17], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 9, 24], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, { "d": [2012, 9, 30], "t": "6:00 PM", "dur": 180, "info": "Info for game" }, ] # Add Teams teams = [ [CHER, "Chronic Injury", [WADE, CHER]], [WADE, "Wade's Team", [WADE]], ] for t in teams: q = models.Admin.all() user = User(t[0]) q.filter("user = "******"Can't get owner '%s' for team '%s'" % (user, t[1])) continue q = models.Team.all() q.filter("name = ", t[1]) q.filter("owner = ", owner) team = q.get() if team == None: team = models.Team(name=t[1], owner=owner) team.put() for game in games: tm = datetime.strptime(game["t"], "%I:%M %p") dt = datetime(game["d"][0], game["d"][1], game["d"][2], tm.hour, tm.minute) dt = tz.to_utc(dt) dt_end = dt + timedelta(minutes=game["dur"]) log("%s - %s" % (str(dt), str(dt_end))) g_q = models.Game.all() g_q.filter("team = ", team) g_q.filter("start = ", dt) g_q.filter("end = ", dt_end) gobj = g_q.get() if gobj == None: gobj = models.Game(start=dt, end=dt_end, team=team, info=game["info"]) else: gobj.info = game["info"] gobj.put() if team != None: if owner.own_teams == None: owner.own_teams = [] if not team.key() in owner.own_teams: owner.own_teams.append(team.key()) owner.put() for adm in t[2]: aq = models.Admin.all() aq.filter("user ="******"Added/updated team %s [owner %s <%s>]" % (t[1], owner.name, owner.user.email())) else: log("Skipped team %s [owner %s <%s>]" % (t[1], owner.name, owner.user.email()))
def post(self, member_id): if self.request.get('cancel') == '1': return self.redirect('/members') if self.request.get('operation') == 'delete_car': car = Car.get(self.request.get('car_key')) if car: car.delete() return self.redirect('/members/' + member_id + '/edit') member = Member.get(member_id) if self.request.get('operation') == 'new_car': car = Car() car.member = member car.model = dbutils.get_default_model() car.registration = '' car.year = 0 car.notes = '' car.serial_no = '' car.put() return self.redirect('/members/' + member_id + '/car/' + str(car.key()) + '/edit') member.name = self.request.get('name') member.address = self.request.get('address') member.zipcode = self.request.get('zip') member.city = self.request.get('city') member.country = Country.get(self.request.get('country')) phone = self.request.get('mobile').strip() if phone != '': member.phone = db.PhoneNumber(phone) else: member.phone = None email = self.request.get('email').strip() if email != '': member.email = db.Email(email) else: member.email = None home = self.request.get('fixed').strip() if home != '': member.phone_home = db.PhoneNumber(home) else: member.phone_home = None work = self.request.get('work').strip() if work != '': member.phone_work = db.PhoneNumber(work) else: member.phone_work = None member.membertype = MemberType.get(self.request.get('type')) member.status = Status.get(self.request.get('status')) member.notes = self.request.get('note') if self.request.get('access_code') == '': member.generate_access_code() if self.request.get('magazine_count') != '': try: member.magazine_count = int(self.request.get('magazine_count')) except ValueError: pass member.put() member.update_index() # save membership dues self.save_dues(member) return self.redirect('/members')
def createPhoneNumber(self, number, default=DEFAULT_PHONE_NUMBER): if number == None or number == '': return default else: return db.PhoneNumber(number)
def ParseItem(self, item, entity_to_parse, parent_entity): """Parses a single item of API data and stores the resulting entity. Args: item: a Python dict representing a single item of data. entity_to_parse: the type of entity being created. parent_entity: the value to set the entity's parent_entity property to. Raises: ValueError: if an unknown property is found in the results. Returns: The entity created by parsing item. """ if "id" in item: model_obj = entity_to_parse(parent=self.snapshot, key_name=str(item["id"])) else: logging.warning("no id: %s" % item) model_obj = entity_to_parse(parent=self.snapshot) model_obj.put() if parent_entity: model_obj.parent_entity = parent_entity props = model_obj.properties() for key, value in item.items(): if key not in Parser._EXCLUDED_FIELDS: prop_name = Parser.ApiToModel(key) if (entity_to_parse, key) in self.model.child_mapping: for item in value: self.ParseItem( item, self.model.child_mapping[entity_to_parse, key], model_obj) elif (isinstance(props[prop_name], db.StringProperty) or isinstance(props[prop_name], db.TextProperty) or isinstance(props[prop_name], db.BooleanProperty) or isinstance(props[prop_name], db.IntegerProperty)): setattr(model_obj, prop_name, value) elif isinstance(props[prop_name], db.FloatProperty): setattr(model_obj, prop_name, float(value)) elif isinstance(props[prop_name], db.LinkProperty): link = db.Link(value) setattr(model_obj, prop_name, link) elif isinstance(props[prop_name], db.PhoneNumberProperty): pn = db.PhoneNumber(value) setattr(model_obj, prop_name, pn) elif isinstance(props[prop_name], db.BlobProperty): blob = db.Blob(urlfetch.fetch(value).content) setattr(model_obj, prop_name, blob) elif isinstance(props[prop_name], db.DateProperty): # The elif clause for DateProperty must come ABOVE the elif clause for # DateTimeProperty because DateProperty is a subclass of # DateTimeProperty. If we ever add a TimeProperty we will need it # to be above DateTimeProperty as well. d = datetime.datetime.strptime( value, "%Y-%m-%dT00:00:00.000Z").date() setattr(model_obj, prop_name, d) elif isinstance(props[prop_name], db.DateTimeProperty): if self.date_type == "friendly": part1, part2 = value.split(".") dt = datetime.datetime.strptime( part1, "%Y-%m-%dT%H:%M:%S") dt = dt.replace(microsecond=int(part2[0:3]) * 1000) elif self.date_type == "timestamp": part1 = value[:-3] part2 = value[-3:] dt = datetime.datetime.fromtimestamp(long(part1)) dt = dt.replace(microsecond=int(part2) * 1000) else: raise ValueError("Not a valid date_type: %s" % self.date_type) setattr(model_obj, prop_name, dt) elif isinstance(props[prop_name], db.ReferenceProperty): key_obj = db.Key.from_path( self.snapshot.kind(), self.snapshot.key().id(), props[prop_name].reference_class.kind(), value) setattr(model_obj, prop_name, key_obj) elif isinstance(props[prop_name], db.ListProperty): if props[prop_name].item_type == db.Key: key_objs = [] for key_obj in value: key_objs.append( db.Key.from_path( self.snapshot.kind(), self.snapshot.key().id(), self.model.many_many_mapping[ entity_to_parse, key].__name__, key_obj)) setattr(model_obj, prop_name, key_objs) else: setattr(model_obj, prop_name, value) elif isinstance(props[prop_name], properties.TimeDeltaProperty): milliseconds = long(value) dt = datetime.timedelta(seconds=milliseconds / 1000, milliseconds=milliseconds % 1000) setattr(model_obj, prop_name, dt) elif isinstance(props[prop_name], properties.DictProperty): setattr(model_obj, prop_name, value) else: raise ValueError("Could not parse property %s.\n" "Value: %s" % (key, value)) model_obj.put() return model_obj
def import_members(self, member_csv): member_csv = member_csv.split('\n') lines = self.unmangle(member_csv) count = 0 for fields in lines: #fields.reverse() print '-' * 80 print fields print '=' * 80 fields.reverse() member = Member() (fee2009, fee2010, fee2011, fee2012, fee2013, fee2014) = (fields.pop(), fields.pop(), fields.pop(), fields.pop(), fields.pop(), fields.pop()) member.address = fields.pop() # Skip the cars for carno in range(1, 6): (car, registration) = (fields.pop(), fields.pop()) email = fields.pop() if email != '': member.email = db.Email(email) (lastname, firstname) = (fields.pop(), fields.pop()) full_name = firstname + ' ' + lastname member.name = full_name.strip() member.county = fields.pop().strip() member_since = fields.pop() date = self.string_to_date(member_since) if date: member.member_since = date else: print 'Error converting date from', member_since country = fields.pop().strip() if country == '': country = 'Norge' member.country = self.string_to_country(country) member.membertype = self.string_to_type(fields.pop()) member.number = fields.pop() mobile = fields.pop() if mobile != '': member.phone = db.PhoneNumber(mobile) member.notes = fields.pop() member.zipcode = fields.pop() member.city = fields.pop() work = fields.pop() home = fields.pop() if work != '': member.phone_work = db.PhoneNumber(work) if home != '': member.phone_home = db.PhoneNumber(home) member.status = self.get_status('Medlem') member.generate_access_code() member.put() self.add_due(member, 2009, fee2009 == 'Betalt') self.add_due(member, 2010, fee2010 == 'Betalt') self.add_due(member, 2011, fee2011 == 'Betalt') self.add_due(member, 2012, fee2012 == 'Betalt') self.add_due(member, 2013, fee2013 == 'Betalt') self.add_due(member, 2014, fee2014 == 'Betalt') count = count + 1 print 'Imported', count, 'members'