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
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