def find(self, query=None, create="true", user=None, code=None, **kwargs): self.query, self.create, self.user = self.sanitize(query), create, user if code: from model.user import User self.user = User.all().filter("short_code", code).get() if self.create == "true": self.create = True else: # you must manually set create to something besides true self.create = False if query: logging.info("query for FindLocation " + query) from backend.location.update import get_loc_code loc_code = get_loc_code(query) # this is very imprecise! actual search is needed loc = None loc_results = self.search() logging.info(loc_results) if loc_results: loc_doc = loc_results[0] for f in loc_doc.fields: logging.info(f.name) logging.info(f.value) loc = Location.get_by_key_name(loc_doc.fields[1].value) if loc: logging.info("found location %s in db" % loc.code) if not loc and self.create: logging.info("creating new location for %s" % query) from backend.location.update import LocationUpdate loc_updater = LocationUpdate() loc = loc_updater.create_or_update(name=query, code=loc_code) # a lot of other fields... return loc # hasn't saved loc_query = Location.all() if self.user and not self.user.is_admin(): loc_query = loc_query.filter("owner", self.user) locs = loc_query.fetch(1000) return locs
def find(self, query=None, create='true', user=None, code=None, **kwargs): self.query, self.create, self.user = self.sanitize(query), create, user if code: from model.user import User self.user = User.all().filter('short_code', code).get() if self.create == 'true': self.create = True else: # you must manually set create to something besides true self.create = False if query: logging.info('query for FindLocation ' + query) from backend.location.update import get_loc_code loc_code = get_loc_code(query) # this is very imprecise! actual search is needed loc = None loc_results = self.search() logging.info(loc_results) if loc_results: loc_doc = loc_results[0] for f in loc_doc.fields: logging.info(f.name) logging.info(f.value) loc = Location.get_by_key_name(loc_doc.fields[1].value) if loc: logging.info('found location %s in db' % loc.code) if not loc and self.create: logging.info('creating new location for %s' % query) from backend.location.update import LocationUpdate loc_updater = LocationUpdate() loc = loc_updater.create_or_update( name=query, code=loc_code) # a lot of other fields... return loc # hasn't saved loc_query = Location.all() if self.user and not self.user.is_admin(): loc_query = loc_query.filter('owner', self.user) locs = loc_query.fetch(1000) return locs
def get_location(self, reset=False): if not self.location_code: return {} if (reset or not self.loc_info): logging.info('resetting location info for pass %s - this should not happen on Index requests!' % self.full_name()) from model.activity import Location loc = Location.get_by_key_name(self.location_code) self.loc_info = loc.property_dict() self.put() return self.loc_info
def get_location(self, reset=False): if not self.location_code: return {} if (reset or not self.loc_info): logging.info( 'resetting location info for pass %s - this should not happen on Index requests!' % self.full_name()) from model.activity import Location loc = Location.get_by_key_name(self.location_code) self.loc_info = loc.property_dict() self.put() return self.loc_info
def create_or_update(self, name=None, slug=None, description=None, price=None, schedule=None, neighborhood_name=None, location=None, location_code=None, price_rating=None, api=False, image_url=None, url=None, user=None, organizationName=None, organizationUrl=None, **kwargs): self.user = user if url: # this does not allow file-based passes to have updated listings on Passtiche return self.pass_file(url) if not slug: slug = PassTemplate.get_slug(name) or 'event' keyname = slug if location_code: keyname += "-%s" % location_code if self.user: keyname += "~%s" % self.user.short_code logging.info(kwargs) if kwargs.get('new'): pass_template = None else: logging.info('getting pass template %s' % keyname) pass_template = PassTemplate.get_by_key_name(keyname) if pass_template: logging.info('found pass template %s' % keyname) if not pass_template: logging.info('creating new pass template') pass_template = PassTemplate(key_name=keyname, name=name, slug=slug) from utils import string as str_utils code = str_utils.genkey(length=4) pass_template.short_code = code if self.user and not self.user.is_admin(): pass_template.owner = self.user if not location and location_code: from model.activity import Location location = Location.get_by_key_name(location_code) if location: location_name = location.name else: location_name = '' searchFields = [search.TextField(name='name', value=name), search.TextField(name='code', value=code), search.TextField(name='keyname', value=keyname), search.TextField(name='loc', value=(location_code or '')), search.TextField(name='location_name', value=location_name), search.DateField(name='date', value=datetime.datetime.now().date())] if self.user: searchFields.append(search.TextField(name='owner', value=self.user.short_code)) pass_doc = search.Document(fields=searchFields) logging.info('adding pass doc to index') search.Index(name=_INDEX_NAME).put(pass_doc) elif name: pass_template.name = name if description: pass_template.description = description if price: pass_template.price = int(price) if price_rating is not None: pass_template.price_rating = price_rating if organizationName: pass_template.organizationName = organizationName if organizationUrl: if not organizationUrl.startswith('http://'): organizationUrl = 'http://%s' % organizationUrl pass_template.organizationUrl = organizationUrl if image_url: pass_template.image_url = image_url if schedule: pass_template.schedule = schedule pass_template = set_time_format(pass_template) # TODO: starts time if neighborhood_name: pass_template.neighborhood_name = neighborhood_name if location_code: if location: loc = location else: from model.activity import Location loc = Location.get_by_key_name(location_code) pass_template.location_code = loc.code pass_template.location_name = loc.name pass_template.get_location(reset=True) return pass_template
def create_or_update(self, name=None, slug=None, description=None, price=None, schedule=None, neighborhood_name=None, location=None, location_code=None, price_rating=None, api=False, image_url=None, url=None, user=None, organizationName=None, organizationUrl=None, **kwargs): self.user = user if url: # this does not allow file-based passes to have updated listings on Passtiche return self.pass_file(url) if not slug: slug = PassTemplate.get_slug(name) or 'event' keyname = slug if location_code: keyname += "-%s" % location_code if self.user: keyname += "~%s" % self.user.short_code logging.info(kwargs) if kwargs.get('new'): pass_template = None else: logging.info('getting pass template %s' % keyname) pass_template = PassTemplate.get_by_key_name(keyname) if pass_template: logging.info('found pass template %s' % keyname) if not pass_template: logging.info('creating new pass template') pass_template = PassTemplate(key_name=keyname, name=name, slug=slug) from utils import string as str_utils code = str_utils.genkey(length=4) pass_template.short_code = code if self.user and not self.user.is_admin(): pass_template.owner = self.user if not location and location_code: from model.activity import Location location = Location.get_by_key_name(location_code) if location: location_name = location.name else: location_name = '' searchFields = [ search.TextField(name='name', value=name), search.TextField(name='code', value=code), search.TextField(name='keyname', value=keyname), search.TextField(name='loc', value=(location_code or '')), search.TextField(name='location_name', value=location_name), search.DateField(name='date', value=datetime.datetime.now().date()) ] if self.user: searchFields.append( search.TextField(name='owner', value=self.user.short_code)) pass_doc = search.Document(fields=searchFields) logging.info('adding pass doc to index') search.Index(name=_INDEX_NAME).put(pass_doc) elif name: pass_template.name = name if description: pass_template.description = description if price: pass_template.price = int(price) if price_rating is not None: pass_template.price_rating = price_rating if organizationName: pass_template.organizationName = organizationName if organizationUrl: if not organizationUrl.startswith('http://'): organizationUrl = 'http://%s' % organizationUrl pass_template.organizationUrl = organizationUrl if image_url: pass_template.image_url = image_url if schedule: pass_template.schedule = schedule pass_template = set_time_format(pass_template) # TODO: starts time if neighborhood_name: pass_template.neighborhood_name = neighborhood_name if location_code: if location: loc = location else: from model.activity import Location loc = Location.get_by_key_name(location_code) pass_template.location_code = loc.code pass_template.location_name = loc.name pass_template.get_location(reset=True) return pass_template
def create_or_update(self, name=None, code=None, phone=None, yelp=None, opentable=None, website=None, neighborhood_name=None, street_address=None, region_name=None, region_code=None, user=None, **kwargs): if code: loc_code = code else: loc_code = get_loc_code(name) loc = Location.get_by_key_name(loc_code) if not loc: loc = Location(key_name=loc_code, code=loc_code, name=name) if user and not user.is_admin(): loc.owner = user loc_doc = search.Document(fields=[ search.TextField(name='name', value=name), search.TextField(name='code', value=loc_code), search.DateField(name='date', value=datetime.datetime.now().date()) ]) logging.info('adding loc doc to index') search.Index(name=_INDEX_NAME).add(loc_doc) # TODO: get updates after creation, but without overwriting manual values and being throttled self.get_loc_info(loc) elif name: loc.name = name if phone is not None: loc.phone = phone if yelp is not None: loc.yelp = yelp if not loc.yelp: import urllib loc.yelp = 'http://www.yelp.com/search?find_desc=%s&find_loc=%s' % ( urllib.quote_plus(loc.name), urllib.quote_plus(region_name or 'San Francisco')) if opentable is not None: loc.opentable = opentable if website is not None: loc.website = website if neighborhood_name is not None: loc.neighborhood_name = neighborhood_name if street_address is not None: loc.street_address = street_address if region_name is not None: loc.region_name = region_name if region_code is not None: loc.region_code = region_code return loc
def create_or_update(self, name=None, code=None, phone=None, yelp=None, opentable=None, website=None, neighborhood_name=None, street_address=None, region_name=None, region_code=None, user=None, **kwargs): if code: loc_code = code else: loc_code = get_loc_code(name) loc = Location.get_by_key_name(loc_code) if not loc: loc = Location(key_name=loc_code, code=loc_code, name=name) if user and not user.is_admin(): loc.owner = user loc_doc = search.Document(fields=[search.TextField(name='name', value=name), search.TextField(name='code', value=loc_code), search.DateField(name='date', value=datetime.datetime.now().date())]) logging.info('adding loc doc to index') search.Index(name=_INDEX_NAME).add(loc_doc) # TODO: get updates after creation, but without overwriting manual values and being throttled self.get_loc_info(loc) elif name: loc.name = name if phone is not None: loc.phone = phone if yelp is not None: loc.yelp = yelp if not loc.yelp: import urllib loc.yelp = 'http://www.yelp.com/search?find_desc=%s&find_loc=%s' % ( urllib.quote_plus(loc.name), urllib.quote_plus(region_name or 'San Francisco')) if opentable is not None: loc.opentable = opentable if website is not None: loc.website = website if neighborhood_name is not None: loc.neighborhood_name = neighborhood_name if street_address is not None: loc.street_address = street_address if region_name is not None: loc.region_name = region_name if region_code is not None: loc.region_code = region_code return loc