rfc3986-validator-0.1.1/0000755000175000017500000000000014147445262012703 5ustar jdgjdgrfc3986-validator-0.1.1/rfc3986_validator.py0000644000175000017500000001045314147445262016431 0ustar jdgjdgimport re __version__ = '0.1.1' __author__ = 'Nicolas Aimetti ' __all__ = ['validate_rfc3986'] # Following regex rules references the ABNF terminology from # [RFC3986](https://tools.ietf.org/html/rfc3986#appendix-A) # IPv6 validation rule IPv6_RE = ( r"(?:(?:[0-9A-Fa-f]{1,4}:){6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][" r"0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|::(?:[0-9A-Fa-f]{1,4}:){5}(?:[0-9A-Fa-f]{1," r"4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][" r"0-9]?))|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[" r"0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1," r"4}:)?[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][" r"0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){," r"2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][" r"0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){," r"3}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:)(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[" r"01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){,4}[0-9A-Fa-f]{1," r"4})?::(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[" r"0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[" r"0-9A-Fa-f]{1,4}:){,6}[0-9A-Fa-f]{1,4})?::)" ) # An authority is defined as: [ userinfo "@" ] host [ ":" port ] # \[(?:{ip_v6} | v[0-9A-Fa-f]+\.[a-zA-Z0-9_.~\-!$ & '()*+,;=:]+)\] # IP-literal AUTHORITY_RE = r""" (?:(?:[a-zA-Z0-9_.~\-!$&'()*+,;=:]|%[0-9A-Fa-f]{{2}})*@)? # user info (?: \[(?:{ip_v6}|v[0-9A-Fa-f]+\.[a-zA-Z0-9_.~\-!$&'()*+,;=:]+)\] # IP-literal | (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){{3}}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) # IPv4 | (?:[a-zA-Z0-9_.~\-!$&'()*+,;=]|%[0-9A-Fa-f]{{2}})* # reg-name ) # host (?::[0-9]*)? # port """.format(ip_v6=IPv6_RE,) # Path char regex rule PCHAR_RE = r"(?:[a-zA-Z0-9_.~\-!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})" # Query and Fragment rules are exactly the same QUERY_RE = r"(?:[a-zA-Z0-9_.~\-!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})*" # An URI is defined as: scheme ":" hier-part [ "?" query ] [ "#" fragment ] URI_RE = r""" [a-zA-Z][a-zA-Z0-9+.-]* #scheme : (?: // {authority} (?:/{pchar}*)* # path-abempty | /(?:{pchar}+ (?:/{pchar}*)*)? # path-absolute | {pchar}+ (?:/{pchar}*)* # path-rootless | # or nothing ) # hier-part (?:\?{query})? # Query (?:\#{fragment})? # Fragment """.format( authority=AUTHORITY_RE, query=QUERY_RE, fragment=QUERY_RE, pchar=PCHAR_RE ) # A relative-ref is defined as: relative-part [ "?" query ] [ "#" fragment ] RELATIVE_REF_RE = r""" (?: // {authority} (?:/{pchar}*)* # path-abempty | /(?:{pchar}+ (?:/{pchar}*)*)? # path-absolute | (?:[a-zA-Z0-9_.~\-!$&'()*+,;=@]|%[0-9A-Fa-f]{{2}})+ (?:/{pchar}*)* # path-noscheme | # or nothing ) # relative-part (?:\?{query})? # Query (?:\#{fragment})? # Fragment """.format( authority=AUTHORITY_RE, query=QUERY_RE, fragment=QUERY_RE, pchar=PCHAR_RE ) # Compiled URI regex rule URI_RE_COMP = re.compile(r"^{uri_re}$".format(uri_re=URI_RE), re.VERBOSE) # Compiled URI-reference regex rule. URI-reference is defined as: URI / relative-ref URI_REF_RE_COMP = re.compile(r"^(?:{uri_re}|{relative_ref})$".format( uri_re=URI_RE, relative_ref=RELATIVE_REF_RE, ), re.VERBOSE) def validate_rfc3986(url, rule='URI'): """ Validates strings according to RFC3986 :param url: String cointaining URI to validate :param rule: It could be 'URI' (default) or 'URI_reference'. :return: True or False """ if rule == 'URI': return URI_RE_COMP.match(url) elif rule == 'URI_reference': return URI_REF_RE_COMP.match(url) else: raise ValueError('Invalid rule') rfc3986-validator-0.1.1/.github/0000755000175000017500000000000014147445262014243 5ustar jdgjdgrfc3986-validator-0.1.1/.github/ISSUE_TEMPLATE.md0000644000175000017500000000051014147445262016744 0ustar jdgjdg* rfc3986-validator version: * Python version: * Operating System: ### Description Describe what you were trying to get done. Tell us what happened, what went wrong, and what you expected to happen. ### What I Did ``` Paste the command(s) you ran and the output. If there was a crash, please include the traceback here. ``` rfc3986-validator-0.1.1/CONTRIBUTING.rst0000644000175000017500000000706114147445262015350 0ustar jdgjdg.. highlight:: shell ============ Contributing ============ Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given. You can contribute in many ways: Types of Contributions ---------------------- Report Bugs ~~~~~~~~~~~ Report bugs at https://github.com/naimetti/rfc3986_validator/issues. If you are reporting a bug, please include: * Your operating system name and version. * Any details about your local setup that might be helpful in troubleshooting. * Detailed steps to reproduce the bug. Fix Bugs ~~~~~~~~ Look through the GitHub issues for bugs. Anything tagged with "bug" and "help wanted" is open to whoever wants to implement it. Implement Features ~~~~~~~~~~~~~~~~~~ Look through the GitHub issues for features. Anything tagged with "enhancement" and "help wanted" is open to whoever wants to implement it. Write Documentation ~~~~~~~~~~~~~~~~~~~ rfc3986-validator could always use more documentation, whether as part of the official rfc3986-validator docs, in docstrings, or even on the web in blog posts, articles, and such. Submit Feedback ~~~~~~~~~~~~~~~ The best way to send feedback is to file an issue at https://github.com/naimetti/rfc3986_validator/issues. If you are proposing a feature: * Explain in detail how it would work. * Keep the scope as narrow as possible, to make it easier to implement. * Remember that this is a volunteer-driven project, and that contributions are welcome :) Get Started! ------------ Ready to contribute? Here's how to set up `rfc3986_validator` for local development. 1. Fork the `rfc3986_validator` repo on GitHub. 2. Clone your fork locally:: $ git clone git@github.com:your_name_here/rfc3986_validator.git 3. Install your local copy into a virtualenv. Assuming you have virtualenvwrapper installed, this is how you set up your fork for local development:: $ mkvirtualenv rfc3986_validator $ cd rfc3986_validator/ $ python setup.py develop 4. Create a branch for local development:: $ git checkout -b name-of-your-bugfix-or-feature Now you can make your changes locally. 5. When you're done making changes, check that your changes pass flake8 and the tests, including testing other Python versions with tox:: $ flake8 rfc3986_validator tests $ python setup.py test or pytest $ tox To get flake8 and tox, just pip install them into your virtualenv. 6. Commit your changes and push your branch to GitHub:: $ git add . $ git commit -m "Your detailed description of your changes." $ git push origin name-of-your-bugfix-or-feature 7. Submit a pull request through the GitHub website. Pull Request Guidelines ----------------------- Before you submit a pull request, check that it meets these guidelines: 1. The pull request should include tests. 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.rst. 3. The pull request should work for Python 2.7, 3.5, 3.6, 3.7 and 3.8, and for PyPy. Check https://travis-ci.org/naimetti/rfc3986_validator/pull_requests and make sure that the tests pass for all supported Python versions. Tips ---- To run a subset of tests:: $ pytest tests.test_rfc3986_validator Deploying --------- A reminder for the maintainers on how to deploy. Make sure all your changes are committed (including an entry in HISTORY.rst). Then run:: $ bump2version patch # possible: major / minor / patch $ git push $ git push --tags Travis will then deploy to PyPI if tests pass. rfc3986-validator-0.1.1/README.md0000644000175000017500000000142514147445262014164 0ustar jdgjdg# rfc3986-validator A pure python RFC3986 validator [![image](https://img.shields.io/pypi/v/rfc3986_validator.svg)](https://pypi.python.org/pypi/rfc3986_validator) [![Build Status](https://travis-ci.org/naimetti/rfc3986-validator.svg?branch=master)](https://travis-ci.org/naimetti/rfc3986-validator) # Install ```shell script pip install rfc3986-validator ``` # Usage ```pycon >>> from rfc3986_validator import validate_rfc3986 >>> validate_rfc3986('http://foo.bar?q=Spaces should be encoded') False >>> validate_rfc3986('http://foo.com/blah_blah_(wikipedia)') True ``` It also support validate [URI-reference](https://tools.ietf.org/html/rfc3986#page-49) rule ```pycon >>> validate_rfc3986('//foo.com/blah_blah', rule='URI_reference') True ``` - Free software: MIT license rfc3986-validator-0.1.1/HISTORY.rst0000644000175000017500000000013114147445262014571 0ustar jdgjdg======= History ======= 0.1.0 (2019-10-25) ------------------ * First release on PyPI. rfc3986-validator-0.1.1/.editorconfig0000644000175000017500000000044414147445262015362 0ustar jdgjdg# http://editorconfig.org root = true [*] indent_style = space indent_size = 4 trim_trailing_whitespace = true insert_final_newline = true charset = utf-8 end_of_line = lf [*.bat] indent_style = tab end_of_line = crlf [LICENSE] insert_final_newline = false [Makefile] indent_style = tab rfc3986-validator-0.1.1/tox.ini0000644000175000017500000000110614147445262014214 0ustar jdgjdg[tox] envlist = py27, py35, py36, py37, py38, flake8 [travis] python = 3.8: py38 3.7: py37 3.6: py36 3.5: py35 2.7: py27 [testenv:flake8] basepython = python deps = flake8 commands = flake8 rfc3986_validator [testenv] setenv = PYTHONPATH = {toxinidir} deps = -r{toxinidir}/requirements_dev.txt ; If you want to make tox run the tests with the same versions, create a ; requirements.txt with the pinned versions and uncomment the following line: ; -r{toxinidir}/requirements.txt commands = pip install -U pip pytest --basetemp={envtmpdir} rfc3986-validator-0.1.1/setup.py0000644000175000017500000000274314147445262014423 0ustar jdgjdg#!/usr/bin/env python # -*- coding: utf-8 -*- """The setup script.""" from setuptools import setup, find_packages with open('README.md') as readme_file: readme = readme_file.read() requirements = [] setup_requirements = ['pytest-runner', ] test_requirements = ['pytest>=3', ] setup( author="Nicolas Aimetti", author_email='naimetti@yahoo.com.ar', python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*', classifiers=[ 'Development Status :: 2 - Pre-Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Natural Language :: English', "Programming Language :: Python :: 2", 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', ], description="Pure python rfc3986 validator", install_requires=requirements, license="MIT license", long_description=readme, long_description_content_type="text/markdown", include_package_data=True, keywords='rfc3986 validator', name='rfc3986_validator', py_modules=['rfc3986_validator'], setup_requires=setup_requirements, test_suite='tests', tests_require=test_requirements, url='https://github.com/naimetti/rfc3986-validator', version='0.1.1', zip_safe=False, ) rfc3986-validator-0.1.1/requirements_dev.txt0000644000175000017500000000024214147445262017023 0ustar jdgjdgpip==21.1 bump2version==0.5.11 wheel==0.33.6 flake8==3.7.8 tox==3.14.0 coverage==4.5.4 twine==1.14.0 pytest==4.6.5 pytest-runner==5.1 hypothesis==4.41.3 rfc3987 rfc3986-validator-0.1.1/tests/0000755000175000017500000000000014147445262014045 5ustar jdgjdgrfc3986-validator-0.1.1/tests/test_rfc3986_validator.py0000644000175000017500000001153614147445262020635 0ustar jdgjdg#!/usr/bin/env python # -*- coding: utf-8 -*- """Tests for `rfc3986_validator` package.""" import pytest import rfc3987 from hypothesis import given, settings import hypothesis.provisional as prov_st from rfc3986_validator import validate_rfc3986 VALID_URIS = ( 'http://foo.com/blah_blah', 'http://foo.com/blah_blah/', 'http://foo.com/blah_blah_(wikipedia)', 'http://foo.com/blah_blah_(wikipedia)_(again)', 'http://www.example.com/wpstyle/?p=364', 'https://www.example.com/foo/?bar=baz&inga=42&quux', 'http://userid:password@example.com:8080', 'http://userid:password@example.com:8080/', 'http://userid@example.com', 'http://userid@example.com/', 'http://userid@example.com:8080', 'http://userid@example.com:8080/', 'http://userid:password@example.com', 'http://userid:password@example.com/', 'http://142.42.1.1/', 'http://142.42.1.1:8080/', 'http://foo.com/blah_(wikipedia)#cite-1', 'http://foo.com/blah_(wikipedia)_blah#cite-1', 'http://foo.com/(something)?after=parens', 'http://code.google.com/events/#&product=browser', 'http://j.mp', 'ftp://foo.bar/baz', 'http://foo.bar/?q=Test%20URL-encoded%20stuff', 'http://-.~_!$&()*+,;=:%40:80%2f::::::@example.com', 'http://1337.net', 'http://a.b-c.de', 'http://223.255.255.254', 'http://foo.bar/%ba', 'http://foo.bar/../../', 'http://foo.bar/../...../asd', 'http://foo.com/#)(', 'http:foo', 'http::foo', 'mailto:John.Doe@example.com', 'news:comp.infosystems.www.servers.unix', 'tel:+1-816-555-1212', 'telnet://192.0.2.16:80/', 'urn:oasis:names:specification:docbook:dtd:xml:4.1.2', 'ldap://[2001:db8::7]/c=GB?objectClass?one', 'ldap://[2001:db8::7]:80/c=GB?objectClass?one', 'http://[2001:db8:85a3:8d3:1319:8a2e:370:7348]/', 'http://[2001:db8:a0b:12f0::1]:80/index.html', ) INVALID_URIS = ( '', 'http://foo.bar?q=Spaces should be encoded', '//', '//a', '///a', '///', 'foo.com', 'http:// shouldfail.com', ':// should fail', 'http://foo.bar/foo(bar)baz quux', 'http://%jfoo.bar/', 'http://foo.bar/%ja', 'http://[foo.bar]/', 'http://foo.bar/[asd]/', 'http://foo.[bar]/', 'http://foo.bar/##', 'foo', 'htt(ps://foo/', 'http://:foo', ) VALID_URI_REFS = ( '//foo.com/blah_blah', '//foo.com/blah_blah/', '//foo.com/blah_blah_(wikipedia)', '//foo.com/blah_blah_(wikipedia)_(again)', '//www.example.com/wpstyle/?p=364', '//www.example.com/foo/?bar=baz&inga=42&quux', '//userid:password@example.com:8080', '//userid:password@example.com:8080/', '//userid@example.com', '//userid@example.com/', '//userid@example.com:8080', '//userid@example.com:8080/', '//userid:password@example.com', '//userid:password@example.com/', '//142.42.1.1/', '//142.42.1.1:8080/', '//foo.com/blah_(wikipedia)#cite-1', '//foo.com/blah_(wikipedia)_blah#cite-1', '//foo.com/(something)?after=parens', '//code.google.com/events/#&product=browser', 'j.mp', '//-.~_!$&()*+,;=:%40:80%2f::::::@example.com', '-.~_!$&()*+,;=/:%40:80%2f::::::@example.com', '/foo.bar/baz', '//foo.bar/?q=Test%20URL-encoded%20stuff', '//1337.net', '//a.b-c.de', '//223.255.255.254', '//foo.bar/%ba', '//foo.bar/../../', '//foo.bar/../...../asd', '//foo.com/#)(', 'foo:', ) INVALID_URI_REFS = ( ':foo', '-.~_!$&()*+,;=:%40:80%2f::::::@example.com', ) @pytest.mark.parametrize('rule', ('URI', 'URI_reference')) @pytest.mark.parametrize('url', VALID_URIS) def test_valid_urls(url, rule): assert validate_rfc3986(url, rule=rule) @pytest.mark.parametrize('url', VALID_URI_REFS) def test_valid_urls_ref(url): assert validate_rfc3986(url, rule='URI_reference') @pytest.mark.parametrize('url', INVALID_URIS) def test_invalid_urls(url): assert not validate_rfc3986(url) @pytest.mark.parametrize('url', INVALID_URI_REFS) def test_invalid_urls_ref(url): assert not validate_rfc3986(url, rule='URI_reference') @pytest.mark.parametrize('url', INVALID_URIS + VALID_URIS) def test_against_legacy(url): legacy = True try: rfc3987.parse(url, rule='URI') except ValueError: legacy = False new = validate_rfc3986(url) assert legacy == bool(new) @pytest.mark.parametrize('url', INVALID_URIS + VALID_URIS) def test_against_legacy_ref(url): legacy = True try: rfc3987.parse(url, rule='URI_reference') except ValueError: legacy = False new = validate_rfc3986(url, rule='URI_reference') assert legacy == bool(new) @settings(max_examples=1000) @given(url=prov_st.urls()) def test_against_legacy_hypothesis(url): print(url) legacy = True try: rfc3987.parse(url, rule='URI') except ValueError: legacy = False new = validate_rfc3986(url) assert legacy == bool(new) rfc3986-validator-0.1.1/tests/__init__.py0000644000175000017500000000011014147445262016146 0ustar jdgjdg# -*- coding: utf-8 -*- """Unit test package for rfc3986_validator.""" rfc3986-validator-0.1.1/AUTHORS.rst0000644000175000017500000000024214147445262014560 0ustar jdgjdg======= Credits ======= Development Lead ---------------- * Nicolas Aimetti Contributors ------------ None yet. Why not be the first? rfc3986-validator-0.1.1/Makefile0000644000175000017500000000356214147445262014351 0ustar jdgjdg.PHONY: clean clean-test clean-pyc clean-build docs help .DEFAULT_GOAL := help define BROWSER_PYSCRIPT import os, webbrowser, sys try: from urllib import pathname2url except: from urllib.request import pathname2url webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1]))) endef export BROWSER_PYSCRIPT define PRINT_HELP_PYSCRIPT import re, sys for line in sys.stdin: match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line) if match: target, help = match.groups() print("%-20s %s" % (target, help)) endef export PRINT_HELP_PYSCRIPT BROWSER := python -c "$$BROWSER_PYSCRIPT" help: @python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST) clean: clean-build clean-pyc clean-test ## remove all build, test, coverage and Python artifacts clean-build: ## remove build artifacts rm -fr build/ rm -fr dist/ rm -fr .eggs/ find . -name '*.egg-info' -exec rm -fr {} + find . -name '*.egg' -exec rm -f {} + clean-pyc: ## remove Python file artifacts find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + find . -name '*~' -exec rm -f {} + find . -name '__pycache__' -exec rm -fr {} + clean-test: ## remove test and coverage artifacts rm -fr .tox/ rm -f .coverage rm -fr htmlcov/ rm -fr .pytest_cache lint: ## check style with flake8 flake8 rfc3986_validator tests test: ## run tests quickly with the default Python pytest test-all: ## run tests on every Python version with tox tox coverage: ## check code coverage quickly with the default Python coverage run --source rfc3986_validator -m pytest coverage report -m coverage html $(BROWSER) htmlcov/index.html release: dist ## package and upload a release twine upload dist/* dist: clean ## builds source and wheel package python setup.py sdist python setup.py bdist_wheel ls -l dist install: clean ## install the package to the active Python's site-packages python setup.py install rfc3986-validator-0.1.1/.gitignore0000644000175000017500000000222414147445262014673 0ustar jdgjdg# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # dotenv .env # virtualenv .venv venv/ ENV/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ rfc3986-validator-0.1.1/.travis.yml0000644000175000017500000000130714147445262015015 0ustar jdgjdg# Config file for automatic testing at travis-ci.org language: python python: - 3.8 - 3.7 - 3.6 - 3.5 - 2.7 # Command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors install: pip install -U tox-travis # Command to run tests, e.g. python setup.py test script: tox # Assuming you have installed the travis-ci CLI tool, after you # create the Github repo and add it to Travis, run the # following command to finish PyPI deployment setup: # $ travis encrypt --add deploy.password deploy: provider: pypi distributions: sdist bdist_wheel user: naimetti password: secure: PLEASE_REPLACE_ME on: tags: true repo: naimetti/rfc3986_validator python: 3.8 rfc3986-validator-0.1.1/LICENSE0000644000175000017500000000206214147445262013710 0ustar jdgjdgMIT License Copyright (c) 2019, Nicolas Aimetti Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. rfc3986-validator-0.1.1/MANIFEST.in0000644000175000017500000000040614147445262014441 0ustar jdgjdginclude AUTHORS.rst include CONTRIBUTING.rst include HISTORY.rst include LICENSE include README.rst recursive-include tests * recursive-exclude * __pycache__ recursive-exclude * *.py[co] recursive-include docs *.rst conf.py Makefile make.bat *.jpg *.png *.gif rfc3986-validator-0.1.1/setup.cfg0000644000175000017500000000064314147445262014527 0ustar jdgjdg[bumpversion] current_version = 0.1.1 commit = True tag = True [bumpversion:file:setup.py] search = version='{current_version}' replace = version='{new_version}' [bumpversion:file:rfc3986_validator.py] search = __version__ = '{current_version}' replace = __version__ = '{new_version}' [bdist_wheel] universal = 1 [flake8] max-line-length = 119 [aliases] test = pytest [tool:pytest] collect_ignore = ['setup.py']