class Site(db.Model): # RPC private/protected properties: read-only for ALL _deleted = db.BooleanProperty(default=False) _dateCreated = db.DateTimeProperty(auto_now_add=True) _dateModified = db.DateTimeProperty(auto_now=True) _dateAccessed = db.DateTimeProperty() _userLastAccessed = db.UserProperty() _rating = db.RatingProperty() # RPC public properties: writable by creator/admin userCreator = db.UserProperty(required=True) # creator or admin may change creator name = db.StringProperty(required=True) latlng = db.GeoPtProperty(required=True) address = db.PostalAddressProperty() description = db.TextProperty() pay = db.BooleanProperty() # pay access only? restricted = db.BooleanProperty() # authorized access only? # List of Service entries in the DB services = db.ListProperty(db.Key) # List of keys to Service entities #db.BlobProperty() # images, etc #db.ListProperty() # images, history, ... # ReferenceProperty? # Related sites? contactName = db.StringProperty() contactAddress = db.PostalAddressProperty() contactPhone = db.PhoneNumberProperty() contactEmail = db.EmailProperty() contactURL = db.LinkProperty() contactIM = db.IMProperty() evcmid = db.StringProperty() # ID, if imported from EVChargerMaps.com
class Settings(db.Model): companyName = db.StringProperty() companyAddress = db.PostalAddressProperty() companyPhone1 = db.PhoneNumberProperty() companyPhone2 = db.PhoneNumberProperty() logo = db.BlobProperty() bankName = db.StringProperty() bankAddress = db.PostalAddressProperty() bankAcctName = db.StringProperty() bankAcctNum = db.StringProperty() routingNumber = db.StringProperty() swiftCode = db.StringProperty() email = db.EmailProperty() sdin = db.StringProperty() sales_tax = db.FloatProperty(default=0.0) num_months = db.IntegerProperty(default=6) @classmethod def get_all(cls): cacheKey = "settings:all" allInstances = memcache.get(cacheKey) logging.info("******") logging.info(allInstances) if allInstances is None: logging.info("creating cache: " + cacheKey) allInstances = cls.all()[0] memcache.add(cacheKey, allInstances) else: logging.info("using cache: " + cacheKey) return allInstances
class Venue(GeoModel): name = db.StringProperty() address = db.PostalAddressProperty() start_date = db.DateProperty() end_date = db.DateProperty() def date_string(self): start_date = self.start_date.strftime("%m/%d/%Y") end_date = self.end_date.strftime("%m/%d/%Y") return '%s - %s' % (start_date, end_date) def unlink_templates(self): templates = self.template_set for template in templates: template.venue = None template.put() def to_dict(self): result = to_dict(self) result['id'] = self.key().id() return result def delete(self): self.unlink_templates() super(Venue, self).delete()
class Dealer(db.Model): name = db.StringProperty() url = db.LinkProperty() address = db.PostalAddressProperty() phone = db.PhoneNumberProperty() cars = db.ListProperty(db.Key) area = db.StringProperty()
class Person(db.Model): """Base person class. Necessary in the case of non-member board nominees.""" firstname = db.StringProperty() lastname = db.StringProperty() username = db.StringProperty(required=True) email = db.EmailProperty(required=True) altemails = db.ListProperty(item_type=db.Email) phone = db.PhoneNumberProperty() altphones = db.ListProperty(item_type=db.PhoneNumber) address = db.PostalAddressProperty() # password is hashed with sha256 password = db.BlobProperty(required=True) password_expired = db.BooleanProperty(default=False) active = db.BooleanProperty(default=True) admin = db.BooleanProperty(default=False) joined = db.DateProperty() left = db.DateProperty() @staticmethod def EncryptPassword(password): """Encrypts a password using SHA-256 encoding. Args: password: str, password to encrypt. Returns: str, encrypted password. """ return hashlib.sha256(password).digest()
class Event(db.Model): eventID = db.IntegerProperty() eventTitle = db.StringProperty() eventDescription = db.TextProperty() eventImageURLs = db.ListProperty(db.Link) eventAttendance = db.IntegerProperty() eventReviews = db.IntegerProperty() eventTag = db.StringProperty() eventURL = db.LinkProperty() eventWebsite = db.LinkProperty() eventTickets = db.TextProperty() eventCancelled = db.BooleanProperty() venueID = db.IntegerProperty() venueName = db.StringProperty() venueURL = db.LinkProperty() venueWebsite = db.LinkProperty() venuePhoneNumber = db.PhoneNumberProperty() venueImageURLs = db.ListProperty(db.Link) venueAddress = db.PostalAddressProperty() venueTimeZone = db.StringProperty() artists = db.StringListProperty() headliner = db.StringProperty() tags = db.StringListProperty() geoPt = db.GeoPtProperty() date = db.DateTimeProperty() dateAdded = db.DateTimeProperty(auto_now_add=True)
class SocialUser(db.Model): first_name = db.StringProperty(required=True) last_name = db.StringProperty(required=True) display_name = db.StringProperty() user_entity = db.UserProperty() bio = db.TextProperty() gender = db.StringProperty(choices=set(["M", "F", "U"])) birth_date = db.DateTimeProperty() email = db.EmailProperty(required=True) email_alternate = db.EmailProperty() mobile_number = db.PhoneNumberProperty() mailing_address = db.PostalAddressProperty() personal_website = db.LinkProperty() hometown = db.StringProperty() current_location = db.StringProperty() relationship_status = db.StringProperty() locale = db.StringProperty() timezone = db.StringProperty() enabled = db.BooleanProperty()
class AllPropertiesModel(db.Model): """Property names are ugly, yes.""" prop_string = db.StringProperty() prop_byte_string = db.ByteStringProperty() prop_boolean = db.BooleanProperty() prop_integer = db.IntegerProperty() prop_float = db.FloatProperty() prop_date_time = db.DateTimeProperty() prop_date = db.DateProperty() prop_time = db.TimeProperty() prop_list = db.ListProperty(int) prop_string_list = db.StringListProperty() prop_reference = db.ReferenceProperty() prop_self_refeference = db.SelfReferenceProperty() prop_user = db.UserProperty() prop_blob = db.BlobProperty() prop_text = db.TextProperty() prop_category = db.CategoryProperty() prop_link = db.LinkProperty() prop_email = db.EmailProperty() prop_geo_pt = db.GeoPtProperty() prop_im = db.IMProperty() prop_phone_number = db.PhoneNumberProperty() prop_postal_address = db.PostalAddressProperty() prop_rating = db.RatingProperty()
class EventModel(polymodel.PolyModel): """This models a general event type .. method:: Event(name, date, startTime, endTime[, description]) Creates a new Event entity :param name: Name of event :type name: unicode :param date: Date of the event :type date: datetime.date :param startTime: Time event starts at :type startTime: datetime.time :param endTime: Time event ends at :type endTime: datetime.time :param description: Description of the event :type description: unicode :rtype: Event model instance """ # Required Attributes name = db.StringProperty(required=True) start_time = db.DateTimeProperty(required=True) end_time = db.DateTimeProperty(required=True) location = db.PostalAddressProperty(required=True) # Optional Attributes description = db.StringProperty()
class UserSettings(db.Model): user = db.UserProperty() lastname = db.StringProperty(verbose_name=u'姓') firstname = db.StringProperty(verbose_name=u'名') gender = db.StringProperty(choices=( "M", "F", ), verbose_name=u'性别') profile = db.TextProperty(verbose_name=u'档案') language = db.IntegerProperty(verbose_name=u'语言') im = db.IMProperty() birthdate = db.DateProperty(verbose_name=u'生日') website = db.LinkProperty(verbose_name=u'网址') home_phone = db.PhoneNumberProperty(verbose_name=u'私人电话') work_phone = db.PhoneNumberProperty(verbose_name=u'工作电话') mobile = db.PhoneNumberProperty(verbose_name=u'手机') fax = db.PhoneNumberProperty(verbose_name=u'传真') address = db.PostalAddressProperty(verbose_name=u'地址') @staticmethod def getByUser(user): settings = UserSettings.all().filter('user =', user).get() if settings is None: settings = UserSettings(user=user) settings.put() return settings # q = db.GqlQuery("SELECT * FROM UserSettings WHERE user = :1", user) # return q.get() @staticmethod def getByCurrentUser(): user = users.get_current_user() return UserSettings.getByUser(user)
class User(db.Model): name = db.StringProperty() surname = db.StringProperty() account = db.StringProperty() password = db.StringProperty() address= db.PostalAddressProperty() cellphone= db.PhoneNumberProperty() email= db.EmailProperty() id_photo=db.BlobProperty()
class Winery(db.Model): """Models a winery""" name = db.StringProperty() description = db.TextProperty() rating = db.RatingProperty() email = db.EmailProperty() phone = db.PhoneNumberProperty() hours = db.ReferenceProperty(WeeklyHours) address = db.PostalAddressProperty() location = db.GeoPtProperty() image = db.BlobProperty()
class Listing(GeoModel): address = db.PostalAddressProperty() price = db.FloatProperty() baths = db.FloatProperty() beds = db.FloatProperty() size = db.FloatProperty() description = db.StringProperty(multiline=True) property_type = db.StringProperty() amenities = db.StringProperty() author = db.UserProperty() createDate = db.DateTimeProperty(auto_now_add=True) lastUpdateDate = db.DateTimeProperty(auto_now=True) status = db.StringProperty() tag = db.CategoryProperty() portfolio = db.StringProperty() photo = db.BlobProperty() def __unicode__(self): return self.address @staticmethod def public_attributes(): """Returns a set of simple attributes on listing entities.""" return ['address', 'price', 'baths', 'beds'] def set_location(self): if address: pts = geocoder.query() if pts and len(pts) >= 2: self.location = db.GeoPt() self.location.lat = pts[0] self.location.lon = pts[1] def _get_latitude(self): return self.location.lat if self.location else None def _set_latitude(self, lat): if not self.location: self.location = db.GeoPt() self.location.lat = lat latitude = property(_get_latitude, _set_latitude) def _get_longitude(self): return self.location.lon if self.location else None def _set_longitude(self, lon): if not self.location: self.location = db.GeoPt() self.location.lon = lon longitude = property(_get_longitude, _set_longitude)
class SpoonStep(db.Model): "Step of a spoon travel" PROPERTIES = set( ['spoon', 'date', 'comment', 'place', 'email', 'image_blob']) spoon = db.ReferenceProperty(Spoon, collection_name="spoonSteps") date = db.DateTimeProperty(auto_now_add=True) comment = db.StringProperty(multiline=True) place = db.PostalAddressProperty() email = db.EmailProperty() image_blob = db.BlobProperty() currentOwner = db.StringProperty()
class PerzoUser(db.Model): # Models an individual Perzo User - This is the primary user profile for login verification # All other profile, stream, filestore dbs are linked here via datastore keys index = db.IntegerProperty() # Unique Integer ID for each User email = db.StringProperty() # Email for Signing in to Perzo gemail = db.UserProperty() # Google User ID (gmail) firstname = db.StringProperty() # User's proper first name(s) lastname = db.StringProperty() # User's proper family name nickname = db.StringProperty() # Screen name for the user password = db.StringProperty() # Password for signing into Perzo status = db.StringProperty() # User status (set by user) state = db.StringProperty() # User state (set by Robbie: home, traveling, etc.) photo = db.BlobProperty() # Quick access thumbnail photo mobile = db.PhoneNumberProperty() # Mobile number required for Perzo use homeaddress = db.PostalAddressProperty() workaddress = db.PostalAddressProperty() shipaddress = db.PostalAddressProperty() currentloc = db.GeoPtProperty() homeloc = db.GeoPtProperty() workloc = db.GeoPtProperty() userextras = db.Key() # Pointer to extended user data base robbie = db.Key() # Pointer to Robbie data bases profilephotos = db.Key() # Pointer to profile photo list streams = db.Key() # Pointer to streams files = db.Key() # Pointer to Perzo file store signals = db.Key() # Pointer to signal filters contacts = db.Key # Pointer to user contacts signinlog = db.Key() # Pointer to Perzo signin history (IP, date) googleplussignin = db.BooleanProperty() googleplus = db.Key() facebooksignin = db.BooleanProperty() facebook = db.Key() twitterplussignin = db.BooleanProperty() twitter = db.Key() linkedinsignin = db.BooleanProperty() linkedin = db.Key() date = db.DateTimeProperty(auto_now_add=True) # Date & time of account creation
class SocialEvent(db.Model): user = db.ReferenceProperty(SocialUser) social_account = db.ReferenceProperty(SocialAccount) social_account_item_id = db.StringProperty() name = db.StringProperty() start_time = db.DateTimeProperty() end_time = db.DateTimeProperty() location_text = db.StringProperty() location_address = db.PostalAddressProperty() #rsvp = db.StringProperty(required=True, choices=set(["Y","N","M"])) # Yes, NO, or Maybe rsvp = db.StringProperty() friend_list = db.StringListProperty()
class SocialFriend(db.Model): user = db.ReferenceProperty(SocialUser) social_account = db.ReferenceProperty(SocialAccount) social_account_item_id = db.StringProperty() social_account_username = db.StringProperty() first_name = db.StringProperty() last_name = db.StringProperty() display_name = db.StringProperty() location = db.PostalAddressProperty() original_friend_date = db.DateTimeProperty() internal_retrieval_date = db.DateTimeProperty(auto_now_add=True)
class SocialReview(db.Model): user = db.ReferenceProperty(SocialUser) social_account = db.ReferenceProperty(SocialAccount) social_account_item_id = db.StringProperty() full_business_name = db.StringProperty() social_account_business_id = db.StringProperty() business_category_list = db.StringListProperty() business_address = db.PostalAddressProperty() review_rating = db.RatingProperty( ) #every rating is normalized to 1 out of 100 review_date = db.DateTimeProperty() review_text = db.TextProperty() checkin_count = db.IntegerProperty()
class MetaData(db.Model): title = db.StringProperty(required=True) sub_title = db.StringProperty(required=True) adresse = db.PostalAddressProperty(required=True) contact = db.StringProperty(required=True) email1 = db.EmailProperty(required=True) email2 = db.EmailProperty(required=True) default_from_email = db.EmailProperty(required=True) domain = db.LinkProperty(required=True) domain_contrib = db.LinkProperty(required=True) phone = db.PhoneNumberProperty(required=True) online = db.BooleanProperty() dateonline = db.DateProperty(required=True, auto_now=True) def __unicode__(self): return u'Données globales : %s %s' % (self.title, self.domain)
class Agenda(db.Model): title_event = db.StringProperty(required=True, verbose_name=u"Titre de l'événement") agenda_startdate = db.DateTimeProperty(required=True, verbose_name=u"Début") agenda_enddate = db.DateTimeProperty(required=True, verbose_name="Fin") agenda_lieux = db.PostalAddressProperty( required=True, verbose_name=u"Lieux de l'événement") content = HTMLProperty(required=True, verbose_name=u"Description") agenda_online = db.BooleanProperty(required=True, verbose_name="En ligne") agenda_contact = db.ReferenceProperty(User, required=True, verbose_name="Contact") def __unicode__(self): return u'Evénemenet : %s (début: %s, fin: %s)' % ( self.title_event, self.agenda_startdate, self.agenda_startdate)
class Park(db.Model): """ Park model for the App Engine data store. """ guid = db.StringProperty(required=True) name = db.StringProperty(required=True) address = db.PostalAddressProperty(required=True) neighbourhood = db.StringProperty(required=True) geolocation = db.GeoPtProperty(required=True) dogs = db.BooleanProperty(default=False) leashed = db.BooleanProperty(default=False) restrictions = db.BooleanProperty(default=False) notes = db.StringProperty(multiline=True) overallRating = db.RatingProperty(default=0) amountVotes = db.IntegerProperty(default=0) overallBayesian = db.RatingProperty(default=0) facilityVotes = db.IntegerProperty(default=0) facilityVotesTotal = db.IntegerProperty(default=0) facilityRating = db.RatingProperty(default=0) facilityBayesian = db.RatingProperty(default=0) cleanlinessVotes = db.IntegerProperty(default=0) cleanlinessVotesTotal = db.IntegerProperty(default=0) cleanlinessRating = db.RatingProperty(default=0) cleanlinessBayesian = db.RatingProperty(default=0) friendlinessVotes = db.IntegerProperty(default=0) friendlinessVotesTotal = db.IntegerProperty(default=0) friendlinessRating = db.RatingProperty(default=0) friendlinessBayesian = db.RatingProperty(default=0) def getmarker(self): if not self.dogs: return app.config.markerbase + 'dogs-no.png' else: if not self.restrictions: if not self.leashed: return app.configmarkerbase + 'dogs-free.png' else: return app.configmarkerbase + 'dogs-leashed.png' else: return app.configmarkerbase + 'dogs-restrictions.png'
class User(db.Model): name = db.StringProperty('Full Name') account = db.UserProperty() phone_number = db.PhoneNumberProperty('Phone Number') address = db.PostalAddressProperty('Postal Address') website = db.StringProperty('Homepage URL') description = db.TextProperty('Brief Biography') rating = db.FloatProperty(default=0.0) rating_count = db.IntegerProperty(default=0) tags = db.StringListProperty('Expertise, one per line', default=None) availability = db.TextProperty( 'Availability', default='Available by appointment on weekdays in PST timezone') has_chat = db.BooleanProperty('Use Google Chat', default=False) def email(self): result = self.account.nickname() if self.account else '' return (result + '@gmail.com') if result and '@' not in result else result
class Site(BaseModel): """A work site.""" # "10001DAL" reads: 2010, #001, Daly City number = db.StringProperty(required=True) number.unique = True name = db.StringProperty() # "Belle Haven" name.verbose_name = 'Recipient Name' street = db.StringProperty() # Not full street address, for privacy. applicant = db.StringProperty() applicant.verbose_name = 'Applicant Contact' sponsors = db.StringProperty() difficulty = db.StringProperty() postal_address = db.PostalAddressProperty() # Full street address. work_start = db.DateProperty() work_end = db.DateProperty() notes = db.TextProperty() def __unicode__(self): return 'Site #%s | %s' % (self.key().id(), self.name)
class Company(db.Model): company_name = db.StringProperty() company_n_fractions = db.StringListProperty() company_site_url = db.LinkProperty() short_description = db.TextProperty() sh_d_fractions = db.StringListProperty()# to lower phone = db.StringListProperty() phone_type = db.StringProperty() gen_description = db.TextProperty() gen_d_fractions = db.StringListProperty()# to lower description_headers = db.StringListProperty() description_paragraph = db.TextProperty() description_p_fractions = db.StringListProperty()# to lower tags = db.StringListProperty()# to lower category = db.StringListProperty()# to lower address = db.PostalAddressProperty() postal_code = db.IntegerProperty() # city = db.StringProperty() # city_fractions = db.StringListProperty() # country = db.StringProperty() # continent = db.StringProperty() #
class Everything(db.Model): str = db.StringProperty() bool = db.BooleanProperty() int = db.IntegerProperty() float = db.FloatProperty() datetime = db.DateTimeProperty() date = db.DateProperty() time = db.TimeProperty() list = db.ListProperty(types.IntType) strlist = db.StringListProperty() user = db.UserProperty() blob = db.BlobProperty() text = db.TextProperty() category = db.CategoryProperty() link = db.LinkProperty() email = db.EmailProperty() geopt = db.GeoPtProperty() im = db.IMProperty() phonenumber = db.PhoneNumberProperty() postaladdress = db.PostalAddressProperty() rating = db.RatingProperty()
class Supplier(BaseModel): """A supplier of Items.""" # TODO: fax, contact name vs. supplier name, name = db.StringProperty() name.unique = True name.required = True email = db.EmailProperty() address = db.PostalAddressProperty() phone1 = db.PhoneNumberProperty() phone2 = db.PhoneNumberProperty() notes = db.TextProperty() since = db.DateProperty(auto_now_add=True) active = db.StringProperty(choices=('Active', 'Inactive'), default='Active') visibility = db.StringProperty(choices=('Everyone', 'Staff Only'), default='Everyone') def __unicode__(self): return self.name def __str__(self): return self.name
class Contact(polymodel.PolyModel): phone_number = db.PhoneNumberProperty() address = db.PostalAddressProperty()
class Event(db.Model): title = db.StringProperty(required=True) start= db.DateTimeProperty(required=True) end=db.DateTimeProperty(required=True, indexed=True) location=db.PostalAddressProperty(required=False, indexed=False) link=db.LinkProperty(required=False, indexed=False) description=db.TextProperty() cost=db.TextProperty(required=False) submitted_by=db.ReferenceProperty(Profile,required=False, collection_name='events_submitted') submitted_at=db.DateTimeProperty(auto_now_add=True) site=db.ReferenceProperty(Eventsite, required=True) sort_dt=db.DateTimeProperty() status=db.StringProperty(required=True) score=db.IntegerProperty(indexed=False) approved_by=db.ReferenceProperty(Profile,indexed=False, collection_name="events_approved") approved_on=db.DateTimeProperty() tags=db.StringListProperty() credit_name=db.StringProperty(required=True, indexed=False) credit_link=db.LinkProperty(required=False, indexed=False) source=db.ReferenceProperty(required=False) last_seen=db.DateTimeProperty(required=False) source_uid=db.StringProperty(required=False) repeats_frequency=db.StringProperty(required=False) repeats_weekday=db.IntegerProperty(required=False) #repeats_setpos=db.IntegerProperty(required=False) repeats_monthday=db.IntegerProperty(required=False) def __unicode__(self): return "%s: %s" %(self.local_start.date().strftime("%a %b %d"), self.title) @DerivedProperty def local_start(self): if self.start.tzinfo == None: ls= utc.localize(self.start).astimezone(self.site.tz) return ls.replace(tzinfo=None) else: return self.start.astimezone(self.site.tz) + self.site.tz.utcoffset(self.site.tz) @DerivedProperty def local_end(self): if self.end.tzinfo == None: ls= utc.localize(self.end).astimezone(self.site.tz) return ls.replace(tzinfo=None) else: return self.end.astimezone(self.site.tz) + self.site.tz.utcoffset(self.site.tz) @DerivedProperty def multiday(self): return ((self.local_start.date() < self.local_end.date()) and (self.local_end -self.local_start) > timedelta(1)) @DerivedProperty def allday(self): return ((self.local_start.time() == time(0) and self.local_end.time() == time(0))) @DerivedProperty def continues(self): if self.multiday: rule=rrule(DAILY, dtstart=self.local_start, until=self.local_end) return [str(dt.date()) for dt in list(rule)] else: return None @DerivedProperty def repeats_setpos(self): month_start=(self.local_start+relativedelta(day=1)) weekday=(MO,TU,WE,TH,FR,SA,SU)[self.local_start.weekday()] tests=[(-1,month_start+relativedelta(day=31,weekday=weekday(-1))), (1,month_start+relativedelta(day=1,weekday=weekday(1))), (2,month_start+relativedelta(day=1,weekday=weekday(2))), (3,month_start+relativedelta(day=1,weekday=weekday(2))),] for pos, d in tests: logging.warning("comparing %s and %s" %(str(d),str(self.local_start.date()) )) if self.local_start.date()==d.date(): return pos @property def event_link(self): return self.link @property def item_pubdate(self): return self.approved_on def copy(self, rule): copies=[] delta=self.end-self.start #search_after=utc.localize(datetime.now()) logging.warning(rule) for dt in rule[1:6]: if not (dt.date() > self.local_start.date()): continue logging.warning(dt) new_start=self.site.tz.localize(self.local_start.replace(tzinfo=None)).replace(dt.year,dt.month,dt.day) e=Event(parent=self,key_name=dt.strftime("%Y%m%j"), title = self.title, start= new_start, end=new_start+delta, location=self.location, link=self.link, description=self.description, cost=self.cost, site=self.site, sort_dt=self.sort_dt, status=self.status, tags=self.tags, credit_name=self.credit_name, credit_link=self.credit_link, last_seen=datetime.now() ) copies.append(e) return copies def check_scores(self): if (self.approved_on or (self.score > 2)): pass @classmethod def from_gdata(cls,gevent, source): #logging.warning(type(parser.parse(gevent.when[0].start_time))) dtstart=parser.parse(gevent.when[0].start_time) dtend=parser.parse(gevent.when[0].end_time) summary=gevent.title.text location= gevent.where[0].value_string or None link= source.source_link uid=gevent.id.text key_name=uid #first check for duplicate key name existing_event=Event.get_by_key_name(key_name) #fail-over to name and start if not existing_event: existing_event=source.event_set.filter('title = ', summary).filter('start = ',dtstart).get() logging.warning("searched for existing event with key %s, found %s" %(key_name,existing_event)) if existing_event and source.trusted: existing_event.title=summary or "Untitled Event" existing_event.start=dtstart existing_event.end=dtend existing_event.last_seen=datetime.now() if location:existing_event.location=location if link: existing_event.link=link or source.source_link existing_event.put() return existing_event if existing_event and not source.trusted: return existing_event if source.trusted: status='approved' approved_on=datetime.now() else: status='submitted' approved_on=None event=Event(key_name=key_name, title=summary or "Untitled Event", start=dtstart, end=dtend, site=source.site, location=location, link=link, status=status, tags=source.default_tags, credit_name=source.name, credit_link=source.source_link, source=source, source_uid=uid, approved_on=approved_on, last_seen=datetime.now()) #source_ical_hash=source_ical_hash) event.put() source.site.expire_assets() return event @classmethod def from_vcal(cls,vcal, source): def start_dt(dateobject): if type(dateobject) == datetime: if hasattr (dateobject,'tzinfo') and dateobject.tzinfo: return dateobject else: return source.site.tz.localize(dateobject) if not dateobject: return None return source.site.tz.localize(datetime.combine(dateobject, time(0))) def end_dt(dateobject): if not dateobject: return None if type(dateobject) == datetime: if hasattr (dateobject,'tzinfo') and dateobject.tzinfo: return dateobject else: return source.site.tz.localize(dateobject) return source.site.tz.localize(datetime.combine(dateobject, time(0))) #logging.warning("hey!") parsedCal = vobject.readOne(vcal) vevent=parsedCal.vevent dtstart=start_dt(vevent.dtstart.value) if dtstart < utc.localize(datetime.today()) - timedelta(1): return logging.warning("skipping old event with dtstart %s" % dtstart) if (hasattr(vevent,'dtend') and vevent.dtend): dtend=(end_dt(vevent.dtend.value) or dtstart) else: dtend=dtstart summary=vevent.summary.value location= vevent.getChildValue('location') or None link=vevent.getChildValue('url') or source.source_link uid=vevent.uid.value or link or str(dtstart) key_name="%s-%s-%s"%(source.site.slug, source.slug,uid) #first check for duplicate key name existing_event=Event.get_by_key_name(key_name) #fail-over to name and start if not existing_event: existing_event=source.event_set.filter('title = ', summary).filter('start = ',dtstart).get() logging.warning("searched for existing event with key %s, found %s" %(key_name,existing_event)) if existing_event and source.trusted: existing_event.title=summary or "Untitled Event" existing_event.start=dtstart existing_event.end=dtend existing_event.last_seen=datetime.now() if location:existing_event.location=location if link: existing_event.link=link or source.source_link #existing_event.source_ical_hash=source_ical_hash existing_event.put() return existing_event if existing_event and not source.trusted: return existing_event if source.trusted: status='approved' approved_on=datetime.now() else: status='submitted' approved_on=None event=Event(key_name=key_name, title=summary or "Untitled Event", start=dtstart, end=dtend, site=source.site, location=location, link=link, status=status, tags=source.default_tags, credit_name=source.name, credit_link=source.source_link, source=source, source_uid=uid, approved_on=approved_on, last_seen=datetime.now()) #source_ical_hash=source_ical_hash) event.put() source.site.expire_assets() return event @classmethod def for_site_week(cls,site,day): monday=day+relativedelta(weekday=MO(-1)) sunday=monday+relativedelta(weekday=SU)
class Listing(GeoModel): """A location-aware model entities. See http://nces.ed.gov/ccd/psadd.asp for details on attributes. """ address = db.PostalAddressProperty("Address", required=True) price = db.FloatProperty("Price", required=True) baths = db.FloatProperty("Baths") beds = db.FloatProperty("Beds") size = db.FloatProperty("Size") description = db.TextProperty("Description") propertyType = db.StringProperty("Property Type", choices=propertyTypes) amenities = db.StringListProperty("Amenities") author = db.UserProperty("Author", required=True) createDate = db.DateTimeProperty("Create Date", required=True, auto_now_add=True) lastUpdate = db.DateTimeProperty("Last Update", required=True, auto_now=True) tags = db.StringListProperty("Tags") portfolio = db.StringProperty("Portfolio Url") photo = db.BlobProperty() listingAgentName = db.StringProperty("Listing Agent Name") listingAgentPhone = db.PhoneNumberProperty("Listing Agent Phone") listingAgentEmail = db.EmailProperty("Listing Agent Email"); listingAgentAddress = db.PostalAddressProperty("Listing Agent Address") listingAgentCompany = db.StringProperty("Listing Agent Company") def __unicode__(self): return "%s %s/%s %s" % (self.address, self.beds. self.baths, self.price) @staticmethod def public_attributes(): """Returns a set of simple attributes on listing entities.""" return [ 'address', 'price', 'baths', 'beds', 'size', 'description', 'propertyType', 'listingAgentName', 'listingAgentPhone', 'listingAgentPhone', 'listingAgentCompany', 'listingAgentEmail' ] def _get_author(self): return users.get_current_user() def _set_author(self): self.author = users.get_current_user() author = property(_get_author, _set_author) def set_location(self): logging.info("Set Location for Address: %s" % self.address) if self.address: r = geocoder.geocode(self.address) if not r: raise "Cannot find geolocation for address: %s" %s pts = r.split(",") logging.info("Geocode Lookup Results: %s" % pts) if pts and len(pts) >= 2: self.location = db.GeoPt(pts[2], pts[3]) logging.info("Geo Point: %s" % self.location) self.update_location() def getKeyName(self): return self.key.name() def _get_latitude(self): return self.location.lat if self.location else None def _set_latitude(self, lat): if not self.location: self.location = db.GeoPt() self.location.lat = lat latitude = property(_get_latitude, _set_latitude) def _get_longitude(self): return self.location.lon if self.location else None def _set_longitude(self, lon): if not self.location: self.location = db.GeoPt() self.location.lon = lon longitude = property(_get_longitude, _set_longitude)
class CandidatePhysicalAddress(CandidateContact): value = db.PostalAddressProperty()