pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/www/py-flask Update py-flask to 0.11.



details:   https://anonhg.NetBSD.org/pkgsrc/rev/acb413d08c37
branches:  trunk
changeset: 347886:acb413d08c37
user:      kleink <kleink%pkgsrc.org@localhost>
date:      Wed Jun 01 21:05:46 2016 +0000

description:
Update py-flask to 0.11.


Version 0.11
------------

Released on May 29th 2016, codename Absinthe.

- Added support to serializing top-level arrays to :func:`flask.jsonify`. This
  introduces a security risk in ancient browsers. See
  :ref:`json-security` for details.
- Added before_render_template signal.
- Added `**kwargs` to :meth:`flask.Test.test_client` to support passing
  additional keyword arguments to the constructor of
  :attr:`flask.Flask.test_client_class`.
- Added ``SESSION_REFRESH_EACH_REQUEST`` config key that controls the
  set-cookie behavior.  If set to ``True`` a permanent session will be
  refreshed each request and get their lifetime extended, if set to
  ``False`` it will only be modified if the session actually modifies.
  Non permanent sessions are not affected by this and will always
  expire if the browser window closes.
- Made Flask support custom JSON mimetypes for incoming data.
- Added support for returning tuples in the form ``(response, headers)``
  from a view function.
- Added :meth:`flask.Config.from_json`.
- Added :attr:`flask.Flask.config_class`.
- Added :meth:`flask.config.Config.get_namespace`.
- Templates are no longer automatically reloaded outside of debug mode. This
  can be configured with the new ``TEMPLATES_AUTO_RELOAD`` config key.
- Added a workaround for a limitation in Python 3.3's namespace loader.
- Added support for explicit root paths when using Python 3.3's namespace
  packages.
- Added :command:`flask` and the ``flask.cli`` module to start the local
  debug server through the click CLI system.  This is recommended over the old
  ``flask.run()`` method as it works faster and more reliable due to a
  different design and also replaces ``Flask-Script``.
- Error handlers that match specific classes are now checked first,
  thereby allowing catching exceptions that are subclasses of HTTP
  exceptions (in ``werkzeug.exceptions``).  This makes it possible
  for an extension author to create exceptions that will by default
  result in the HTTP error of their choosing, but may be caught with
  a custom error handler if desired.
- Added :meth:`flask.Config.from_mapping`.
- Flask will now log by default even if debug is disabled.  The log format is
  now hardcoded but the default log handling can be disabled through the
  ``LOGGER_HANDLER_POLICY`` configuration key.
- Removed deprecated module functionality.
- Added the ``EXPLAIN_TEMPLATE_LOADING`` config flag which when enabled will
  instruct Flask to explain how it locates templates.  This should help
  users debug when the wrong templates are loaded.
- Enforce blueprint handling in the order they were registered for template
  loading.
- Ported test suite to py.test.
- Deprecated ``request.json`` in favour of ``request.get_json()``.
- Add "pretty" and "compressed" separators definitions in jsonify() method.
  Reduces JSON response size when JSONIFY_PRETTYPRINT_REGULAR=False by removing
  unnecessary white space included by default after separators.
- JSON responses are now terminated with a newline character, because it is a
  convention that UNIX text files end with a newline and some clients don't
  deal well when this newline is missing. See
  https://github.com/pallets/flask/pull/1262 -- this came up originally as a
  part of https://github.com/kennethreitz/httpbin/issues/168
- The automatically provided ``OPTIONS`` method is now correctly disabled if
  the user registered an overriding rule with the lowercase-version
  ``options`` (issue ``#1288``).
- ``flask.json.jsonify`` now supports the ``datetime.date`` type (pull request
  ``#1326``).
- Don't leak exception info of already catched exceptions to context teardown
  handlers (pull request ``#1393``).
- Allow custom Jinja environment subclasses (pull request ``#1422``).
- ``flask.g`` now has ``pop()`` and ``setdefault`` methods.
- Turn on autoescape for ``flask.templating.render_template_string`` by default
  (pull request ``#1515``).
- ``flask.ext`` is now deprecated (pull request ``#1484``).
- ``send_from_directory`` now raises BadRequest if the filename is invalid on
  the server OS (pull request ``#1763``).
- Added the ``JSONIFY_MIMETYPE`` configuration variable (pull request ``#1728``).
- Exceptions during teardown handling will no longer leave bad application
  contexts lingering around.

diffstat:

 www/py-flask/ALTERNATIVES           |    1 +
 www/py-flask/Makefile               |   15 ++-
 www/py-flask/PLIST                  |  155 ++---------------------------------
 www/py-flask/distinfo               |   11 +-
 www/py-flask/patches/patch-setup.py |   23 +++++
 5 files changed, 51 insertions(+), 154 deletions(-)

diffs (275 lines):

diff -r c0eb84c449e9 -r acb413d08c37 www/py-flask/ALTERNATIVES
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/www/py-flask/ALTERNATIVES Wed Jun 01 21:05:46 2016 +0000
@@ -0,0 +1,1 @@
+bin/flask @PREFIX@/bin/flask@PYVERSSUFFIX@
diff -r c0eb84c449e9 -r acb413d08c37 www/py-flask/Makefile
--- a/www/py-flask/Makefile     Wed Jun 01 20:54:22 2016 +0000
+++ b/www/py-flask/Makefile     Wed Jun 01 21:05:46 2016 +0000
@@ -1,9 +1,9 @@
-# $NetBSD: Makefile,v 1.7 2014/01/25 10:30:28 wiz Exp $
+# $NetBSD: Makefile,v 1.8 2016/06/01 21:05:46 kleink Exp $
 
-DISTNAME=      Flask-0.10.1
+DISTNAME=      Flask-0.11
 PKGNAME=       ${PYPKGPREFIX}-${DISTNAME:tl}
 CATEGORIES=    www python
-MASTER_SITES=  http://pypi.python.org/packages/source/F/Flask/
+MASTER_SITES=  ${MASTER_SITE_PYPI:=F/Flask/}
 
 MAINTAINER=    kleink%NetBSD.org@localhost
 HOMEPAGE=      http://flask.pocoo.org/
@@ -12,9 +12,18 @@
 
 USE_LANGUAGES= # empty
 
+PLIST_SUBST+=  PYVERSSUFFIX=${PYVERSSUFFIX:Q}
+
+DEPENDS+=      ${PYPKGPREFIX}-click>=2.0:../../devel/py-click
 DEPENDS+=      ${PYPKGPREFIX}-itsdangerous-[0-9]*:../../security/py-itsdangerous
 DEPENDS+=      ${PYPKGPREFIX}-jinja2-[0-9]*:../../textproc/py-jinja2
 DEPENDS+=      ${PYPKGPREFIX}-werkzeug-[0-9]*:../../www/py-werkzeug
 
+# actually TEST_DEPENDS
+BUILD_DEPENDS+=        ${PYPKGPREFIX}-test-[0-9]*:../../devel/py-test
+
+do-test:
+       cd ${WRKSRC} && py.test-${PYVERSSUFFIX}
+
 .include "../../lang/python/egg.mk"
 .include "../../mk/bsd.pkg.mk"
diff -r c0eb84c449e9 -r acb413d08c37 www/py-flask/PLIST
--- a/www/py-flask/PLIST        Wed Jun 01 20:54:22 2016 +0000
+++ b/www/py-flask/PLIST        Wed Jun 01 21:05:46 2016 +0000
@@ -1,13 +1,18 @@
-@comment $NetBSD: PLIST,v 1.3 2013/07/09 17:24:46 kleink Exp $
+@comment $NetBSD: PLIST,v 1.4 2016/06/01 21:05:46 kleink Exp $
+bin/flask${PYVERSSUFFIX}
 ${PYSITELIB}/${EGG_INFODIR}/PKG-INFO
 ${PYSITELIB}/${EGG_INFODIR}/SOURCES.txt
 ${PYSITELIB}/${EGG_INFODIR}/dependency_links.txt
+${PYSITELIB}/${EGG_INFODIR}/entry_points.txt
 ${PYSITELIB}/${EGG_INFODIR}/not-zip-safe
 ${PYSITELIB}/${EGG_INFODIR}/requires.txt
 ${PYSITELIB}/${EGG_INFODIR}/top_level.txt
 ${PYSITELIB}/flask/__init__.py
 ${PYSITELIB}/flask/__init__.pyc
 ${PYSITELIB}/flask/__init__.pyo
+${PYSITELIB}/flask/__main__.py
+${PYSITELIB}/flask/__main__.pyc
+${PYSITELIB}/flask/__main__.pyo
 ${PYSITELIB}/flask/_compat.py
 ${PYSITELIB}/flask/_compat.pyc
 ${PYSITELIB}/flask/_compat.pyo
@@ -17,6 +22,9 @@
 ${PYSITELIB}/flask/blueprints.py
 ${PYSITELIB}/flask/blueprints.pyc
 ${PYSITELIB}/flask/blueprints.pyo
+${PYSITELIB}/flask/cli.py
+${PYSITELIB}/flask/cli.pyc
+${PYSITELIB}/flask/cli.pyo
 ${PYSITELIB}/flask/config.py
 ${PYSITELIB}/flask/config.pyc
 ${PYSITELIB}/flask/config.pyo
@@ -44,9 +52,6 @@
 ${PYSITELIB}/flask/logging.py
 ${PYSITELIB}/flask/logging.pyc
 ${PYSITELIB}/flask/logging.pyo
-${PYSITELIB}/flask/module.py
-${PYSITELIB}/flask/module.pyc
-${PYSITELIB}/flask/module.pyo
 ${PYSITELIB}/flask/sessions.py
 ${PYSITELIB}/flask/sessions.pyc
 ${PYSITELIB}/flask/sessions.pyo
@@ -59,148 +64,6 @@
 ${PYSITELIB}/flask/testing.py
 ${PYSITELIB}/flask/testing.pyc
 ${PYSITELIB}/flask/testing.pyo
-${PYSITELIB}/flask/testsuite/__init__.py
-${PYSITELIB}/flask/testsuite/__init__.pyc
-${PYSITELIB}/flask/testsuite/__init__.pyo
-${PYSITELIB}/flask/testsuite/appctx.py
-${PYSITELIB}/flask/testsuite/appctx.pyc
-${PYSITELIB}/flask/testsuite/appctx.pyo
-${PYSITELIB}/flask/testsuite/basic.py
-${PYSITELIB}/flask/testsuite/basic.pyc
-${PYSITELIB}/flask/testsuite/basic.pyo
-${PYSITELIB}/flask/testsuite/blueprints.py
-${PYSITELIB}/flask/testsuite/blueprints.pyc
-${PYSITELIB}/flask/testsuite/blueprints.pyo
-${PYSITELIB}/flask/testsuite/config.py
-${PYSITELIB}/flask/testsuite/config.pyc
-${PYSITELIB}/flask/testsuite/config.pyo
-${PYSITELIB}/flask/testsuite/deprecations.py
-${PYSITELIB}/flask/testsuite/deprecations.pyc
-${PYSITELIB}/flask/testsuite/deprecations.pyo
-${PYSITELIB}/flask/testsuite/examples.py
-${PYSITELIB}/flask/testsuite/examples.pyc
-${PYSITELIB}/flask/testsuite/examples.pyo
-${PYSITELIB}/flask/testsuite/ext.py
-${PYSITELIB}/flask/testsuite/ext.pyc
-${PYSITELIB}/flask/testsuite/ext.pyo
-${PYSITELIB}/flask/testsuite/helpers.py
-${PYSITELIB}/flask/testsuite/helpers.pyc
-${PYSITELIB}/flask/testsuite/helpers.pyo
-${PYSITELIB}/flask/testsuite/regression.py
-${PYSITELIB}/flask/testsuite/regression.pyc
-${PYSITELIB}/flask/testsuite/regression.pyo
-${PYSITELIB}/flask/testsuite/reqctx.py
-${PYSITELIB}/flask/testsuite/reqctx.pyc
-${PYSITELIB}/flask/testsuite/reqctx.pyo
-${PYSITELIB}/flask/testsuite/signals.py
-${PYSITELIB}/flask/testsuite/signals.pyc
-${PYSITELIB}/flask/testsuite/signals.pyo
-${PYSITELIB}/flask/testsuite/static/index.html
-${PYSITELIB}/flask/testsuite/subclassing.py
-${PYSITELIB}/flask/testsuite/subclassing.pyc
-${PYSITELIB}/flask/testsuite/subclassing.pyo
-${PYSITELIB}/flask/testsuite/templates/_macro.html
-${PYSITELIB}/flask/testsuite/templates/context_template.html
-${PYSITELIB}/flask/testsuite/templates/escaping_template.html
-${PYSITELIB}/flask/testsuite/templates/mail.txt
-${PYSITELIB}/flask/testsuite/templates/nested/nested.txt
-${PYSITELIB}/flask/testsuite/templates/simple_template.html
-${PYSITELIB}/flask/testsuite/templates/template_filter.html
-${PYSITELIB}/flask/testsuite/templates/template_test.html
-${PYSITELIB}/flask/testsuite/templating.py
-${PYSITELIB}/flask/testsuite/templating.pyc
-${PYSITELIB}/flask/testsuite/templating.pyo
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/admin/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/admin/static/css/test.css
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/admin/static/test.txt
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/admin/templates/admin/index.html
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/frontend/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/blueprintapp/apps/frontend/templates/frontend/index.html
-${PYSITELIB}/flask/testsuite/test_apps/config_module_app.py
-${PYSITELIB}/flask/testsuite/test_apps/config_module_app.pyc
-${PYSITELIB}/flask/testsuite/test_apps/config_module_app.pyo
-${PYSITELIB}/flask/testsuite/test_apps/config_package_app/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/config_package_app/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/config_package_app/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flask_broken/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/flask_broken/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flask_broken/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flask_broken/b.py
-${PYSITELIB}/flask/testsuite/test_apps/flask_broken/b.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flask_broken/b.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_package/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_package/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_package/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_package/submodule.py
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_package/submodule.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_package/submodule.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_simple.py
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_simple.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flask_newext_simple.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_package/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_package/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_package/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_package/submodule.py
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_package/submodule.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_package/submodule.pyo
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_simple.py
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_simple.pyc
-${PYSITELIB}/flask/testsuite/test_apps/flaskext/oldext_simple.pyo
-${PYSITELIB}/flask/testsuite/test_apps/importerror.py
-${PYSITELIB}/flask/testsuite/test_apps/importerror.pyc
-${PYSITELIB}/flask/testsuite/test_apps/importerror.pyo
-${PYSITELIB}/flask/testsuite/test_apps/lib/python2.5/site-packages/SiteEgg.egg
-${PYSITELIB}/flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.py
-${PYSITELIB}/flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.pyc
-${PYSITELIB}/flask/testsuite/test_apps/lib/python2.5/site-packages/site_app.pyo
-${PYSITELIB}/flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/lib/python2.5/site-packages/site_package/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/main_app.py
-${PYSITELIB}/flask/testsuite/test_apps/main_app.pyc
-${PYSITELIB}/flask/testsuite/test_apps/main_app.pyo
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/admin/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/admin/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/admin/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/admin/static/css/test.css
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/admin/static/test.txt
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/admin/templates/index.html
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/frontend/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/moduleapp/apps/frontend/templates/index.html
-${PYSITELIB}/flask/testsuite/test_apps/path/installed_package/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/path/installed_package/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/path/installed_package/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/subdomaintestmodule/__init__.py
-${PYSITELIB}/flask/testsuite/test_apps/subdomaintestmodule/__init__.pyc
-${PYSITELIB}/flask/testsuite/test_apps/subdomaintestmodule/__init__.pyo
-${PYSITELIB}/flask/testsuite/test_apps/subdomaintestmodule/static/hello.txt
-${PYSITELIB}/flask/testsuite/testing.py
-${PYSITELIB}/flask/testsuite/testing.pyc
-${PYSITELIB}/flask/testsuite/testing.pyo
-${PYSITELIB}/flask/testsuite/views.py
-${PYSITELIB}/flask/testsuite/views.pyc
-${PYSITELIB}/flask/testsuite/views.pyo
 ${PYSITELIB}/flask/views.py
 ${PYSITELIB}/flask/views.pyc
 ${PYSITELIB}/flask/views.pyo
diff -r c0eb84c449e9 -r acb413d08c37 www/py-flask/distinfo
--- a/www/py-flask/distinfo     Wed Jun 01 20:54:22 2016 +0000
+++ b/www/py-flask/distinfo     Wed Jun 01 21:05:46 2016 +0000
@@ -1,6 +1,7 @@
-$NetBSD: distinfo,v 1.3 2015/11/04 02:47:27 agc Exp $
+$NetBSD: distinfo,v 1.4 2016/06/01 21:05:46 kleink Exp $
 
-SHA1 (Flask-0.10.1.tar.gz) = d3d078262b053f4438e2ed3fd6f9b923c2c92172
-RMD160 (Flask-0.10.1.tar.gz) = 8f06ed2da14ed2dfbad7a38026a32f1117fb7600
-SHA512 (Flask-0.10.1.tar.gz) = 0008d62d03a46b071c7d0510513d011a9bfd2b77df7f677371a446ca9805d16b1ee5e17dd8dd7cde6443a629370234e44735e20381de20a7da385969797f053f
-Size (Flask-0.10.1.tar.gz) = 544247 bytes
+SHA1 (Flask-0.11.tar.gz) = 9a080ae1544583193ddc8c98787107c55ab89b34
+RMD160 (Flask-0.11.tar.gz) = 3a5c9c8835d57da552b7f0b6cfee2f58b0f7590b
+SHA512 (Flask-0.11.tar.gz) = 77ee9998c96ba5e4eb007b81e04a051a6f8fc3ac837496a8c9e6637fdbff3e6fbba4912919b1cb2c5ed72951cc9fb8eb28d699e3f15de14ecbb51c362111eafc
+Size (Flask-0.11.tar.gz) = 563928 bytes
+SHA1 (patch-setup.py) = f8eb610f7e620355862d0d8edb818636f7e6d3c3
diff -r c0eb84c449e9 -r acb413d08c37 www/py-flask/patches/patch-setup.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/www/py-flask/patches/patch-setup.py       Wed Jun 01 21:05:46 2016 +0000
@@ -0,0 +1,23 @@
+$NetBSD: patch-setup.py,v 1.1 2016/06/01 21:05:46 kleink Exp $
+
+Adjust script path to allow multiple Python version installs.
+
+--- setup.py.orig      2016-05-22 08:33:12.000000000 +0000
++++ setup.py
+@@ -43,6 +43,7 @@ Links
+ 
+ """
+ import re
++import sys
+ import ast
+ from setuptools import setup
+ 
+@@ -93,6 +94,6 @@ setup(
+     ],
+     entry_points='''
+         [console_scripts]
+-        flask=flask.cli:main
+-    '''
++        flask%s=flask.cli:main
++    ''' % sys.version[0:3]
+ )



Home | Main Index | Thread Index | Old Index