mirror of https://github.com/Shizmob/pydle.git
Fix import errors more elegantly.
This commit is contained in:
parent
b76967dc77
commit
b37c2b39ea
|
@ -1,37 +1,34 @@
|
||||||
import os
|
from . import async, connection, protocol, client, features
|
||||||
|
|
||||||
|
from .async import coroutine, Future
|
||||||
|
from .client import Error, NotInChannel, AlreadyInChannel, BasicClient, ClientPool
|
||||||
|
from .features.ircv3_1.cap import NEGOTIATING as CAPABILITY_NEGOTIATING, FAILED as CAPABILITY_FAILED, NEGOTIATED as CAPABILITY_NEGOTIATED
|
||||||
|
|
||||||
__name__ = 'pydle'
|
__name__ = 'pydle'
|
||||||
__version__ = '0.8.0'
|
__version__ = '0.8.0'
|
||||||
__version_info__ = (0, 8, 0)
|
__version_info__ = (0, 8, 0)
|
||||||
__license__ = '3-clause BSD'
|
__license__ = 'BSD'
|
||||||
|
|
||||||
|
|
||||||
if os.environ.get('READTHEDOCS', None) != 'True':
|
def featurize(*features):
|
||||||
from . import async, connection, protocol, client, features
|
""" Put features into proper MRO order. """
|
||||||
|
from functools import cmp_to_key
|
||||||
|
|
||||||
from .async import coroutine, Future
|
def compare_subclass(left, right):
|
||||||
from .client import Error, NotInChannel, AlreadyInChannel, BasicClient, ClientPool
|
if issubclass(left, right):
|
||||||
from .features.ircv3_1.cap import NEGOTIATING as CAPABILITY_NEGOTIATING, FAILED as CAPABILITY_FAILED, NEGOTIATED as CAPABILITY_NEGOTIATED
|
return -1
|
||||||
|
elif issubclass(right, left):
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
def featurize(*features):
|
sorted_features = sorted(features, key=cmp_to_key(compare_subclass))
|
||||||
""" Put features into proper MRO order. """
|
name = 'FeaturizedClient[{features}]'.format(features=', '.join(feature.__name__ for feature in sorted_features))
|
||||||
from functools import cmp_to_key
|
return type(name, tuple(sorted_features), {})
|
||||||
|
|
||||||
def compare_subclass(left, right):
|
class Client(featurize(*features.ALL)):
|
||||||
if issubclass(left, right):
|
""" A fully featured IRC client. """
|
||||||
return -1
|
pass
|
||||||
elif issubclass(right, left):
|
|
||||||
return 1
|
|
||||||
return 0
|
|
||||||
|
|
||||||
sorted_features = sorted(features, key=cmp_to_key(compare_subclass))
|
class MinimalClient(featurize(*features.LITE)):
|
||||||
name = 'FeaturizedClient[{features}]'.format(features=', '.join(feature.__name__ for feature in sorted_features))
|
""" A cut-down, less-featured IRC client. """
|
||||||
return type(name, tuple(sorted_features), {})
|
pass
|
||||||
|
|
||||||
class Client(featurize(*features.ALL)):
|
|
||||||
""" A fully featured IRC client. """
|
|
||||||
pass
|
|
||||||
|
|
||||||
class MinimalClient(featurize(*features.LITE)):
|
|
||||||
""" A cut-down, less-featured IRC client. """
|
|
||||||
pass
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
## async.py
|
## async.py
|
||||||
# Light wrapper around whatever async library pydle uses.
|
# Light wrapper around whatever async library pydle uses.
|
||||||
|
import os
|
||||||
import functools
|
import functools
|
||||||
import itertools
|
import itertools
|
||||||
import collections
|
import collections
|
||||||
|
@ -7,8 +8,24 @@ import threading
|
||||||
import datetime
|
import datetime
|
||||||
import types
|
import types
|
||||||
|
|
||||||
import tornado.concurrent
|
try:
|
||||||
import tornado.ioloop
|
import tornado.concurrent
|
||||||
|
import tornado.ioloop
|
||||||
|
except ImportError:
|
||||||
|
if os.environ.get('READTHEDOCS', None) == 'True':
|
||||||
|
# Shim some objects for RTD.
|
||||||
|
class tornado:
|
||||||
|
class concurrent:
|
||||||
|
class TracebackFuture:
|
||||||
|
pass
|
||||||
|
|
||||||
|
class ioloop:
|
||||||
|
class IOLoop:
|
||||||
|
READ = 1
|
||||||
|
WRITE = 2
|
||||||
|
ERROR = 3
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
FUTURE_TIMEOUT = 30
|
FUTURE_TIMEOUT = 30
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue