# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import re import urllib from typing import Optional # Regular expression for process_gitblob_url _GITBLOB_RE = re.compile( r"(?Phttps:\/\/?(gist\.)?github.com\/)" r"(?P([\w\.]+\/){1,2})" r"(?P(blob|raw))?" r"(?P(.+)?)" ) def process_gitblob_url(url: str) -> str: """Check url to see if it describes a GitHub Gist "blob" URL. If so, returns a new URL to get the "raw" script. If not, returns URL unchanged. """ # Matches github.com and gist.github.com. Will not match githubusercontent.com. # See this regex with explainer and sample text here: https://regexr.com/4odk3 match = _GITBLOB_RE.match(url) if match: mdict = match.groupdict() # If it has "blob" in the url, replace this with "raw" and we're done. if mdict["blob_or_raw"] == "blob": return "{base}{account}raw{suffix}".format(**mdict) # If it is a "raw" url already, return untouched. if mdict["blob_or_raw"] == "raw": return url # It's a gist. Just tack "raw" on the end. return url + "/raw" return url def get_hostname(url: str) -> Optional[str]: """Return the hostname of a URL (with or without protocol).""" # Just so urllib can parse the URL, make sure there's a protocol. # (The actual protocol doesn't matter to us) if "://" not in url: url = "http://%s" % url parsed = urllib.parse.urlparse(url) return parsed.hostname def print_url(title, url): """Pretty-print a URL on the terminal.""" import click click.secho(" %s: " % title, nl=False, fg="blue") click.secho(url, bold=True)