Comments (10)
Or just remove it, it's been deprecated for a few releases.
from rfc3986.
rfc3986.is_valid_uri("Hi Super Nintendo Chalmers") # -> True
rfc3986.is_valid_uri("My cat's breath smells like cat food.") # -> True
rfc3986.is_valid_uri("I'm learnding!") # -> True
Something is deeply wrong here.
from rfc3986.
Really this method should be is_valid_uri_reference()
, but each of these are valid URI references.
# A no-scheme path with zero extra segments
>>> rfc3986.uri_reference('1')
URIReference(scheme=None, authority=None, path='1', query=None, fragment=None)
# A relative-ref with an empty path and no scheme.
>>> rfc3986.uri_reference('//')
URIReference(scheme=None, authority=None, path=None, query=None, fragment=None)
# A relative-ref with a non-empty path and a fragment.
>>> rfc3986.uri_reference('http#:/')
URIReference(scheme=None, authority=None, path='http', query=None, fragment=':/')
from rfc3986.
Right. There's a far better and more comprehensive way of doing validations
from rfc3986.
https://rfc3986.readthedocs.io/en/latest/user/validating.html
from rfc3986.
@bugeats All of those examples pass the validation check because URIReference.from_string()
does normalization which converts characters within components that can be percent-encoded into their percent-encoded counterparts before calling is_valid()
(Meaning all of that text ends up being a percent encoded path
). And because there aren't any kwargs
to "require" any component in particular we get a result of True
.
Using the Validator
interface makes this all more clear.
You can achieve what I believe you want via:
def is_valid_uri_with_scheme_and_host(uri):
try:
uri = rfc3986.URIReference.from_string(uri)
rfc3986.validators.Validator().require_presence_of("scheme", "host").check_validity_of("scheme", "host").validate(uri)
return True
except MissingComponentError, InvalidComponentsError:
return False
Will return False
for all your examples but True
for https://www.google.com/
and the like.
from rfc3986.
Yes I eventually figured that out, thanks for the detailed response. I mostly wanted to point out the absurdity of the code as it reads. I humbly suggest that you reconsider the name of that method.
from rfc3986.
I want to use this library to detect foo bar
(with a space) as an invalid URI with regard to RFC 3986. All parts of the API of this library that I have seen so far auto-correct foo bar
to foo%20bar
for me. How can I disable that behavior and get an exception, instead? What class and functions can I use for strict parsing behavior if is_valid_uri
and .is_valid
are not strict? Thanks!
from rfc3986.
Anyone?
from rfc3986.
Almost a year late to the party here.
If you don't mind using something home-grown, you could try using it.
I went through RFC3986 and converted all the ABNF to regexes.
I left the ABNF in comments above the regexes so you can verify the code for yourself.
from rfc3986.
Related Issues (20)
- ParseResult.fromString accepts ports that aren't preceded by a ':' character
- To encode or not encode - best practices for "uncommon" uri characters, including whitespaces (%20)? HOT 1
- 2.0.1 patch release? HOT 2
- any way to validate only relative path? HOT 1
- The remove_dot_segments() function returns a relative path for an absolute input path after removing dot-dot segments. HOT 1
- URLs ending in "\n" are stripped of the new-line before normalization
- Simple typo in the URIReference docstring in src/rfc3986/uri.py
- Newest release not are not shown on https://rfc3986.readthedocs.io HOT 2
- ccccccgcdkhvdkfdifgedbbhgrdkkbnnchvufulbtlhn HOT 1
- Empty (but present) authority component lost
- 1.5.0: pytest `DeprecationWarning` warnings HOT 1
- Resolving a relative URI Reference against a base with only an authority does not work HOT 2
- Resolution result is not consistent with RFC 3986 when the base has "rootless" path without authority
- The first path segment is unexpectedly interpreted as an authority after normalization
- URIMixin.resolve_with emits a warning
- PATH_EMPTY regex does not actually match empty path HOT 3
- Host ']' HOT 6
- ":" in relative path within relative reference HOT 1
- 2.0.1 patch release? HOT 1
- Parsing of fragments through ParseResult.fromString can be cut short by a newline character
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rfc3986.