def location(self, location): if type(location) is str: location = Point.from_string(location) elif type(location) is not Point: raise ValueError( "Passed object is not Point instance nor string containing coordinates." ) self._location = location
def load_cache(self, wp, destination=None): """Loads details from cache page. Loads all cache details and return fully populated cache object.""" assert type(wp) is str and wp.startswith("GC") logging.info("Loading details about %s...", wp) # assemble request params = urlencode({"wp": wp}) url = self._urls["cache_details"] + "?" + params try: root = self._browser.get(url).soup except requests.exceptions.ConnectionError as e: raise Error("Cannot load cache details page.") from e cache_details = root.find(id="cacheDetails") # check for PM only caches if using free account if cache_details is None: if root.select(".PMOWarning") is not None: raise PMOnlyException("Premium Members only.") # parse raw data name = cache_details.find("h2") cache_type = cache_details.find("img").get("alt") author = cache_details("a")[1] hidden = cache_details.find("div", "minorCacheDetails").find_all("div")[1] location = root.find(id="uxLatLon") state = root.find("ul", "OldWarning") found = root.find("div", "FoundStatus") D_T = root.find("div", "CacheStarLabels").find_all("img") size = root.find("div", "CacheSize").find("img") attributes_raw = root.find_all( "div", "CacheDetailNavigationWidget")[0].find_all("img") user_content = root.find_all("div", "UserSuppliedContent") hint = root.find(id="div_hint") favorites = root.find("span", "favorite-value") # create cache object c = destination or Cache(wp, self) assert isinstance(c, Cache) # prettify data c.name = name.text c.cache_type = cache_type c.author = author.text c.hidden = Util.parse_date(hidden.text.split()[2]) c.location = Point.from_string(location.text) c.state = state is None c.found = found and "Found It!" in found.text or False c.difficulty, c.terrain = [float(_.get("alt").split()[0]) for _ in D_T] c.size = " ".join(size.get("alt").split()[1:]) attributes_raw = [ _.get("src").split('/')[-1].rsplit("-", 1) for _ in attributes_raw ] c.attributes = { attribute_name: appendix.startswith("yes") for attribute_name, appendix in attributes_raw if not appendix.startswith("blank") } c.summary = user_content[0].text c.description = str(user_content[1]) c.hint = Util.rot13(hint.text.strip()) c.favorites = int(favorites.text) logging.debug("Cache loaded: %r", c) return c
def location(self, location): if type(location) is str: location = Point.from_string(location) elif type(location) is not Point: raise ValueError("Passed object is not Point instance nor string containing coordinates.") self._location = location
def load_cache(self, wp, destination=None): """Loads details from cache page. Loads all cache details and return fully populated cache object.""" assert type(wp) is str and wp.startswith("GC") logging.info("Loading details about %s...", wp) # assemble request params = urlencode({"wp": wp}) url = self._urls["cache_details"] + "?" + params try: root = self._browser.get(url).soup except requests.exceptions.ConnectionError as e: raise Error("Cannot load cache details page.") from e cache_details = root.find(id="cacheDetails") # check for PM only caches if using free account if cache_details is None: if root.select(".PMOWarning") is not None: raise PMOnlyException("Premium Members only.") # parse raw data name = cache_details.find("h2") cache_type = cache_details.find("img").get("alt") author = cache_details("a")[1] hidden = cache_details.find("div", "minorCacheDetails").find_all("div")[1] location = root.find(id="uxLatLon") state = root.find("ul", "OldWarning") found = root.find("div", "FoundStatus") D_T = root.find("div", "CacheStarLabels").find_all("img") size = root.find("div", "CacheSize").find("img") attributes_raw = root.find_all("div", "CacheDetailNavigationWidget")[0].find_all("img") user_content = root.find_all("div", "UserSuppliedContent") hint = root.find(id="div_hint") favorites = root.find("span", "favorite-value") # create cache object c = destination or Cache(wp, self) assert isinstance(c, Cache) # prettify data c.name = name.text c.cache_type = cache_type c.author = author.text c.hidden = Util.parse_date(hidden.text.split()[2]) c.location = Point.from_string(location.text) c.state = state is None c.found = found and "Found It!" in found.text or False c.difficulty, c.terrain = [float(_.get("alt").split()[0]) for _ in D_T] c.size = " ".join(size.get("alt").split()[1:]) attributes_raw = [_.get("src").split('/')[-1].rsplit("-", 1) for _ in attributes_raw] c.attributes = {attribute_name: appendix.startswith("yes") for attribute_name, appendix in attributes_raw if not appendix.startswith("blank")} c.summary = user_content[0].text c.description = str(user_content[1]) c.hint = Util.rot13(hint.text.strip()) c.favorites = int(favorites.text) logging.debug("Cache loaded: %r", c) return c
def load_cache_by_url(self, url, destination=None): try: root = self._browser.get(url).soup except requests.exceptions.ConnectionError as e: raise Error("Cannot load cache details page.") from e cache_details = root.find(id="cacheDetails") # check for PM only caches if using free account if cache_details is None: if root.select(".PMOWarning") is not None: raise PMOnlyException("Premium Members only.") # parse raw data wp = root.title.string.split(' ')[0] name = cache_details.find("h2") cache_type = cache_details.find("img").get("src") author = cache_details("a")[1] hidden = cache_details.find("div", "minorCacheDetails").find_all("div")[1] location = root.find(id="uxLatLon") state = root.find("ul", "OldWarning") found = root.find("div", "FoundStatus") D_T = root.find("div", "CacheStarLabels").find_all("img") size = root.find("div", "CacheSize").find("img") attributes_raw = root.find_all( "div", "CacheDetailNavigationWidget")[0].find_all("img") user_content = root.find_all("div", "UserSuppliedContent") hint = root.find(id="div_hint") favorites = root.find("span", "favorite-value") # check for trackables inventory_raw = root.find_all("div", "CacheDetailNavigationWidget") inventory_links = inventory_raw[1].find_all("a") if len(inventory_links) >= 3: trackable_page = self._urls['trackable_base'] + inventory_links[ -3].get("href") else: trackable_page = None # create cache object c = destination or Cache(wp, self) assert isinstance(c, Cache) # prettify data c.name = name.text c.cache_type = Cache.get_cache_type_by_img(cache_type) c.author = author.text c.hidden = Util.parse_date(hidden.text.split(":")[-1]) c.location = Point.from_string(location.text) c.state = state is None c.found = found and "Found It!" in found.text or False c.difficulty, c.terrain = [float(_.get("alt").split()[0]) for _ in D_T] c.size = size.get("src").split("/")[-1].rsplit( ".", 1)[0] # filename of img[src] attributes_raw = [ _.get("src").split('/')[-1].rsplit("-", 1) for _ in attributes_raw ] c.attributes = { attribute_name: appendix.startswith("yes") for attribute_name, appendix in attributes_raw if not appendix.startswith("blank") } c.summary = user_content[0].text c.description = str(user_content[1]) c.hint = Util.rot13(hint.text.strip()) if favorites is None: c.favorites = 0 else: c.favorites = int(favorites.text) if trackable_page is not None: c.trackables = self.load_trackable_list(trackable_page) else: c.trackables = [] logging.debug("Cache loaded: %r", c) return c
def load_cache_by_url(self, url, destination=None): try: root = self._browser.get(url).soup except requests.exceptions.ConnectionError as e: raise Error("Cannot load cache details page.") from e cache_details = root.find(id="cacheDetails") # check for PM only caches if using free account if cache_details is None: if root.select(".PMOWarning") is not None: raise PMOnlyException("Premium Members only.") # parse raw data wp = root.title.string.split(' ')[0] name = cache_details.find("h2") cache_type = cache_details.find("img").get("src") author = cache_details("a")[1] hidden = cache_details.find("div", "minorCacheDetails").find_all("div")[1] location = root.find(id="uxLatLon") state = root.find("ul", "OldWarning") found = root.find("div", "FoundStatus") D_T = root.find("div", "CacheStarLabels").find_all("img") size = root.find("div", "CacheSize").find("img") attributes_raw = root.find_all("div", "CacheDetailNavigationWidget")[0].find_all("img") user_content = root.find_all("div", "UserSuppliedContent") hint = root.find(id="div_hint") favorites = root.find("span", "favorite-value") # check for trackables inventory_raw = root.find_all("div", "CacheDetailNavigationWidget") inventory_links = inventory_raw[1].find_all("a") if len(inventory_links) >= 3: trackable_page = self._urls['trackable_base'] + inventory_links[-3].get("href") else: trackable_page = None # create cache object c = destination or Cache(wp, self) assert isinstance(c, Cache) # prettify data c.name = name.text c.cache_type = Cache.get_cache_type_by_img(cache_type) c.author = author.text c.hidden = Util.parse_date(hidden.text.split(":")[-1]) c.location = Point.from_string(location.text) c.state = state is None c.found = found and "Found It!" in found.text or False c.difficulty, c.terrain = [float(_.get("alt").split()[0]) for _ in D_T] c.size = size.get("src").split("/")[-1].rsplit(".", 1)[0] # filename of img[src] attributes_raw = [_.get("src").split('/')[-1].rsplit("-", 1) for _ in attributes_raw] c.attributes = {attribute_name: appendix.startswith("yes") for attribute_name, appendix in attributes_raw if not appendix.startswith("blank")} c.summary = user_content[0].text c.description = str(user_content[1]) c.hint = Util.rot13(hint.text.strip()) if favorites is None: c.favorites = 0 else: c.favorites = int(favorites.text) if trackable_page is not None: c.trackables = self.load_trackable_list(trackable_page) else: c.trackables = [] logging.debug("Cache loaded: %r", c) return c