Visitar URL original
[feature] add non-exhausive URI validation · Issue #352 · python-validators/validators · GitHub
Skip to content

[feature] add non-exhausive URI validation #352

Description

@nandgator

Suggestions are welcome:

@validator
def uri(value: str, /):
"""Return whether or not given value is a valid URI.
Examples:
>>> uri('mailto:example@domain.com')
# Output: True
>>> uri('file:path.txt')
# Output: ValidationError(func=uri, ...)
Args:
value:
URI to validate.
Returns:
(Literal[True]): If `value` is a valid URI.
(ValidationError): If `value` is an invalid URI.
"""

Activity

  1. linked a pull request that will close this issuefeat: lays foundation for URI validation #353on Apr 3, 2024
  2. pinned this issue on Apr 9, 2024
  3. tofetpuzo commented on Jun 23, 2024

    @tofetpuzo

    are you taking any new suggestions?

  4. nandgator commented on Jun 24, 2024

    @nandgator
    CollaboratorAuthor

    Constructive ones, please go ahead.

  5. tofetpuzo commented on Jun 24, 2024

    @tofetpuzo

    --- # 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
  6. tofetpuzo commented on Jun 26, 2024

    @tofetpuzo

    is it something we should do?

  7. nandgator commented on Jun 27, 2024

    @nandgator
    CollaboratorAuthor

    Something similar yeah.

  8. tofetpuzo commented on Jul 3, 2024

    @tofetpuzo

    can I take up the challenge :)?

  9. nandgator commented on Jul 4, 2024

    @nandgator
    CollaboratorAuthor

    Sure, go ahead.

  10. tofetpuzo commented on Jul 9, 2024

    @tofetpuzo

    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"
            }
        ):
    
  11. nandgator commented on Jul 10, 2024

    @nandgator
    CollaboratorAuthor

    IP addresses are already validated in ip_address.py. Why use socket.inet_aton?

  12. tofetpuzo commented on Jul 10, 2024

    @tofetpuzo

    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
    
  13. locked and limited conversation to collaborators on Jul 10, 2024
  14. converted this issue into a discussion #388 on Jul 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementIssue/PR: A new feature

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions