[feature] add non-exhausive URI validation · python-validators/validators · Discussion #388
are you taking any new suggestions?
0 replies
Constructive ones, please go ahead.
0 replies
--- # Define a list of valid URI schemes => VALID_SCHEMES = ['http', 'https', 'ftp', 'mailto', 'file']
- We could make the parameter-> value(str) flexible perhaps not restrict it to a type str, could be src/path/to/file; which could contain different urls
- do a recursive search(regex expression perhaps) to match pattern
0 replies
is it something we should do?
0 replies
0 replies
can I take up the challenge :)?
0 replies
0 replies
Hey @yozachar ,can we use socket.inet_aton(ip) in python to validate ip addresses as a function then update the schema in uri.py?
# URL-based schemes
if any(
value.startswith(item + "://") for item in {
"ftp", "ftps", "git", "http", "https",
"irc", "rtmp", "rtmps", "rtsp", "sftp",
"ssh", "telnet", "gopher", "ldap", "sip",
"nfs", "mqtt", "smb", "udp"
}
):
0 replies
0 replies
Hi, that is cool I looked at the message thread, something about this error below , was why I thought this feature was asked for I guess, see code below.
import validators
streamurl = "rtmp://192.168.1.123:1935/live/test"
print(validators.url(streamurl))
Output:
ValidationError(func=url, args={'value': 'rtmp://192.168.1.123:1935/live/test'})
Or does it mean we just want to validate other schemas? like the ones few ones below, that I could not find in uri.py
proposed schemas
"Uri": {
"udp": udp://192.168.1.1:1234/path;param=value?,
"gopher": gopher://gopher.example.com/1/path;type=1?search#frag,\
"ldap": ldap://ldap.example.com/cn=John%20Doe,dc=example,dc=com;scope=one?sn#frag, \
"sip":sip://user:password@sip.example.com/path;transport=tcp?subject=Hello#frag, \
"smb": smb://fileserver.example.com/share/path;param=value?query=1#fragment\
}
Few Thoughts
- Have a regex expression : that complies the schema above.
- uri_regrex: re.compile()
e.g
# Validate using regex for URL-based schemes
if uri_regex.match(value):
return True
11 replies
No worries, I had another idea, and implemented it in
It can be optionally further enhanced with providing alternative validate_scheme implementations, like publicly exposing the default one, and maybe some of these:
def accept_all_schemes(scheme): return True def accept_iana_schemes(scheme): # https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml # I do not intend to, but someone might want to implement this as well ... def accept_schemes(*accepted_schemes): def validate(scheme): return scheme in accepted_schemes return validate
which could be used like
validators.url(value, validate_scheme=accept_all_schemes)
validators.url(value, validate_scheme=accept_schemes("http", "https"))
@nandgator
hny! I worked on telnet, just got time to impl. it.
cc PR cheers!