def get_url(url, request, default=None, errors=None): if url is None: return default if re.match("^[a-z]*://", url) is None: # pragma: no cover return url obj = urllib.parse.urlsplit(url) if obj.scheme == "static": netloc = obj.netloc if netloc == "": netloc = "c2cgeoportal:project" return request.static_url(netloc + obj.path) if obj.scheme == "config": server = request.registry.settings.get("servers", {}).get(obj.netloc) if server is None: if default is None and errors is not None: errors.add("The server '{0!s}' is not found in the config".format(obj.netloc)) return default else: return "{0!s}{1!s}?{2!s}".format(server, obj.path, obj.query) else: return url
def get_url2(name, url, request, errors): url_split = urllib.parse.urlsplit(url) if url_split.scheme == "": if url_split.netloc == "" and url_split.path not in ("", "/"): # Relative URL like: /dummy/static/url or dummy/static/url return urllib.parse.urlunsplit(url_split) errors.add( "{}='{}' is not an URL." .format(name, url) ) return None elif url_split.scheme in ("http", "https"): if url_split.netloc == "": errors.add( "{}='{}' is not a valid URL." .format(name, url) ) return None return urllib.parse.urlunsplit(url_split) elif url_split.scheme == "static": if url_split.path in ("", "/"): errors.add( "{}='{}' cannot have an empty path." .format(name, url) ) return None proj = url_split.netloc package = request.registry.settings["package"] if proj == "": proj = "{}_geoportal:static".format(package) elif ":" not in proj: proj = "{}:{}".format(package, proj) return request.static_url( "{}{}".format(proj, url_split.path) ) elif url_split.scheme == "config": if url_split.netloc == "": errors.add( "{}='{}' cannot have an empty netloc." .format(name, url) ) return None server = request.registry.settings.get("servers", {}).get(url_split.netloc) if server is None: errors.add( "The server '{}' is not found in the config".format(url_split.netloc) ) return None if url_split.path != "": if server[-1] != "/": server += "/" url = urllib.parse.urljoin(server, url_split.path[1:]) else: url = server return url if len(url_split.query) == 0 else "{}?{}".format( url, url_split.query, )
def get_url2(name, url, request, errors): url_split = urllib.parse.urlsplit(url) if url_split.scheme == "": if url_split.netloc == "" and url_split.path not in ("", "/"): # Relative URL like: /dummy/static/url or dummy/static/url return urllib.parse.urlunsplit(url_split) errors.add( "{}='{}' is not an URL." .format(name, url) ) return None elif url_split.scheme in ("http", "https"): if url_split.netloc == "": errors.add( "{}='{}' is not a valid URL." .format(name, url) ) return None return urllib.parse.urlunsplit(url_split) elif url_split.scheme == "static": if url_split.path in ("", "/"): errors.add( "{}='{}' cannot have an empty path." .format(name, url) ) return None proj = url_split.netloc package = request.registry.settings["package"] if proj == "": proj = "{}_geoportal:static".format(package) elif ":" not in proj: proj = "{}_geoportal:{}".format(package, proj) return request.static_url( "{}{}".format(proj, url_split.path) ) elif url_split.scheme == "config": if url_split.netloc == "": errors.add( "{}='{}' cannot have an empty netloc." .format(name, url) ) return None server = request.registry.settings.get("servers", {}).get(url_split.netloc) if server is None: errors.add( "The server '{}' is not found in the config".format(url_split.netloc) ) return None if url_split.path != "": if server[-1] != "/": server += "/" url = urllib.parse.urljoin(server, url_split.path[1:]) else: url = server return url if len(url_split.query) == 0 else "{}?{}".format( url, url_split.query, )