Beispiel #1
0
 def search(self, flag, search_by):
     logger.info("-" * 70)
     logger.info("Survey {survey_id}, for {search_area_name}".format(
         survey_id=self.survey_id, search_area_name=self.search_area_name
     ))
     ABSurvey.update_survey_entry(self, self.config.SEARCH_AREA_GLOBAL)
     room_count = 0
     while room_count < self.config.FILL_MAX_ROOM_COUNT:
         try:
             # get a random candidate room_id
             room_id = random.randint(0, self.config.ROOM_ID_UPPER_BOUND)
             listing = ABListing(self.config, room_id, self.survey_id)
             if room_id is None:
                 break
             else:
                 if listing.ws_get_room_info(self.config.FLAGS_ADD):
                     room_count += 1
         except AttributeError:
             logger.error(
                 "Attribute error: marking room as deleted.")
             listing.save_as_deleted()
         except Exception as ex:
             logger.exception("Error in search:" + str(type(ex)))
             raise
     self.fini()
def main():
    (parser, args) = parse_args()
    logging.basicConfig(format='%(levelname)-8s%(message)s')
    ab_config = ABConfig(args)
    try:
        if args.search:
            survey = ABSurveyByNeighborhood(ab_config, args.search)
            survey.search(ab_config.FLAGS_ADD)
        elif args.search_by_neighborhood:
            survey = ABSurveyByNeighborhood(ab_config, args.search_by_neighborhood)
            survey.search(ab_config.FLAGS_ADD)
        elif args.search_by_zipcode:
            survey = ABSurveyByZipcode(ab_config, args.search_by_zipcode)
            survey.search(ab_config.FLAGS_ADD)
        elif args.search_by_bounding_box:
            survey = ABSurveyByBoundingBox(ab_config, args.search_by_bounding_box)
            survey.search(ab_config.FLAGS_ADD)
        elif args.fill is not None:
            fill_loop_by_room(ab_config, args.fill)
        elif args.addsearcharea:
            ws_get_city_info(ab_config, args.addsearcharea, ab_config.FLAGS_ADD)
        elif args.addsurvey:
            db_add_survey(ab_config, args.addsurvey)
        elif args.dbping:
            db_ping(ab_config)
        elif args.displayhost:
            display_host(ab_config, args.displayhost)
        elif args.displayroom:
            display_room(ab_config, args.displayroom)
        elif args.listsearcharea:
            list_search_area_info(ab_config, args.listsearcharea)
        elif args.listroom:
            listing = ABListing(ab_config, args.listroom, None)
            listing.print_from_db()
        elif args.listsurveys:
            list_surveys(ab_config)
        elif args.printsearcharea:
            ws_get_city_info(ab_config, args.printsearcharea, ab_config.FLAGS_PRINT)
        elif args.printroom:
            listing = ABListing(ab_config, args.printroom, None)
            listing.ws_get_room_info(ab_config.FLAGS_PRINT)
        elif args.printsearch:
            survey = ABSurveyByNeighborhood(ab_config, args.printsearch)
            survey.search(ab_config.FLAGS_PRINT)
        elif args.printsearch_by_neighborhood:
            survey = ABSurveyByNeighborhood(ab_config, args.printsearch_by_neighborhood)
            survey.search(ab_config.FLAGS_PRINT)
        elif args.printsearch_by_bounding_box:
            survey = ABSurveyByBoundingBox(ab_config, args.printsearch_by_bounding_box)
            survey.search(ab_config.FLAGS_PRINT)
        elif args.printsearch_by_zipcode:
            survey = ABSurveyByZipcode(ab_config, args.printsearch_by_zipcode)
            survey.search(ab_config.FLAGS_PRINT)
        else:
            parser.print_help()
    except (SystemExit, KeyboardInterrupt):
        sys.exit()
    except Exception:
        logging.exception("Top level exception handler: quitting.")
        sys.exit(0)
def db_get_room_to_fill(config, survey_id):
    """
    For "fill" runs (loops over room pages), choose a random room that has
    not yet been visited in this "fill".
    """
    for attempt in range(config.MAX_CONNECTION_ATTEMPTS):
        try:
            conn = config.connect()
            cur = conn.cursor()
            if survey_id == 0:  # no survey specified
                sql = """
                    select room_id, survey_id
                    from room
                    where deleted is null
                    order by random()
                    limit 1
                    """
                cur.execute(sql)
            else:
                sql = """
                    select room_id, survey_id
                    from room
                    where deleted is null
                    and survey_id = %s
                    order by random()
                    limit 1
                    """
                cur.execute(sql, (survey_id,))
            (room_id, survey_id) = cur.fetchone()
            listing = ABListing(config, room_id, survey_id)
            cur.close()
            conn.commit()
            return listing
        except TypeError:
            logging.info("Finishing: no unfilled rooms in database --")
            conn.rollback()
            del config.connection
            return None
        except Exception:
            logging.exception("Error retrieving room to fill from db")
            conn.rollback()
            del config.connection
    return None
Beispiel #4
0
 def listing_from_search_page_json(self, result, room_id, room_type):
     try:
         listing = ABListing(self.config, room_id, self.survey_id,
                             room_type)
         # listing
         json_listing = result["listing"]
         listing.host_id = json_listing["primary_host"][
             "id"] if "primary_host" in json_listing else None
         listing.address = json_listing[
             "public_address"] if "public_address" in json_listing else None
         listing.reviews = json_listing[
             "reviews_count"] if "reviews_count" in json_listing else None
         listing.overall_satisfaction = json_listing[
             "star_rating"] if "star_rating" in json_listing else None
         listing.accommodates = json_listing[
             "person_capacity"] if "person_capacity" in json_listing else None
         listing.bedrooms = json_listing[
             "bedrooms"] if "bedrooms" in json_listing else None
         listing.latitude = json_listing[
             "lat"] if "lat" in json_listing else None
         listing.longitude = json_listing[
             "lng"] if "lng" in json_listing else None
         listing.coworker_hosted = json_listing[
             "coworker_hosted"] if "coworker_hosted" in json_listing else None
         listing.extra_host_languages = json_listing["extra_host_languages"] \
             if "extra_host_languages" in json_listing else None
         listing.name = json_listing[
             "name"] if "name" in json_listing else None
         listing.property_type = json_listing[
             "property_type"] if "property_type" in json_listing else None
         # pricing
         json_pricing = result["pricing_quote"]
         listing.price = json_pricing["rate"][
             "amount"] if "rate" in json_pricing else None
         listing.currency = json_pricing["rate"][
             "currency"] if "rate" in json_pricing else None
         listing.rate_type = json_pricing[
             "rate_type"] if "rate_type" in json_pricing else None
         return listing
     except:
         logger.exception(
             "Error in survey.listing_from_search_page_json: returning None"
         )
         sys.exit(-1)
         return None