diff options
author | Adam Chainz <me@adamj.eu> | 2016-09-28 21:12:32 +0100 |
---|---|---|
committer | Stefan Wójcik <wojcikstefan@gmail.com> | 2016-09-28 16:12:32 -0400 |
commit | 7799be4a1cd2d68f70293a515bba1392b989531b (patch) | |
tree | 05aedb0ac342c0d36e4ff2aeec9154d3b7086970 | |
parent | 9e6ee2f9f0977a3375e65b417543c50450a1db1b (diff) | |
download | python-mimeparse-7799be4a1cd2d68f70293a515bba1392b989531b.tar.gz |
setup.py + README tidying (#22)
* Convert `README.md` to `README.rst` since rst is all that PyPI supports
* Tidy up README so all functions are explained with their own headers
* Use context managers for opening files in `setup.py`
* Don't import the code in `setup.py`, which doesn't work on some platforms before it's installed. Instead use parsing of the file to find the version.
-rw-r--r-- | MANIFEST.in | 2 | ||||
-rw-r--r-- | README.md | 31 | ||||
-rw-r--r-- | README.rst | 65 | ||||
-rw-r--r-- | mimeparse.py | 20 | ||||
-rwxr-xr-x | setup.py | 22 |
5 files changed, 83 insertions, 57 deletions
diff --git a/MANIFEST.in b/MANIFEST.in index 564b03b..d071265 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1 @@ -include README.md LICENSE mimeparse_test.py testdata.json +include README.rst LICENSE mimeparse_test.py testdata.json diff --git a/README.md b/README.md deleted file mode 100644 index 5a58486..0000000 --- a/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Travis CI Build Status [](https://travis-ci.org/dbtsai/python-mimeparse) - -This module provides basic functions for handling mime-types. It can handle -matching mime-types against a list of media-ranges. See section 5.3.2 of -the HTTP 1.1 Semantics and Content specification [RFC 7231] for a complete -explanation. - - https://tools.ietf.org/html/rfc7231#section-5.3.2 - -Contents: - - parse_mime_type(): Parses a mime-type into its component parts. - - parse_media_range(): Media-ranges are mime-types with wild-cards and a "q" quality parameter. - - quality(): Determines the quality ("q") of a mime-type when compared against a list of media-ranges. - - quality_parsed(): Just like quality() except the second parameter must be pre-parsed. - - best_match(): Choose the mime-type with the highest quality ("q") from a list of candidates. - -Testing -======= -The format of the JSON test data file is as follows: -A top-level JSON object which has a key for each of the functions to be tested. The value corresponding to that key is a list of tests. Each test contains: the argument or arguments to the function being tested, the expected results and an optional description. - -Python -====== -The Python tests require Python 2.6. - -Run the tests by typing: -python mimeparse_test.py - -To make sure that the package works in all the supported environments, you can run tox tests: -pip install tox -tox diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..f1f8c81 --- /dev/null +++ b/README.rst @@ -0,0 +1,65 @@ +.. image:: https://travis-ci.org/dbtsai/python-mimeparse.svg?branch=master + :target: https://travis-ci.org/dbtsai/python-mimeparse + +This module provides basic functions for handling mime-types. It can +handle matching mime-types against a list of media-ranges. See section +5.3.2 of the HTTP 1.1 Semantics and Content specification [RFC 7231] for +a complete explanation: https://tools.ietf.org/html/rfc7231#section-5.3.2 + +Installation +============ + +Use **pip**: + +.. code-block:: sh + + $ pip install python-mimeparse + +It supports Python 2.7 - 3.5 and PyPy. + +Functions +========= + +``parse_mime_type()`` +---------------------- + +Parses a mime-type into its component parts. + +``parse_media_range()`` +----------------------- + +Media-ranges are mime-types with wild-cards and a "q" quality parameter. + +``quality()`` +------------- + +Determines the quality ("q") of a mime-type when compared against a list of +media-ranges. + +``quality_parsed()`` +-------------------- + +Just like ``quality()`` except the second parameter must be pre-parsed. + +``best_match()`` +---------------- + +Choose the mime-type with the highest quality ("q") from a list of candidates. + +Testing +======= + +Run the tests by typing: ``python mimeparse_test.py``. The tests require Python 2.6. + +To make sure that the package works in all the supported environments, you can +run **tox** tests: + +.. code-block:: sh + + $ pip install tox + $ tox + +The format of the JSON test data file is as follows: A top-level JSON object +which has a key for each of the functions to be tested. The value corresponding +to that key is a list of tests. Each test contains: the argument or arguments +to the function being tested, the expected results and an optional description. diff --git a/mimeparse.py b/mimeparse.py index 955ad24..5eb4326 100644 --- a/mimeparse.py +++ b/mimeparse.py @@ -1,23 +1,3 @@ -"""MIME-Type Parser - -This module provides basic functions for handling mime-types. It can handle -matching mime-types against a list of media-ranges. See section 5.3.2 of the -HTTP 1.1 Semantics and Content specification [RFC 7231] for a complete -explanation. - - https://tools.ietf.org/html/rfc7231#section-5.3.2 - -Contents: - - parse_mime_type(): Parses a mime-type into its component parts. - - parse_media_range(): Media-ranges are mime-types with wild-cards and a 'q' - quality parameter. - - quality(): Determines the quality ('q') of a mime-type when - compared against a list of media-ranges. - - quality_parsed(): Just like quality() except the second parameter must be - pre-parsed. - - best_match(): Choose the mime-type with the highest quality ('q') - from a list of candidates. -""" import cgi from functools import reduce @@ -2,25 +2,37 @@ import os import codecs -import mimeparse +import re from setuptools import setup +def get_version(filename): + """ + Return package version as listed in `__version__` in 'filename'. + """ + with open(filename) as fp: + contents = fp.read() + return re.search("__version__ = ['\"]([^'\"]+)['\"]", contents).group(1) + +version = get_version('mimeparse.py') + + def read(fname): path = os.path.join(os.path.dirname(__file__), fname) - return codecs.open(path, encoding='utf-8').read() + with codecs.open(path, encoding='utf-8') as fp: + return fp.read() setup( name="python-mimeparse", py_modules=["mimeparse"], - version=mimeparse.__version__, + version=version, description=("A module provides basic functions for parsing mime-type " "names and matching them against a list of media-ranges."), author="DB Tsai", author_email="dbtsai@dbtsai.com", url="https://github.com/dbtsai/python-mimeparse", download_url=("https://github.com/dbtsai/python-mimeparse/tarball/" + - mimeparse.__version__), + version), keywords=["mime-type"], classifiers=[ "Programming Language :: Python", @@ -32,5 +44,5 @@ setup( "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules", ], - long_description=read('README.md') + long_description=read('README.rst') ) |