42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
# Copyright (c) 2009-2012 testtools developers. See LICENSE for details.
|
|
|
|
"""ContentType - a MIME Content Type."""
|
|
|
|
|
|
class ContentType(object):
|
|
"""A content type from http://www.iana.org/assignments/media-types/
|
|
|
|
:ivar type: The primary type, e.g. "text" or "application"
|
|
:ivar subtype: The subtype, e.g. "plain" or "octet-stream"
|
|
:ivar parameters: A dict of additional parameters specific to the
|
|
content type.
|
|
"""
|
|
|
|
def __init__(self, primary_type, sub_type, parameters=None):
|
|
"""Create a ContentType."""
|
|
if None in (primary_type, sub_type):
|
|
raise ValueError("None not permitted in %r, %r" % (
|
|
primary_type, sub_type))
|
|
self.type = primary_type
|
|
self.subtype = sub_type
|
|
self.parameters = parameters or {}
|
|
|
|
def __eq__(self, other):
|
|
if type(other) != ContentType:
|
|
return False
|
|
return self.__dict__ == other.__dict__
|
|
|
|
def __repr__(self):
|
|
if self.parameters:
|
|
params = '; '
|
|
params += '; '.join(
|
|
sorted('%s="%s"' % (k, v) for k, v in self.parameters.items()))
|
|
else:
|
|
params = ''
|
|
return "%s/%s%s" % (self.type, self.subtype, params)
|
|
|
|
|
|
JSON = ContentType('application', 'json')
|
|
|
|
UTF8_TEXT = ContentType('text', 'plain', {'charset': 'utf8'})
|