Remove zope.interface dependency, closes #131.
This commit is contained in:
5
debian/control
vendored
5
debian/control
vendored
@@ -5,7 +5,6 @@ Maintainer: Neil Williams <neil@spladug.net>
|
|||||||
Build-Depends: python-setuptools (>= 0.6b3),
|
Build-Depends: python-setuptools (>= 0.6b3),
|
||||||
python-all (>= 2.6.6-3),
|
python-all (>= 2.6.6-3),
|
||||||
debhelper (>= 8.0.0),
|
debhelper (>= 8.0.0),
|
||||||
python-repoze.sphinx.autointerface,
|
|
||||||
python-sphinx (>= 1.0.7+dfsg) | python3-sphinx,
|
python-sphinx (>= 1.0.7+dfsg) | python3-sphinx,
|
||||||
Standards-Version: 3.9.3
|
Standards-Version: 3.9.3
|
||||||
Homepage: https://kazoo.readthedocs.org
|
Homepage: https://kazoo.readthedocs.org
|
||||||
@@ -17,7 +16,7 @@ Depends: ${python:Depends}, ${misc:Depends}
|
|||||||
Description: higher level API to Apache Zookeeper for Python clients
|
Description: higher level API to Apache Zookeeper for Python clients
|
||||||
Kazoo features:
|
Kazoo features:
|
||||||
.
|
.
|
||||||
* Support for gevent 0.13 and gevent 1.0b
|
* Support for gevent 0.13 and gevent 1.0
|
||||||
* Unified asynchronous API for use with greenlets or threads
|
* Unified asynchronous API for use with greenlets or threads
|
||||||
* Lock, Party, Election, and Partitioner recipe implementations (more
|
* Lock, Party, Election, and Partitioner recipe implementations (more
|
||||||
implementations are in development)
|
implementations are in development)
|
||||||
@@ -36,7 +35,7 @@ Depends: ${misc:Depends}, ${sphinxdoc:Depends}
|
|||||||
Description: API to Apache Zookeeper for Python clients. - API documentation
|
Description: API to Apache Zookeeper for Python clients. - API documentation
|
||||||
Kazoo features:
|
Kazoo features:
|
||||||
.
|
.
|
||||||
* Support for gevent 0.13 and gevent 1.0b
|
* Support for gevent 0.13 and gevent 1.0
|
||||||
* Unified asynchronous API for use with greenlets or threads
|
* Unified asynchronous API for use with greenlets or threads
|
||||||
* Lock, Party, Election, and Partitioner recipe implementations (more
|
* Lock, Party, Election, and Partitioner recipe implementations (more
|
||||||
implementations are in development)
|
implementations are in development)
|
||||||
|
@@ -16,7 +16,7 @@ If the developer needs to use objects implementing the :class:`IAsyncResult`
|
|||||||
interface, the :meth:`IHandler.async_result` method must be used instead of
|
interface, the :meth:`IHandler.async_result` method must be used instead of
|
||||||
instantiating one directly.
|
instantiating one directly.
|
||||||
|
|
||||||
.. autointerface:: IHandler
|
.. autoclass:: IHandler
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Private API
|
Private API
|
||||||
@@ -29,5 +29,5 @@ instead of taking a completion callback for async functions, developers
|
|||||||
wishing to have their own callback called should use the
|
wishing to have their own callback called should use the
|
||||||
:meth:`IAsyncResult.rawlink` method.
|
:meth:`IAsyncResult.rawlink` method.
|
||||||
|
|
||||||
.. autointerface:: IAsyncResult
|
.. autoclass:: IAsyncResult
|
||||||
:members:
|
:members:
|
||||||
|
@@ -41,7 +41,6 @@ extensions = [
|
|||||||
'sphinx.ext.autodoc',
|
'sphinx.ext.autodoc',
|
||||||
'sphinx.ext.doctest',
|
'sphinx.ext.doctest',
|
||||||
'sphinx.ext.viewcode',
|
'sphinx.ext.viewcode',
|
||||||
'repoze.sphinx.autointerface',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
@@ -14,11 +14,8 @@ import gevent.thread
|
|||||||
from gevent.queue import Empty
|
from gevent.queue import Empty
|
||||||
from gevent.queue import Queue
|
from gevent.queue import Queue
|
||||||
from gevent import socket
|
from gevent import socket
|
||||||
from zope.interface import implementer
|
|
||||||
|
|
||||||
from kazoo.handlers.utils import create_tcp_socket, create_tcp_connection
|
from kazoo.handlers.utils import create_tcp_socket, create_tcp_connection
|
||||||
from kazoo.interfaces import IAsyncResult
|
|
||||||
from kazoo.interfaces import IHandler
|
|
||||||
|
|
||||||
_using_libevent = gevent.__version__.startswith('0.')
|
_using_libevent = gevent.__version__.startswith('0.')
|
||||||
|
|
||||||
@@ -26,10 +23,9 @@ log = logging.getLogger(__name__)
|
|||||||
|
|
||||||
_STOP = object()
|
_STOP = object()
|
||||||
|
|
||||||
AsyncResult = implementer(IAsyncResult)(gevent.event.AsyncResult)
|
AsyncResult = gevent.event.AsyncResult
|
||||||
|
|
||||||
|
|
||||||
@implementer(IHandler)
|
|
||||||
class SequentialGeventHandler(object):
|
class SequentialGeventHandler(object):
|
||||||
"""Gevent handler for sequentially executing callbacks.
|
"""Gevent handler for sequentially executing callbacks.
|
||||||
|
|
||||||
|
@@ -24,11 +24,7 @@ try:
|
|||||||
except ImportError: # pragma: nocover
|
except ImportError: # pragma: nocover
|
||||||
import queue as Queue
|
import queue as Queue
|
||||||
|
|
||||||
from zope.interface import implementer
|
|
||||||
|
|
||||||
from kazoo.handlers.utils import create_tcp_socket, create_tcp_connection
|
from kazoo.handlers.utils import create_tcp_socket, create_tcp_connection
|
||||||
from kazoo.interfaces import IAsyncResult
|
|
||||||
from kazoo.interfaces import IHandler
|
|
||||||
|
|
||||||
# sentinel objects
|
# sentinel objects
|
||||||
_NONE = object()
|
_NONE = object()
|
||||||
@@ -41,7 +37,6 @@ class TimeoutError(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@implementer(IAsyncResult)
|
|
||||||
class AsyncResult(object):
|
class AsyncResult(object):
|
||||||
"""A one-time event that stores a value or an exception"""
|
"""A one-time event that stores a value or an exception"""
|
||||||
def __init__(self, handler):
|
def __init__(self, handler):
|
||||||
@@ -148,7 +143,6 @@ class AsyncResult(object):
|
|||||||
self._callbacks.remove(callback)
|
self._callbacks.remove(callback)
|
||||||
|
|
||||||
|
|
||||||
@implementer(IHandler)
|
|
||||||
class SequentialThreadingHandler(object):
|
class SequentialThreadingHandler(object):
|
||||||
"""Threading handler for sequentially executing callbacks.
|
"""Threading handler for sequentially executing callbacks.
|
||||||
|
|
||||||
|
@@ -1,14 +1,18 @@
|
|||||||
"""Kazoo Interfaces"""
|
"""Kazoo Interfaces
|
||||||
from zope.interface import (
|
|
||||||
Attribute,
|
.. versionchanged:: 1.4
|
||||||
Interface,
|
|
||||||
)
|
The classes in this module used to be interface declarations based on
|
||||||
|
`zope.interface.Interface`. They were converted to normal classes and
|
||||||
|
now serve as documentation only.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
# public API
|
# public API
|
||||||
|
|
||||||
|
|
||||||
class IHandler(Interface):
|
class IHandler(object):
|
||||||
"""A Callback Handler for Zookeeper completion and watch callbacks
|
"""A Callback Handler for Zookeeper completion and watch callbacks.
|
||||||
|
|
||||||
This object must implement several methods responsible for
|
This object must implement several methods responsible for
|
||||||
determining how completion / watch callbacks are handled as well as
|
determining how completion / watch callbacks are handled as well as
|
||||||
@@ -24,55 +28,59 @@ class IHandler(Interface):
|
|||||||
* Zookeeper completion events
|
* Zookeeper completion events
|
||||||
* Zookeeper watch events
|
* Zookeeper watch events
|
||||||
|
|
||||||
|
.. attribute:: name
|
||||||
|
|
||||||
|
Human readable name of the Handler interface.
|
||||||
|
|
||||||
|
.. attribute:: timeout_exception
|
||||||
|
|
||||||
|
Exception class that should be thrown and captured if a
|
||||||
|
result is not available within the given time.
|
||||||
|
|
||||||
|
.. attribute:: sleep_func
|
||||||
|
|
||||||
|
Appropriate sleep function that can be called with a single
|
||||||
|
argument and sleep.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
name = Attribute(
|
|
||||||
"""Human readable name of the Handler interface""")
|
|
||||||
|
|
||||||
timeout_exception = Attribute(
|
def start(self):
|
||||||
"""Exception class that should be thrown and captured if a
|
|
||||||
result is not available within the given time""")
|
|
||||||
|
|
||||||
sleep_func = Attribute(
|
|
||||||
"""Appropriate sleep function that can be called with a single
|
|
||||||
argument and sleep.""")
|
|
||||||
|
|
||||||
def start():
|
|
||||||
"""Start the handler, used for setting up the handler."""
|
"""Start the handler, used for setting up the handler."""
|
||||||
|
|
||||||
def stop():
|
def stop(self):
|
||||||
"""Stop the handler. Should block until the handler is safely
|
"""Stop the handler. Should block until the handler is safely
|
||||||
stopped."""
|
stopped."""
|
||||||
|
|
||||||
def select():
|
def select(self):
|
||||||
"""A select method that implements Python's select.select
|
"""A select method that implements Python's select.select
|
||||||
API"""
|
API"""
|
||||||
|
|
||||||
def socket():
|
def socket(self):
|
||||||
"""A socket method that implements Python's socket.socket
|
"""A socket method that implements Python's socket.socket
|
||||||
API"""
|
API"""
|
||||||
|
|
||||||
def create_connection():
|
def create_connection(self):
|
||||||
"""A socket method that implements Python's
|
"""A socket method that implements Python's
|
||||||
socket.create_connection API"""
|
socket.create_connection API"""
|
||||||
|
|
||||||
def event_object():
|
def event_object(self):
|
||||||
"""Return an appropriate object that implements Python's
|
"""Return an appropriate object that implements Python's
|
||||||
threading.Event API"""
|
threading.Event API"""
|
||||||
|
|
||||||
def lock_object():
|
def lock_object(self):
|
||||||
"""Return an appropriate object that implements Python's
|
"""Return an appropriate object that implements Python's
|
||||||
threading.Lock API"""
|
threading.Lock API"""
|
||||||
|
|
||||||
def rlock_object():
|
def rlock_object(self):
|
||||||
"""Return an appropriate object that implements Python's
|
"""Return an appropriate object that implements Python's
|
||||||
threading.RLock API"""
|
threading.RLock API"""
|
||||||
|
|
||||||
def async_result():
|
def async_result(self):
|
||||||
"""Return an instance that conforms to the
|
"""Return an instance that conforms to the
|
||||||
:class:`~IAsyncResult` interface appropriate for this
|
:class:`~IAsyncResult` interface appropriate for this
|
||||||
handler"""
|
handler"""
|
||||||
|
|
||||||
def spawn(func, *args, **kwargs):
|
def spawn(self, func, *args, **kwargs):
|
||||||
"""Spawn a function to run asynchronously
|
"""Spawn a function to run asynchronously
|
||||||
|
|
||||||
:param args: args to call the function with.
|
:param args: args to call the function with.
|
||||||
@@ -83,7 +91,7 @@ class IHandler(Interface):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def dispatch_callback(callback):
|
def dispatch_callback(self, callback):
|
||||||
"""Dispatch to the callback object
|
"""Dispatch to the callback object
|
||||||
|
|
||||||
:param callback: A :class:`~kazoo.protocol.states.Callback`
|
:param callback: A :class:`~kazoo.protocol.states.Callback`
|
||||||
@@ -92,9 +100,9 @@ class IHandler(Interface):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class IAsyncResult(Interface):
|
class IAsyncResult(object):
|
||||||
"""An Async Result object that can be queried for a value that has
|
"""An Async Result object that can be queried for a value that has
|
||||||
been set asynchronously
|
been set asynchronously.
|
||||||
|
|
||||||
This object is modeled on the ``gevent`` AsyncResult object.
|
This object is modeled on the ``gevent`` AsyncResult object.
|
||||||
|
|
||||||
@@ -103,24 +111,27 @@ class IAsyncResult(Interface):
|
|||||||
Zookeeper thread which may require extra care under asynchronous
|
Zookeeper thread which may require extra care under asynchronous
|
||||||
environments.
|
environments.
|
||||||
|
|
||||||
|
.. attribute:: value
|
||||||
|
|
||||||
|
Holds the value passed to :meth:`set` if :meth:`set` was
|
||||||
|
called. Otherwise `None`.
|
||||||
|
|
||||||
|
.. attribute:: exception
|
||||||
|
|
||||||
|
Holds the exception instance passed to :meth:`set_exception`
|
||||||
|
if :meth:`set_exception` was called. Otherwise `None`.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
value = Attribute(
|
|
||||||
"""Holds the value passed to :meth:`set` if :meth:`set` was
|
|
||||||
called. Otherwise `None`""")
|
|
||||||
|
|
||||||
exception = Attribute(
|
def ready(self):
|
||||||
"""Holds the exception instance passed to :meth:`set_exception`
|
|
||||||
if :meth:`set_exception` was called. Otherwise `None`""")
|
|
||||||
|
|
||||||
def ready():
|
|
||||||
"""Return `True` if and only if it holds a value or an
|
"""Return `True` if and only if it holds a value or an
|
||||||
exception"""
|
exception"""
|
||||||
|
|
||||||
def successful():
|
def successful(self):
|
||||||
"""Return `True` if and only if it is ready and holds a
|
"""Return `True` if and only if it is ready and holds a
|
||||||
value"""
|
value"""
|
||||||
|
|
||||||
def set(value=None):
|
def set(self, value=None):
|
||||||
"""Store the value. Wake up the waiters.
|
"""Store the value. Wake up the waiters.
|
||||||
|
|
||||||
:param value: Value to store as the result.
|
:param value: Value to store as the result.
|
||||||
@@ -129,7 +140,7 @@ class IAsyncResult(Interface):
|
|||||||
up. Sequential calls to :meth:`wait` and :meth:`get` will not
|
up. Sequential calls to :meth:`wait` and :meth:`get` will not
|
||||||
block at all."""
|
block at all."""
|
||||||
|
|
||||||
def set_exception(exception):
|
def set_exception(self, exception):
|
||||||
"""Store the exception. Wake up the waiters.
|
"""Store the exception. Wake up the waiters.
|
||||||
|
|
||||||
:param exception: Exception to raise when fetching the value.
|
:param exception: Exception to raise when fetching the value.
|
||||||
@@ -138,7 +149,7 @@ class IAsyncResult(Interface):
|
|||||||
up. Sequential calls to :meth:`wait` and :meth:`get` will not
|
up. Sequential calls to :meth:`wait` and :meth:`get` will not
|
||||||
block at all."""
|
block at all."""
|
||||||
|
|
||||||
def get(block=True, timeout=None):
|
def get(self, block=True, timeout=None):
|
||||||
"""Return the stored value or raise the exception
|
"""Return the stored value or raise the exception
|
||||||
|
|
||||||
:param block: Whether this method should block or return
|
:param block: Whether this method should block or return
|
||||||
@@ -153,13 +164,13 @@ class IAsyncResult(Interface):
|
|||||||
:meth:`set_exception` has been called or until the optional
|
:meth:`set_exception` has been called or until the optional
|
||||||
timeout occurs."""
|
timeout occurs."""
|
||||||
|
|
||||||
def get_nowait():
|
def get_nowait(self):
|
||||||
"""Return the value or raise the exception without blocking.
|
"""Return the value or raise the exception without blocking.
|
||||||
|
|
||||||
If nothing is available, raise the Timeout exception class on
|
If nothing is available, raise the Timeout exception class on
|
||||||
the associated :class:`IHandler` interface."""
|
the associated :class:`IHandler` interface."""
|
||||||
|
|
||||||
def wait(timeout=None):
|
def wait(self, timeout=None):
|
||||||
"""Block until the instance is ready.
|
"""Block until the instance is ready.
|
||||||
|
|
||||||
:param timeout: How long to wait for a value when `block` is
|
:param timeout: How long to wait for a value when `block` is
|
||||||
@@ -171,7 +182,7 @@ class IAsyncResult(Interface):
|
|||||||
:meth:`set_exception` has been called or until the optional
|
:meth:`set_exception` has been called or until the optional
|
||||||
timeout occurs."""
|
timeout occurs."""
|
||||||
|
|
||||||
def rawlink(callback):
|
def rawlink(self, callback):
|
||||||
"""Register a callback to call when a value or an exception is
|
"""Register a callback to call when a value or an exception is
|
||||||
set
|
set
|
||||||
|
|
||||||
@@ -183,7 +194,7 @@ class IAsyncResult(Interface):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def unlink(callback):
|
def unlink(self, callback):
|
||||||
"""Remove the callback set by :meth:`rawlink`
|
"""Remove the callback set by :meth:`rawlink`
|
||||||
|
|
||||||
:param callback: A callback function to remove.
|
:param callback: A callback function to remove.
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
coverage==3.7.1
|
coverage==3.7.1
|
||||||
mock==1.0.1
|
mock==1.0.1
|
||||||
nose==1.3.1
|
nose==1.3.1
|
||||||
zope.interface==4.0.5
|
|
||||||
|
@@ -2,4 +2,3 @@ Jinja2==2.7.2
|
|||||||
Pygments==1.6
|
Pygments==1.6
|
||||||
Sphinx==1.2.2
|
Sphinx==1.2.2
|
||||||
docutils==0.11
|
docutils==0.11
|
||||||
repoze.sphinx.autointerface==0.7.1
|
|
||||||
|
5
setup.py
5
setup.py
@@ -14,9 +14,7 @@ with open(os.path.join(here, 'CHANGES.rst')) as f:
|
|||||||
PYTHON3 = sys.version_info > (3, )
|
PYTHON3 = sys.version_info > (3, )
|
||||||
PYPY = getattr(sys, 'pypy_version_info', False) and True or False
|
PYPY = getattr(sys, 'pypy_version_info', False) and True or False
|
||||||
|
|
||||||
install_requires = [
|
install_requires = []
|
||||||
'zope.interface >= 3.8.0', # has zope.interface.registry
|
|
||||||
]
|
|
||||||
|
|
||||||
tests_require = install_requires + [
|
tests_require = install_requires + [
|
||||||
'coverage',
|
'coverage',
|
||||||
@@ -33,7 +31,6 @@ on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
|
|||||||
if on_rtd:
|
if on_rtd:
|
||||||
install_requires.extend([
|
install_requires.extend([
|
||||||
'gevent',
|
'gevent',
|
||||||
'repoze.sphinx.autointerface',
|
|
||||||
])
|
])
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
|
Reference in New Issue
Block a user