Example #1
0
	def pass_file(self, url):
		if self.user:
			user_keyname = self.user.key().name()
		else:
			user_keyname = '_no_user'
		safe_url = url
		key_name = "%s_%s" % (user_keyname, safe_url)
		
		pass_template = PassTemplate.get_by_key_name(key_name)
		if pass_template:
			new = False
		else:
			new = True
			pass_template = PassTemplate(key_name=key_name, url=url)
			if self.user:
				pass_template.owner = self.user
			from utils import string as str_utils
			code = str_utils.genkey(length=4)
			pass_template.short_code = code
			pass_template.put()			

		# TODO: download and parse file to update it
		# TODO: check last modified, only update if not modified in over x hours
		if new or pass_template.modified < (datetime.datetime.now() - datetime.timedelta(hours=1)):
			logging.info('deferring update from passfile')
			deferred.defer(update_from_passfile, key_name)
		else:
			logging.info('this pass was modified too recently')

		return pass_template	
Example #2
0
    def pass_file(self, url):
        if self.user:
            user_keyname = self.user.key().name()
        else:
            user_keyname = '_no_user'
        safe_url = url
        key_name = "%s_%s" % (user_keyname, safe_url)

        pass_template = PassTemplate.get_by_key_name(key_name)
        if pass_template:
            new = False
        else:
            new = True
            pass_template = PassTemplate(key_name=key_name, url=url)
            if self.user:
                pass_template.owner = self.user
            from utils import string as str_utils
            code = str_utils.genkey(length=4)
            pass_template.short_code = code
            pass_template.put()

        # TODO: download and parse file to update it
        # TODO: check last modified, only update if not modified in over x hours
        if new or pass_template.modified < (datetime.datetime.now() -
                                            datetime.timedelta(hours=1)):
            logging.info('deferring update from passfile')
            deferred.defer(update_from_passfile, key_name)
        else:
            logging.info('this pass was modified too recently')

        return pass_template
Example #3
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
Example #4
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