Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
  docs
  ietfparse
  ietfparse.egg-info
  tests
  CONTRIBUTING.rst
  dev-requirements.txt
  LICENSE
  MANIFEST.in
  PKG-INFO
  README.rst
  requirements.txt
  setup.cfg
  setup.py
  test-requirements.txt
  tox.ini
Size: Mime:
  README.rst
ietfparse
=========

|Version| |Downloads| |Status| |Coverage| |License|

Wait... Why? What??
-------------------
This is a gut reaction to the wealth of ways to parse URLs, MIME headers,
HTTP messages and other things described by IETF RFCs.  They range from
the Python standard library (``urllib``) to be buried in the guts of other
*kitchen sink* libraries (``werkzeug``) and most of them are broken in one
way or the other.

So why create another one?  Good question... glad that you asked.  This is
a companion library to the great packages out there that are responsible for
communicating with other systems.  I'm going to concentrate on providing a
crisp and usable set of APIs that concentrate on parsing text.  Nothing more.
Hopefully by concentrating on the specific task of parsing things, the result
will be a beautiful and usable interface to the text strings that power the
Internet world.

Here's a sample of the code that this library lets you write::

    from ietfparse import algorithms, headers

    def negotiate_versioned_representation(request, handler, data_dict):
        requested = headers.parse_http_accept_header(request.headers['Accept'])
        selected = algorithms.select_content_type(requested, [
            headers.parse_content_type('application/example+json; v=1'),
            headers.parse_content_type('application/example+json; v=2'),
            headers.parse_content_type('application/json'),
        ])

        output_version = selected.parameters.get('v', '2')
        if output_version == '1':
            handler.set_header('Content-Type', 'application/example+json; v=1')
            handler.write(generate_legacy_json(data_dict))
        else:
            handler.set_header('Content-Type', 'application/example+json; v=2')
            handler.write(generate_modern_json(data_dict))

    def redirect_to_peer(host, port=80):
        flask.redirect(algorithms.rewrite_url(flask.request.url,
                                              host=host, port=port))

Ok... Where?
------------
+---------------+-------------------------------------------------+
| Source        | https://github.com/dave-shawley/ietfparse       |
+---------------+-------------------------------------------------+
| Status        | https://travis-ci.org/dave-shawley/ietfparse    |
+---------------+-------------------------------------------------+
| Download      | https://pypi.python.org/pypi/ietfparse          |
+---------------+-------------------------------------------------+
| Documentation | http://ietfparse.readthedocs.org/en/latest      |
+---------------+-------------------------------------------------+
| Issues        | https://github.com/dave-shawley/ietfparse       |
+---------------+-------------------------------------------------+

.. |Version| image:: https://pypip.in/version/ietfparse/badge.svg
   :target: https://pypi.python.org/pypi/ietfparse
.. |Downloads| image:: https://pypip.in/d/ietfparse/badge.svg
   :target: https://pypi.python.org/pypi/ietfparse
.. |Status| image:: https://travis-ci.org/dave-shawley/ietfparse.svg
   :target: https://travis-ci.org/dave-shawley/ietfparse
.. |Coverage| image:: https://coveralls.io/repos/dave-shawley/ietfparse/badge.svg
   :target: https://coveralls.io/r/dave-shawley/ietfparse
.. |License| image:: https://pypip.in/license/ietfparse/badge.svg
   :target: https://ietfparse.readthedocs.org/