def fetch_style_from_url(self, url: str) -> Optional[Path]: """Fetch a style file from a URL, saving the contents in the cache dir.""" if NitpickApp.current().offline: # No style will be fetched in offline mode return None if self._first_full_path and not is_url(url): prefix, rest = self._first_full_path.split(":/") domain_plus_url = str(rest).strip("/").rstrip("/") + "/" + url new_url = "{}://{}".format(prefix, domain_plus_url) else: new_url = url parsed_url = list(urlparse(new_url)) if not parsed_url[2].endswith(TOML_EXTENSION): parsed_url[2] += TOML_EXTENSION new_url = urlunparse(parsed_url) if new_url in self._already_included: return None if not NitpickApp.current().cache_dir: raise FileNotFoundError("Cache dir does not exist") try: response = requests.get(new_url) except requests.ConnectionError: click.secho( "Your network is unreachable. Fix your connection or use {} / {}=1".format( NitpickApp.format_flag(NitpickApp.Flags.OFFLINE), NitpickApp.format_env(NitpickApp.Flags.OFFLINE) ), fg="red", err=True, ) return None if not response.ok: raise FileNotFoundError("Error {} fetching style URL {}".format(response, new_url)) # Save the first full path to be used by the next files without parent. if not self._first_full_path: self._first_full_path = new_url.rsplit("/", 1)[0] contents = response.text style_path = NitpickApp.current().cache_dir / "{}.toml".format(slugify(new_url)) NitpickApp.current().cache_dir.mkdir(parents=True, exist_ok=True) style_path.write_text(contents) LOGGER.info("Loading style from URL %s into %s", new_url, style_path) self._already_included.add(new_url) return style_path
def test_flag_format_env_variable(): """Test flag formatting and env variable.""" class OtherFlags(Enum): """Some flags to be used on the assertions below.""" MULTI_WORD = 1 SOME_OPTION = 2 assert NitpickApp.format_flag( OtherFlags.MULTI_WORD) == "--nitpick-multi-word" os.environ["NITPICK_SOME_OPTION"] = "something" assert NitpickApp.format_env( OtherFlags.SOME_OPTION) == "NITPICK_SOME_OPTION" assert NitpickApp.get_env(OtherFlags.SOME_OPTION) == "something" assert NitpickApp.get_env(OtherFlags.MULTI_WORD) == ""