Hello community,

here is the log from the commit of package python-sphinxcontrib-httpdomain for 
openSUSE:Factory checked in at 2014-09-17 17:26:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sphinxcontrib-httpdomain (Old)
 and      /work/SRC/openSUSE:Factory/.python-sphinxcontrib-httpdomain.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-sphinxcontrib-httpdomain"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-sphinxcontrib-httpdomain/python-sphinxcontrib-httpdomain.changes
  2013-10-21 20:02:16.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-sphinxcontrib-httpdomain.new/python-sphinxcontrib-httpdomain.changes
     2014-09-17 17:27:29.000000000 +0200
@@ -1,0 +2,33 @@
+Tue Sep 16 06:36:36 UTC 2014 - tbecht...@suse.com
+
+- update to version 1.3.0:
+  * jsonparameter/jsonparam/json became deprecated and split into
+    reqjsonobj/reqjson/<jsonobj/<json and reqjsonarr/<jsonarr.
+    [issue #55, pull request #72 by Alexander Shorin]
+  * Support synopsis (short description in HTTP index), deprecation
+    and noindex options for resources.
+    [issue #55, pull request #72 by Alexander Shorin]
+  * Stabilize order of index items.
+    [issue #55, pull request #72 by Alexander Shorin]
+  * Added :rst:directive:`http:any` directive and
+    http:any role for ANY method.
+    [issue #55, pull request #72 by Alexander Shorin]
+  * Added :rst:directive:`http:copy` directive and http:copy role
+    for COPY method.
+    [issue #55, pull request #72 by Alexander Shorin]
+  * Added http:header role that also creates reference to the
+    related specification.
+    [issue #55, pull request #72 by Alexander Shorin]
+  * http:statuscode role became to provide references to
+    specification sections.
+    [issue #55, pull request #72 by Alexander Shorin]
+  * Fixed Python 3 incompatibility of autohttp.tornado.
+    [pull request #61 by Dave Shawley]
+
+-------------------------------------------------------------------
+Tue Jun 24 08:18:04 UTC 2014 - dmuel...@suse.com
+
+- update to 1.2.1:
+  * Six support
+
+-------------------------------------------------------------------

Old:
----
  sphinxcontrib-httpdomain-1.2.0.tar.gz

New:
----
  sphinxcontrib-httpdomain-1.3.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-sphinxcontrib-httpdomain.spec ++++++
--- /var/tmp/diff_new_pack.wqP2uM/_old  2014-09-17 17:27:30.000000000 +0200
+++ /var/tmp/diff_new_pack.wqP2uM/_new  2014-09-17 17:27:30.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-sphinxcontrib-httpdomain
 #
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           python-sphinxcontrib-httpdomain
-Version:        1.2.0
+Version:        1.3.0
 Release:        0
 Summary:        Sphinx domain for HTTP APIs
 License:        BSD-2-Clause
@@ -27,6 +27,7 @@
 BuildRequires:  python-devel
 BuildRequires:  python-setuptools
 Requires:       python-Sphinx
+Requires:       python-six
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %if 0%{?suse_version} && 0%{?suse_version} <= 1110
 %{!?python_sitelib: %global python_sitelib %(python -c "from 
distutils.sysconfig import get_python_lib; print get_python_lib()")}

++++++ sphinxcontrib-httpdomain-1.2.0.tar.gz -> 
sphinxcontrib-httpdomain-1.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinxcontrib-httpdomain-1.2.0/PKG-INFO 
new/sphinxcontrib-httpdomain-1.3.0/PKG-INFO
--- old/sphinxcontrib-httpdomain-1.2.0/PKG-INFO 2013-10-19 09:45:53.000000000 
+0200
+++ new/sphinxcontrib-httpdomain-1.3.0/PKG-INFO 2014-07-30 18:41:23.000000000 
+0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
 Name: sphinxcontrib-httpdomain
-Version: 1.2.0
+Version: 1.3.0
 Summary: Sphinx domain for HTTP APIs
 Home-page: http://bitbucket.org/birkenfeld/sphinx-contrib
 Author: Hong Minhee
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinxcontrib-httpdomain-1.2.0/setup.cfg 
new/sphinxcontrib-httpdomain-1.3.0/setup.cfg
--- old/sphinxcontrib-httpdomain-1.2.0/setup.cfg        2013-10-19 
09:45:53.000000000 +0200
+++ new/sphinxcontrib-httpdomain-1.3.0/setup.cfg        2014-07-30 
18:41:23.000000000 +0200
@@ -1,12 +1,15 @@
 [aliases]
 upload_docs = build_sphinx upload_docs
 
+[bdist_wheel]
+universal = 1
+
 [upload_docs]
 repository = https://pypi.python.org/pypi
 upload_dir = build/sphinx/html
 
 [egg_info]
+tag_svn_revision = 0
 tag_build = 
 tag_date = 0
-tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinxcontrib-httpdomain-1.2.0/setup.py 
new/sphinxcontrib-httpdomain-1.3.0/setup.py
--- old/sphinxcontrib-httpdomain-1.2.0/setup.py 2013-08-07 20:24:15.000000000 
+0200
+++ new/sphinxcontrib-httpdomain-1.3.0/setup.py 2014-07-30 18:33:26.000000000 
+0200
@@ -11,11 +11,14 @@
 http://pythonhosted.org/sphinxcontrib-httpdomain/
 '''
 
-requires = ['Sphinx>=1.0']
+requires = [
+    'Sphinx >= 1.0',
+    'six'
+]
 
 setup(
     name='sphinxcontrib-httpdomain',
-    version='1.2.0',
+    version='1.3.0',
     url='http://bitbucket.org/birkenfeld/sphinx-contrib',
     download_url='http://pypi.python.org/pypi/sphinxcontrib-httpdomain',
     license='BSD',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/autohttp/bottle.py 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/autohttp/bottle.py
--- old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/autohttp/bottle.py 
2013-08-07 20:24:15.000000000 +0200
+++ new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/autohttp/bottle.py 
2014-07-30 18:33:17.000000000 +0200
@@ -11,10 +11,7 @@
 """
 
 import re
-try:
-    import cStringIO as StringIO
-except ImportError:
-    import StringIO
+import six
 
 from docutils import nodes
 from docutils.parsers.rst import directives
@@ -31,12 +28,17 @@
 
 
 def translate_bottle_rule(app, rule):
-    buf = StringIO.StringIO()
-    for name, filter, conf in app.router.parse_rule(rule):
+    buf = six.StringIO()
+    if hasattr(app.router, "parse_rule"):
+        iterator = app.router.parse_rule(rule)  # bottle 0.11
+    else:
+        iterator = app.router._itertokens(rule)  # bottle 0.12
+    for name, filter, conf in iterator:
         if filter:
             buf.write('(')
             buf.write(name)
-            if filter != app.router.default_filter or conf:
+            if (filter != app.router.default_filter and filter != 'default')\
+                    or conf:
                 buf.write(':')
                 buf.write(filter)
             if conf:
@@ -49,12 +51,9 @@
 
 
 def get_routes(app):
-    for rule, methods in app.router.rules.iteritems():
-        for method, target in methods.iteritems():
-            if method in ('OPTIONS', 'HEAD'):
-                continue
-            path = translate_bottle_rule(app, rule)
-            yield method, path, target
+    for route in app.routes:
+        path = translate_bottle_rule(app, route.rule)
+        yield route.method, path, route
 
 
 class AutobottleDirective(Directive):
@@ -89,7 +88,7 @@
                 continue
             view = target.callback
             docstring = view.__doc__ or ''
-            if not isinstance(docstring, unicode):
+            if not isinstance(docstring, six.text_type):
                 analyzer = ModuleAnalyzer.for_module(view.__module__)
                 docstring = force_decode(docstring, analyzer.encoding)
             if not docstring and 'include-empty-docstring' not in self.options:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/autohttp/common.py 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/autohttp/common.py
--- old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/autohttp/common.py 
2013-08-07 20:24:08.000000000 +0200
+++ new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/autohttp/common.py 
2014-07-30 18:33:17.000000000 +0200
@@ -8,15 +8,15 @@
     :license: BSD, see LICENSE for details.
 
 """
-
-import __builtin__
-
+import six
+from six.moves import builtins
+from six.moves import reduce
 
 def import_object(import_name):
     module_name, expr = import_name.split(':', 1)
     mod = __import__(module_name)
     mod = reduce(getattr, module_name.split('.')[1:], mod)
-    globals = __builtin__
+    globals = builtins
     if not isinstance(globals, dict):
         globals = globals.__dict__
     return eval(expr, globals, mod.__dict__)
@@ -24,7 +24,7 @@
 
 def http_directive(method, path, content):
     method = method.lower().strip()
-    if isinstance(content, basestring):
+    if isinstance(content, six.string_types):
         content = content.splitlines()
     yield ''
     yield '.. http:{method}:: {path}'.format(**locals())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/autohttp/flask.py 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/autohttp/flask.py
--- old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/autohttp/flask.py  
2013-08-07 20:24:15.000000000 +0200
+++ new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/autohttp/flask.py  
2014-07-30 18:33:17.000000000 +0200
@@ -11,10 +11,7 @@
 """
 
 import re
-try:
-    import cStringIO as StringIO
-except ImportError:
-    import StringIO
+import six
 
 from docutils import nodes
 from docutils.parsers.rst import directives
@@ -32,7 +29,7 @@
 
 def translate_werkzeug_rule(rule):
     from werkzeug.routing import parse_rule
-    buf = StringIO.StringIO()
+    buf = six.StringIO()
     for conv, arg, var in parse_rule(rule):
         if conv:
             buf.write('(')
@@ -97,7 +94,7 @@
         app = import_object(self.arguments[0])
         for method, path, endpoint in get_routes(app):
             try:
-                blueprint, endpoint_internal = endpoint.split('.')
+                blueprint, _, endpoint_internal = endpoint.rpartition('.')
                 if self.blueprints and blueprint not in self.blueprints:
                     continue
                 if blueprint in self.undoc_blueprints:
@@ -122,9 +119,10 @@
                 meth_func = getattr(view.view_class, method.lower(), None)
                 if meth_func and meth_func.__doc__:
                     docstring = meth_func.__doc__
-            if not isinstance(docstring, unicode):
+            if not isinstance(docstring, six.text_type):
                 analyzer = ModuleAnalyzer.for_module(view.__module__)
                 docstring = force_decode(docstring, analyzer.encoding)
+    
             if not docstring and 'include-empty-docstring' not in self.options:
                 continue
             docstring = prepare_docstring(docstring)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/autohttp/tornado.py 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/autohttp/tornado.py
--- old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/autohttp/tornado.py        
2013-10-19 09:41:10.000000000 +0200
+++ new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/autohttp/tornado.py        
2014-07-30 18:33:17.000000000 +0200
@@ -12,10 +12,7 @@
 
 import inspect
 import re
-try:
-    import cStringIO as StringIO
-except ImportError:
-    import StringIO
+import six
 
 from docutils import nodes
 from docutils.parsers.rst import directives
@@ -32,7 +29,7 @@
 
 
 def translate_tornado_rule(app, rule):
-    buf = StringIO.StringIO()
+    buf = six.StringIO()
     for name, filter, conf in app.router.parse_rule(rule):
         if filter:
             buf.write('(')
@@ -52,19 +49,17 @@
 def get_routes(app):
     for spec in app.handlers[0][1]:
         handler = spec.handler_class
-        methods = inspect.getmembers(handler, predicate=inspect.ismethod)
-
         doc_methods = list(handler.SUPPORTED_METHODS)
         if 'HEAD' in doc_methods:
             doc_methods.remove('HEAD')
         if 'OPTIONS' in doc_methods:
             doc_methods.remove('OPTIONS')
 
-        for method in methods:
-            if method[0].upper() not in doc_methods:
-                continue
-            path = spec.regex.pattern
-            yield method[0], path, handler
+        for method in doc_methods:
+            maybe_method = getattr(handler, method.lower(), None)
+            if (inspect.isfunction(maybe_method) or
+                    inspect.ismethod(maybe_method)):
+                yield method.lower(), spec.regex.pattern, handler
 
 
 def normalize_path(path):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/httpdomain.py 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/httpdomain.py
--- old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib/httpdomain.py      
2013-10-19 09:36:08.000000000 +0200
+++ new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib/httpdomain.py      
2014-07-30 18:33:17.000000000 +0200
@@ -16,65 +16,130 @@
 
 from pygments.lexer import RegexLexer, bygroups
 from pygments.lexers import get_lexer_by_name
-from pygments.token import Literal, Text,  Operator, Keyword, Name, Number
+from pygments.token import Literal, Text, Operator, Keyword, Name, Number
 from pygments.util import ClassNotFound
 
 from sphinx import addnodes
 from sphinx.roles import XRefRole
 from sphinx.domains import Domain, ObjType, Index
-from sphinx.directives import ObjectDescription
+from sphinx.directives import ObjectDescription, directives
 from sphinx.util.nodes import make_refnode
 from sphinx.util.docfields import GroupedField, TypedField
 
 
 class DocRef(object):
-    """Represents a link to an RFC which defines an HTTP method."""
+    """Represents a reference to an abstract specification."""
 
     def __init__(self, base_url, anchor, section):
-        """Stores the specified attributes which represent a URL which links to
-        an RFC which defines an HTTP method.
-
-        """
         self.base_url = base_url
         self.anchor = anchor
         self.section = section
 
     def __repr__(self):
-        """Returns the URL which this object represents, which points to the
-        location of the RFC which defines some HTTP method.
+        """Returns the URL onto related specification section for the related
+        object."""
+        return '{0}#{1}{2}'.format(self.base_url, self.anchor, self.section)
+
+
+class RFC2616Ref(DocRef):
+    """Represents a reference to RFC2616."""
+
+    def __init__(self, section):
+        url = 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec{0:d}.html'
+        url = url.format(int(section))
+        super(RFC2616Ref, self).__init__(url, 'sec', section)
 
-        """
-        return '{}#{}{}'.format(self.base_url, self.anchor, self.section)
 
+class IETFRef(DocRef):
+    """Represents a reference to the specific IETF RFC."""
 
-#: The URL of the HTTP/1.1 RFC which defines the HTTP methods OPTIONS, GET,
-#: HEAD, POST, PUT, DELETE, TRACE, and CONNECT.
-RFC2616 = 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html'
+    def __init__(self, rfc, section):
+        url = 'http://tools.ietf.org/html/rfc{0:d}'.format(rfc)
+        super(IETFRef, self).__init__(url, 'section-', section)
 
-#: The name to use for section anchors in RFC2616.
-RFC2616ANCHOR = 'sec'
 
-#: The URL of the RFC which defines the HTTP PATCH method.
-RFC5789 = 'http://tools.ietf.org/html/rfc5789'
+class EventSourceRef(DocRef):
+
+    def __init__(self, section):
+        url = 'http://www.w3.org/TR/eventsource/'
+        super(EventSourceRef, self).__init__(url, section, '')
 
-#: The name to use for section anchors in RFC5789.
-RFC5789ANCHOR = 'section-'
 
 #: Mapping from lowercase HTTP method name to :class:`DocRef` object which
 #: maintains the URL which points to the section of the RFC which defines that
 #: HTTP method.
-DOCREFS = {
-    'patch': DocRef(RFC5789, RFC5789ANCHOR, 2),
-    'options': DocRef(RFC2616, RFC2616ANCHOR, 9.2),
-    'get': DocRef(RFC2616, RFC2616ANCHOR, 9.3),
-    'head': DocRef(RFC2616, RFC2616ANCHOR, 9.4),
-    'post': DocRef(RFC2616, RFC2616ANCHOR, 9.5),
-    'put': DocRef(RFC2616, RFC2616ANCHOR, 9.6),
-    'delete': DocRef(RFC2616, RFC2616ANCHOR, 9.7),
-    'trace': DocRef(RFC2616, RFC2616ANCHOR, 9.8),
-    'connect': DocRef(RFC2616, RFC2616ANCHOR, 9.9)
+METHOD_REFS = {
+    'patch': IETFRef(5789, 2),
+    'options': RFC2616Ref(9.2),
+    'get': RFC2616Ref(9.3),
+    'head': RFC2616Ref(9.4),
+    'post': RFC2616Ref(9.5),
+    'put': RFC2616Ref(9.6),
+    'delete': RFC2616Ref(9.7),
+    'trace': RFC2616Ref(9.8),
+    'connect': RFC2616Ref(9.9),
+    'copy': IETFRef(2518, 8.8),
+    'any': ''
+}
+
+
+#: Mapping from HTTP header name to :class:`DocRef` object which
+#: maintains the URL which points to the related section of the RFC.
+HEADER_REFS = {
+    'Accept': RFC2616Ref(14.1),
+    'Accept-Charset': RFC2616Ref(14.2),
+    'Accept-Encoding': RFC2616Ref(14.3),
+    'Accept-Language': RFC2616Ref(14.4),
+    'Accept-Ranges': RFC2616Ref(14.5),
+    'Age': RFC2616Ref(14.6),
+    'Allow': RFC2616Ref(14.7),
+    'Authorization': RFC2616Ref(14.8),
+    'Cache-Control': RFC2616Ref(14.9),
+    'Connection': RFC2616Ref(14.10),
+    'Content-Encoding': RFC2616Ref(14.11),
+    'Content-Language': RFC2616Ref(14.12),
+    'Content-Length': RFC2616Ref(14.13),
+    'Content-Location': RFC2616Ref(14.14),
+    'Content-MD5': RFC2616Ref(14.15),
+    'Content-Range': RFC2616Ref(14.16),
+    'Content-Type': RFC2616Ref(14.17),
+    'Cookie': IETFRef(2109, '4.3.4'),
+    'Date': RFC2616Ref(14.18),
+    'Destination': IETFRef(2518, 9.3),
+    'ETag': RFC2616Ref(14.19),
+    'Expect': RFC2616Ref(14.20),
+    'Expires': RFC2616Ref(14.21),
+    'From': RFC2616Ref(14.22),
+    'Host': RFC2616Ref(14.23),
+    'If-Match': RFC2616Ref(14.24),
+    'If-Modified-Since': RFC2616Ref(14.25),
+    'If-None-Match': RFC2616Ref(14.26),
+    'If-Range': RFC2616Ref(14.27),
+    'If-Unmodified-Since': RFC2616Ref(14.28),
+    'Last-Event-ID': EventSourceRef('last-event-id'),
+    'Last-Modified': RFC2616Ref(14.29),
+    'Location': RFC2616Ref(14.30),
+    'Max-Forwards': RFC2616Ref(14.31),
+    'Pragma': RFC2616Ref(14.32),
+    'Proxy-Authenticate': RFC2616Ref(14.33),
+    'Proxy-Authorization': RFC2616Ref(14.34),
+    'Range': RFC2616Ref(14.35),
+    'Referer': RFC2616Ref(14.36),
+    'Retry-After': RFC2616Ref(14.37),
+    'Server': RFC2616Ref(14.38),
+    'Set-Cookie': IETFRef(2109, '4.2.2'),
+    'TE': RFC2616Ref(14.39),
+    'Trailer': RFC2616Ref(14.40),
+    'Transfer-Encoding': RFC2616Ref(14.41),
+    'Upgrade': RFC2616Ref(14.42),
+    'User-Agent': RFC2616Ref(14.43),
+    'Vary': RFC2616Ref(14.44),
+    'Via': RFC2616Ref(14.45),
+    'Warning': RFC2616Ref(14.46),
+    'WWW-Authenticate': RFC2616Ref(14.47)
 }
 
+
 HTTP_STATUS_CODES = {
     100: 'Continue',
     101: 'Switching Protocols',
@@ -133,8 +198,19 @@
                                re.VERBOSE)
 
 
+def sort_by_method(entries):
+    def cmp(item):
+        order = ['HEAD', 'GET', 'POST', 'PUT', 'DELETE', 'PATCH',
+                 'OPTIONS', 'TRACE', 'CONNECT', 'COPY', 'ANY']
+        method = item[0].split(' ', 1)[0]
+        if method in order:
+            return order.index(method)
+        return 100
+    return sorted(entries, key=cmp)
+
+
 def http_resource_anchor(method, path):
-    path = re.sub(r'[<>:/]', '-', path)
+    path = re.sub(r'[{}]', '', re.sub(r'[<>:/]', '-', path))
     return method.lower() + '-' + path
 
 
@@ -144,38 +220,60 @@
         TypedField('parameter', label='Parameters',
                    names=('param', 'parameter', 'arg', 'argument'),
                    typerolename='obj', typenames=('paramtype', 'type')),
-        TypedField('jsonparameter', label='Json Parameters',
+        TypedField('jsonparameter', label='JSON Parameters',
                    names=('jsonparameter', 'jsonparam', 'json'),
                    typerolename='obj', typenames=('jsonparamtype', 
'jsontype')),
+        TypedField('requestjsonobject', label='Request JSON Object',
+                   names=('reqjsonobj', 'reqjson', '<jsonobj', '<json'),
+                   typerolename='obj', typenames=('reqjsonobj', '<jsonobj')),
+        TypedField('requestjsonarray', label='Request JSON Array of Objects',
+                   names=('reqjsonarr', '<jsonarr'),
+                   typerolename='obj',
+                   typenames=('reqjsonarrtype', '<jsonarrtype')),
+        TypedField('responsejsonobject', label='Response JSON Object',
+                   names=('resjsonobj', 'resjson', '>jsonobj', '>json'),
+                   typerolename='obj', typenames=('resjsonobj', '>jsonobj')),
+        TypedField('responsejsonarray', label='Response JSON Array of Objects',
+                   names=('resjsonarr', '>jsonarr'),
+                   typerolename='obj',
+                   typenames=('resjsonarrtype', '>jsonarrtype')),
         TypedField('queryparameter', label='Query Parameters',
-                     names=('queryparameter', 'queryparam', 'qparam', 'query'),
-                     typerolename='obj', typenames=('queryparamtype', 
'querytype', 'qtype')),
+                   names=('queryparameter', 'queryparam', 'qparam', 'query'),
+                   typerolename='obj',
+                   typenames=('queryparamtype', 'querytype', 'qtype')),
         GroupedField('formparameter', label='Form Parameters',
                      names=('formparameter', 'formparam', 'fparam', 'form')),
         GroupedField('requestheader', label='Request Headers',
                      rolename='mailheader',
-                     names=('reqheader', 'requestheader')),
+                     names=('<header', 'reqheader', 'requestheader')),
         GroupedField('responseheader', label='Response Headers',
                      rolename='mailheader',
-                     names=('resheader', 'responseheader')),
+                     names=('>header', 'resheader', 'responseheader')),
         GroupedField('statuscode', label='Status Codes',
                      rolename='statuscode',
                      names=('statuscode', 'status', 'code'))
     ]
 
+    option_spec = {
+        'deprecated': directives.flag,
+        'noindex': directives.flag,
+        'synopsis': lambda x: x,
+    }
+
     method = NotImplemented
 
     def handle_signature(self, sig, signode):
         method = self.method.upper() + ' '
         signode += addnodes.desc_name(method, method)
         offset = 0
+        path = None
         for match in http_sig_param_re.finditer(sig):
             path = sig[offset:match.start()]
             signode += addnodes.desc_name(path, path)
             params = addnodes.desc_parameterlist()
             typ = match.group('type')
             if typ:
-                typ = typ + ': '
+                typ += ': '
                 params += addnodes.desc_annotation(typ, typ)
             name = match.group('name')
             params += addnodes.desc_parameter(name, name)
@@ -184,6 +282,7 @@
         if offset < len(sig):
             path = sig[offset:len(sig)]
             signode += addnodes.desc_name(path, path)
+        assert path is not None, 'no matches for sig: %s' % sig
         fullname = self.method.upper() + ' ' + path
         signode['method'] = self.method
         signode['path'] = sig
@@ -195,7 +294,11 @@
 
     def add_target_and_index(self, name_cls, sig, signode):
         signode['ids'].append(http_resource_anchor(*name_cls[1:]))
-        self.env.domaindata['http'][self.method][sig] = (self.env.docname, '')
+        if 'noindex' not in self.options:
+            self.env.domaindata['http'][self.method][sig] = (
+                self.env.docname,
+                self.options.get('synopsis', ''),
+                'deprecated' in self.options)
 
     def get_index_text(self, modname, name):
         return ''
@@ -241,8 +344,27 @@
     method = 'trace'
 
 
+class HTTPConnect(HTTPResource):
+
+    method = 'connect'
+
+
+class HTTPCopy(HTTPResource):
+
+    method = 'copy'
+
+
+class HTTPAny(HTTPResource):
+
+    method = 'any'
+
+
 def http_statuscode_role(name, rawtext, text, lineno, inliner,
-                         options={}, content=[]):
+                         options=None, content=None):
+    if options is None:
+        options = {}
+    if content is None:
+        content = []
     if text.isdigit():
         code = int(text)
         try:
@@ -268,11 +390,10 @@
     nodes.reference(rawtext)
     if code == 226:
         url = 'http://www.ietf.org/rfc/rfc3229.txt'
-    if code == 418:
+    elif code == 418:
         url = 'http://www.ietf.org/rfc/rfc2324.txt'
-    if code == 449:
-        url = 'http://msdn.microsoft.com/en-us/library' \
-              '/dd891478(v=prot.10).aspx'
+    elif code == 449:
+        url = 
'http://msdn.microsoft.com/en-us/library/dd891478(v=prot.10).aspx'
     elif code in HTTP_STATUS_CODES:
         url = 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html' \
               '#sec10.' + ('%d.%d' % (code // 100, 1 + code % 100))
@@ -285,18 +406,45 @@
 
 
 def http_method_role(name, rawtext, text, lineno, inliner,
-                     options={}, content=[]):
+                     options=None, content=None):
+    if options is None:
+        options = {}
+    if content is None:
+        content = []
     method = str(text).lower()
-    if method not in DOCREFS:
+    if method not in METHOD_REFS:
         msg = inliner.reporter.error('%s is not valid HTTP method' % method,
                                      lineno=lineno)
         prb = inliner.problematic(rawtext, rawtext, msg)
         return [prb], [msg]
-    url = str(DOCREFS[method])
+    url = str(METHOD_REFS[method])
+    if not url:
+        return [nodes.emphasis(text, text)], []
     node = nodes.reference(rawtext, method.upper(), refuri=url, **options)
     return [node], []
 
 
+def http_header_role(name, rawtext, text, lineno, inliner,
+                     options=None, content=None):
+    if options is None:
+        options = {}
+    if content is None:
+        content = []
+    header = str(text)
+    if header not in HEADER_REFS:
+        header = header.title()
+    if header not in HEADER_REFS:
+        if header.startswith('X-'):  # skip custom headers
+            return [nodes.strong(header, header)], []
+        msg = inliner.reporter.error('%s is not unknown HTTP header' % header,
+                                     lineno=lineno)
+        prb = inliner.problematic(rawtext, rawtext, msg)
+        return [prb], [msg]
+    url = str(HEADER_REFS[header])
+    node = nodes.reference(rawtext, header, refuri=url, **options)
+    return [node], []
+
+
 class HTTPXRefRole(XRefRole):
 
     def __init__(self, method, **kwargs):
@@ -320,9 +468,16 @@
     def __init__(self, *args, **kwargs):
         super(HTTPIndex, self).__init__(*args, **kwargs)
 
-        self.ignore = [[l for l in x.split('/') if l]
+        self.ignore = [
+            [l for l in x.split('/') if l]
             for x in self.domain.env.config['http_index_ignore_prefixes']]
-        self.ignore.sort(key=lambda x: -len(x))
+        self.ignore.sort(reverse=True)
+
+        # During HTML generation these values pick from class,
+        # not from instance so we have a little hack the system
+        cls = self.__class__
+        cls.shortname = self.domain.env.config['http_index_shortname']
+        cls.localname = self.domain.env.config['http_index_localname']
 
     def grouping_prefix(self, path):
         letters = [x for x in path.split('/') if x]
@@ -334,17 +489,21 @@
     def generate(self, docnames=None):
         content = {}
         items = ((method, path, info)
-            for method, routes in self.domain.routes.items()
-            for path, info in routes.items())
+                 for method, routes in self.domain.routes.items()
+                 for path, info in routes.items())
         items = sorted(items, key=lambda item: item[1])
         for method, path, info in items:
             entries = content.setdefault(self.grouping_prefix(path), [])
             entries.append([
                 method.upper() + ' ' + path, 0, info[0],
-                http_resource_anchor(method, path), '', '', info[1]
+                http_resource_anchor(method, path),
+                '', 'Deprecated' if info[2] else '', info[1]
             ])
-        content = sorted(content.items(), key=lambda k: k[0])
-        return (content, True)
+        items = sorted(
+            (path, sort_by_method(entries))
+            for path, entries in content.items()
+        )
+        return (items, True)
 
 
 class HTTPDomain(Domain):
@@ -361,7 +520,10 @@
         'put': ObjType('put', 'put', 'obj'),
         'patch': ObjType('patch', 'patch', 'obj'),
         'delete': ObjType('delete', 'delete', 'obj'),
-        'trace': ObjType('trace', 'trace', 'obj')
+        'trace': ObjType('trace', 'trace', 'obj'),
+        'connect': ObjType('connect', 'connect', 'obj'),
+        'copy': ObjType('copy', 'copy', 'obj'),
+        'any': ObjType('any', 'any', 'obj')
     }
 
     directives = {
@@ -372,7 +534,10 @@
         'put': HTTPPut,
         'patch': HTTPPatch,
         'delete': HTTPDelete,
-        'trace': HTTPTrace
+        'trace': HTTPTrace,
+        'connect': HTTPConnect,
+        'copy': HTTPCopy,
+        'any': HTTPAny
     }
 
     roles = {
@@ -384,19 +549,26 @@
         'patch': HTTPXRefRole('patch'),
         'delete': HTTPXRefRole('delete'),
         'trace': HTTPXRefRole('trace'),
+        'connect': HTTPXRefRole('connect'),
+        'copy': HTTPXRefRole('copy'),
+        'any': HTTPXRefRole('any'),
         'statuscode': http_statuscode_role,
-        'method': http_method_role
+        'method': http_method_role,
+        'header': http_header_role
     }
 
     initial_data = {
-        'options': {}, # path: (docname, synopsis)
+        'options': {},  # path: (docname, synopsis)
         'head': {},
         'post': {},
         'get': {},
         'put': {},
         'patch': {},
         'delete': {},
-        'trace': {}
+        'trace': {},
+        'connect': {},
+        'copy': {},
+        'any': {}
     }
 
     indices = [HTTPIndex]
@@ -416,7 +588,13 @@
         try:
             info = self.data[str(typ)][target]
         except KeyError:
-            return
+            text = contnode.rawsource
+            if typ == 'statuscode':
+                return http_statuscode_role(None, text, text, None, None)[0][0]
+            elif typ == 'mailheader':
+                return http_header_role(None, text, text, None, None)[0][0]
+            else:
+                return nodes.emphasis(text, text)
         else:
             anchor = http_resource_anchor(typ, target)
             title = typ.upper() + ' ' + target
@@ -474,7 +652,7 @@
 
     tokens = {
         'root': [
-            (r'(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE)( +)([^ ]+)( +)'
+            (r'(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE|COPY)( +)([^ ]+)( 
+)'
              r'(HTTPS?)(/)(1\.[01])(\r?\n|$)',
              bygroups(Name.Function, Text, Name.Namespace, Text,
                       Keyword.Reserved, Operator, Number, Text),
@@ -502,4 +680,5 @@
     except ClassNotFound:
         app.add_lexer('http', HTTPLexer())
     app.add_config_value('http_index_ignore_prefixes', [], None)
-
+    app.add_config_value('http_index_shortname', 'routing table', True)
+    app.add_config_value('http_index_localname', 'HTTP Routing Table', True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib_httpdomain.egg-info/PKG-INFO 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib_httpdomain.egg-info/PKG-INFO
--- 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib_httpdomain.egg-info/PKG-INFO   
    2013-10-19 09:45:53.000000000 +0200
+++ 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib_httpdomain.egg-info/PKG-INFO   
    2014-07-30 18:41:22.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
 Name: sphinxcontrib-httpdomain
-Version: 1.2.0
+Version: 1.3.0
 Summary: Sphinx domain for HTTP APIs
 Home-page: http://bitbucket.org/birkenfeld/sphinx-contrib
 Author: Hong Minhee
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib_httpdomain.egg-info/requires.txt
 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib_httpdomain.egg-info/requires.txt
--- 
old/sphinxcontrib-httpdomain-1.2.0/sphinxcontrib_httpdomain.egg-info/requires.txt
   2013-10-19 09:45:53.000000000 +0200
+++ 
new/sphinxcontrib-httpdomain-1.3.0/sphinxcontrib_httpdomain.egg-info/requires.txt
   2014-07-30 18:41:22.000000000 +0200
@@ -1 +1,2 @@
-Sphinx>=1.0
\ No newline at end of file
+Sphinx >= 1.0
+six
\ No newline at end of file

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to