############################################################################## # # Copyright (c) 2007 Agendaless Consulting and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the BSD-like license at # http://www.repoze.org/LICENSE.txt. A copy of the license should accompany # this distribution. THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL # EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, # THE IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND # FITNESS FOR A PARTICULAR PURPOSE # ############################################################################## __version__ = '0.1.6' GROK_VERSION = '0.11' # track the underlying grok release for clarity. from ez_setup import use_setuptools use_setuptools() import os import re from setuptools import setup, find_packages from ConfigParser import ConfigParser from urllib2 import urlopen here = os.path.abspath(os.path.dirname(__file__)) README = open(os.path.join(here, 'README.txt')).read() CHANGES = open(os.path.join(here, 'CHANGES.txt')).read() # Convert Grok's "frozen set", which is in buildout.cfg format, into # a list of setuptools requirements. configs = os.path.join(here, 'configs') grok_kgs = 'grok-%s.cfg' % GROK_VERSION grok_kgs_here = os.path.join(configs, grok_kgs) if not os.path.exists(grok_kgs_here): text = urlopen('http://grok.zope.org/releaseinfo/%s' % grok_kgs).read() f = open(grok_kgs_here, 'w') f.write(text) f.close() class ObligatoryConfigParserSubclass(ConfigParser): def optionxform(self, optionstr): return optionstr grok_cfg = ObligatoryConfigParserSubclass() grok_cfg.read(grok_kgs_here) grok_requires = [] for project, version in grok_cfg.items('versions'): grok_requires.append('%s==%s' % (project, version)) # I would use string.Template, but it's just too hard to change it to # respect only ${brace} syntax instead of both that and $name syntax. TOKEN_RE = re.compile(r'\$\{([\.\w/-]+)\}') def rewrite(repltext, **kw): def replace(match): return kw[match.group(1)] return TOKEN_RE.sub(replace, repltext) setup(name='repoze.grok', version=__version__, description='Emulate Zope 3 publisher semantics for Grok apps', long_description='\n\n'.join([README, CHANGES]), classifiers=[ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Framework :: Zope3", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", ], keywords='web application server wsgi zope grok', author="Agendaless Consulting", author_email="reopze-dev@lists.repoze.org", url="http://www.repoze.org", license="BSD-derived (http://www.repoze.org/LICENSE.txt)", packages=find_packages(), include_package_data=True, namespace_packages=['repoze'], zip_safe=False, install_requires=[ 'PasteScript', 'grokproject', ] + grok_requires, entry_points = """\ [paste.server_runner] zserver = repoze.grok.server:run_zserver [console_scripts] mkgrokinstance = repoze.grok.scripts.initialize:main [repoze.project] initialize = repoze.grok.scripts.initialize:mkgrokinstance """, )