Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
	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
Esempio n. 6
0
    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
Esempio n. 7
0
    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
Esempio n. 8
0
	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