Skip to content
This repository has been archived by the owner on Oct 5, 2021. It is now read-only.

Commit

Permalink
prepare
Browse files Browse the repository at this point in the history
  • Loading branch information
gotcha committed Sep 27, 2010
0 parents commit 97d05b6
Show file tree
Hide file tree
Showing 16 changed files with 841 additions and 0 deletions.
1 change: 1 addition & 0 deletions COPYRIGHT.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Zope Foundation and Contributors
44 changes: 44 additions & 0 deletions LICENSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Zope Public License (ZPL) Version 2.1

A copyright notice accompanies this license document that identifies the
copyright holders.

This license has been certified as open source. It has also been designated as
GPL compatible by the Free Software Foundation (FSF).

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions in source code must retain the accompanying copyright
notice, this list of conditions, and the following disclaimer.

2. Redistributions in binary form must reproduce the accompanying copyright
notice, this list of conditions, and the following disclaimer in the
documentation and/or other materials provided with the distribution.

3. Names of the copyright holders must not be used to endorse or promote
products derived from this software without prior written permission from the
copyright holders.

4. The right to distribute this software or to use it for any purpose does not
give you the right to use Servicemarks (sm) or Trademarks (tm) of the
copyright
holders. Use of them is covered by separate agreement with the copyright
holders.

5. If any files are modified, you must cause the modified files to carry
prominent notices stating that you changed the files and the date of any
change.

Disclaimer

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4 changes: 4 additions & 0 deletions README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Introduction
============


121 changes: 121 additions & 0 deletions bootstrap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
##############################################################################
#
# Copyright (c) 2006 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL 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.
#
##############################################################################
"""Bootstrap a buildout-based project
Simply run this script in a directory containing a buildout.cfg.
The script accepts buildout command-line options, so you can
use the -c option to specify an alternate configuration file.
$Id: bootstrap.py 105417 2009-11-01 15:15:20Z tarek $
"""

import os, shutil, sys, tempfile, urllib2
from optparse import OptionParser

tmpeggs = tempfile.mkdtemp()

is_jython = sys.platform.startswith('java')

# parsing arguments
parser = OptionParser()
parser.add_option("-v", "--version", dest="version",
help="use a specific zc.buildout version")
parser.add_option("-d", "--distribute",
action="store_true", dest="distribute", default=False,
help="Use Disribute rather than Setuptools.")

parser.add_option("-c", None, action="store", dest="config_file",
help=("Specify the path to the buildout configuration "
"file to be used."))

options, args = parser.parse_args()

# if -c was provided, we push it back into args for buildout' main function
if options.config_file is not None:
args += ['-c', options.config_file]

if options.version is not None:
VERSION = '==%s' % options.version
else:
VERSION = ''

USE_DISTRIBUTE = options.distribute
args = args + ['bootstrap']

to_reload = False
try:
import pkg_resources
if not hasattr(pkg_resources, '_distribute'):
to_reload = True
raise ImportError
except ImportError:
ez = {}
if USE_DISTRIBUTE:
exec urllib2.urlopen('http://python-distribute.org/distribute_setup.py'
).read() in ez
ez['use_setuptools'](to_dir=tmpeggs, download_delay=0, no_fake=True)
else:
exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
).read() in ez
ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)

if to_reload:
reload(pkg_resources)
else:
import pkg_resources

if sys.platform == 'win32':
def quote(c):
if ' ' in c:
return '"%s"' % c # work around spawn lamosity on windows
else:
return c
else:
def quote (c):
return c

cmd = 'from setuptools.command.easy_install import main; main()'
ws = pkg_resources.working_set

if USE_DISTRIBUTE:
requirement = 'distribute'
else:
requirement = 'setuptools'

if is_jython:
import subprocess

assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd',
quote(tmpeggs), 'zc.buildout' + VERSION],
env=dict(os.environ,
PYTHONPATH=
ws.find(pkg_resources.Requirement.parse(requirement)).location
),
).wait() == 0

else:
assert os.spawnle(
os.P_WAIT, sys.executable, quote (sys.executable),
'-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout' + VERSION,
dict(os.environ,
PYTHONPATH=
ws.find(pkg_resources.Requirement.parse(requirement)).location
),
) == 0

ws.add_entry(tmpeggs)
ws.require('zc.buildout' + VERSION)
import zc.buildout.buildout
zc.buildout.buildout.main(args)
shutil.rmtree(tmpeggs)
74 changes: 74 additions & 0 deletions buildout.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
[buildout]
extensions = mr.developer
develop = .
parts = zope2 instance test test-coverage z3c.coverage omelette py
extends = http://dist.plone.org/release/3.3.5/versions.cfg
versions = versions
sources-dir = devel

[sources]
z3c.taskqueue = svn svn+ssh://gotcha@svn.zope.org/repos/main/Sandbox/gotcha/z3c.taskqueue

[instance]
recipe = plone.recipe.zope2instance
zope2-location = ${zope2:location}
user = admin:admin
eggs = five.taskqueue
zcml = five.taskqueue
zope-conf-additional =
<product-config five.taskqueue>
autostart *@*
</product-config>

[test]
recipe = zc.recipe.testrunner
defaults = ['--tests-pattern', '^f?tests$']
extra-paths = ${zope2:location}/lib/python
eggs = ${instance:eggs}

[zope2]
recipe = plone.recipe.zope2install
url = ${versions:zope2-url}
fake-zope-eggs = true
skip-fake-eggs = docutils
zope.testing
zope.schema
zope.exceptions
zope.configuration
zope.component
zope.interface
zope.location
zope.proxy

[py]
recipe = zc.recipe.egg
interpreter = python
eggs = ${test:eggs}

[test-coverage]
recipe = zc.recipe.testrunner
eggs = ${test:eggs}
defaults = ['--coverage', '${buildout:directory}/coverage', '--auto-progress']
extra-paths = ${test:extra-paths}

[z3c.coverage]
recipe = zc.recipe.egg
eggs = z3c.coverage
scripts = coveragereport
arguments = ('coverage', 'coverage/report')

[omelette]
recipe = collective.recipe.omelette
eggs = ${test:eggs}
products =
packages = ${zope2:location}/lib/python ./

[versions]
zope.component = 3.5.1
zope.configuration = 3.5.0
zope.container = 3.7.1
zope.location = 3.5
zope.site = 3.6.0
zope.schema = 3.6.1
zope.interface = 3.5.2
mr.developer = 1.7
7 changes: 7 additions & 0 deletions docs/HISTORY.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Changelog
=========

0.1-alpha-1 (2010-09-27)
------------------------

- Initial release
32 changes: 32 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from setuptools import setup, find_packages
import os

version = '0.1-alpha-1'

setup(name='five.taskqueue',
version=version,
description="Zope2 integration of z3c.taskqueue",
long_description=open("README.txt").read() + "\n" +
open(os.path.join("docs", "HISTORY.txt")).read(),
classifiers=[
"Programming Language :: Python",
],
keywords='',
author='',
author_email='',
url='',
license='ZPL 2.1',
packages=find_packages('src'),
package_dir={'': 'src'},
namespace_packages=['five'],
include_package_data=True,
zip_safe=False,
install_requires=[
'setuptools',
'z3c.taskqueue',
'five.dbevent',
],
entry_points="""
# -*- Entry points: -*-
""",
)
6 changes: 6 additions & 0 deletions src/five/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
try:
__import__('pkg_resources').declare_namespace(__name__)
except ImportError:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Empty file added src/five/taskqueue/__init__.py
Empty file.
18 changes: 18 additions & 0 deletions src/five/taskqueue/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<configure
xmlns="http://namespaces.zope.org/zope"
i18n_domain="five.taskqueue">

<include package="five.dbevent" />

<subscriber
for="zope.app.appsetup.interfaces.IDatabaseOpenedWithRootEvent"
handler=".startup.databaseOpened"
/>

<subscriber
for="z3c.taskqueue.interfaces.ITaskService
zope.container.interfaces.IObjectAddedEvent"
handler=".service.setNameAndParent"
/>

</configure>
53 changes: 53 additions & 0 deletions src/five/taskqueue/processor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import logging

from ZPublisher.HTTPRequest import HTTPRequest
from ZPublisher.HTTPResponse import HTTPResponse
import ZPublisher

from z3c.taskqueue.processor import BaseSimpleProcessor
from z3c.taskqueue.processor import BaseMultiProcessor
from z3c.taskqueue.processor import ERROR_MARKER

log = logging.getLogger('z3c.taskqueue')


class Response(HTTPResponse):
"""override setBody to avoid that method result gets turned to a string."""

def setBody(self, body):
self.body = body


class Z2PublisherMixin(object):

def call(self, method, args=(), errorValue=ERROR_MARKER):
path = self.servicePath[:] + [method]
response = Response()
env = {'SERVER_NAME': 'dummy',
'SERVER_PORT': '8080',
'PATH_INFO': '/' + '/'.join(path)}
request = HTTPRequest(None, env, response)
request.args = args
conn = self.db.open()
root = conn.root()
request['PARENTS'] = [root['Application']]
try:
try:
ZPublisher.Publish.publish(request, 'Zope2', [None])
except Exception, error:
# This thread should never crash, thus a blank except
log.error('Processor: ``%s()`` caused an error!' % method)
log.exception(error)
return errorValue is ERROR_MARKER and error or errorValue
finally:
request.close()
conn.close()
return request.response.body


class SimpleProcessor(Z2PublisherMixin, BaseSimpleProcessor):
""" SimpleProcessor for Zope2 """


class MultiProcessor(Z2PublisherMixin, BaseMultiProcessor):
""" SimpleProcessor for Zope2 """
20 changes: 20 additions & 0 deletions src/five/taskqueue/service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import sys

from BTrees.IOBTree import IOBTree
from OFS.SimpleItem import SimpleItem

from z3c.taskqueue.baseservice import BaseTaskService


class TaskService(BaseTaskService, SimpleItem):
containerClass = IOBTree
maxint = sys.maxint

def getServicePath(self):
path = [part for part in self.getPhysicalPath() if part]
return path


def setNameAndParent(object, event):
object.__name__ = event.newName
event.object.__parent__ = event.newParent
Loading

0 comments on commit 97d05b6

Please sign in to comment.