[feature] add non-exhausive URI validation · python-validators/validators · Discussion #388

Discussion options

You must be logged in to vote
Comment options

are you taking any new suggestions?

You must be logged in to vote

0 replies

Comment options

Constructive ones, please go ahead.

You must be logged in to vote

0 replies

Comment options

--- # Define a list of valid URI schemes => VALID_SCHEMES = ['http', 'https', 'ftp', 'mailto', 'file']

  1. 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
  2. do a recursive search(regex expression perhaps) to match pattern
You must be logged in to vote

0 replies

Comment options

is it something we should do?

You must be logged in to vote

0 replies

Comment options

You must be logged in to vote

0 replies

Comment options

can I take up the challenge :)?

You must be logged in to vote

0 replies

Comment options

You must be logged in to vote

0 replies

Comment options

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"
        }
    ):
You must be logged in to vote

0 replies

Comment options

You must be logged in to vote

0 replies

Comment options

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

  1. Have a regex expression : that complies the schema above.
  2. uri_regrex: re.compile()
    e.g
  # Validate using regex for URL-based schemes
    if uri_regex.match(value):
        return True
You must be logged in to vote

11 replies

@e3krisztian

Comment options

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"))

@tofetpuzo

Comment options

Apologies, I have been "mia". Has this feature been implemented?

@nandgator

Comment options

Apologies, I have been "mia". Has this feature been implemented?

Nope.

#409 (comment)

@tofetpuzo

Comment options

I will work on it I have been super busy, I have started already.

@tofetpuzo

Comment options

@nandgator
hny! I worked on telnet, just got time to impl. it.
cc PR cheers!