From 7799be4a1cd2d68f70293a515bba1392b989531b Mon Sep 17 00:00:00 2001 From: Adam Chainz Date: Wed, 28 Sep 2016 21:12:32 +0100 Subject: 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. --- MANIFEST.in | 2 +- README.md | 31 ----------------------------- README.rst | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mimeparse.py | 20 ------------------- setup.py | 22 +++++++++++++++----- 5 files changed, 83 insertions(+), 57 deletions(-) delete mode 100644 README.md create mode 100644 README.rst 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 [![Build Status](https://travis-ci.org/dbtsai/python-mimeparse.svg?branch=master)](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 diff --git a/setup.py b/setup.py index 35f6355..4d395ea 100755 --- a/setup.py +++ b/setup.py @@ -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') ) -- cgit v1.2.1