Beispiel #1
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