Add tomorrow to repo rather than dependency

This commit is contained in:
blitzmann
2015-10-24 22:39:43 -04:00
parent c81774a3aa
commit ff87d5e456
2 changed files with 45 additions and 1 deletions

View File

@@ -21,7 +21,7 @@ import urllib
from cStringIO import StringIO
from sqlalchemy.orm import reconstructor
from tomorrow import threads
from eos.tomorrow import threads
class Crest(object):

44
eos/tomorrow.py Normal file
View File

@@ -0,0 +1,44 @@
# https://github.com/madisonmay/Tomorrow
from functools import wraps
from concurrent.futures import ThreadPoolExecutor
class Tomorrow():
def __init__(self, future, timeout):
self._future = future
self._timeout = timeout
def __getattr__(self, name):
result = self._wait()
return result.__getattribute__(name)
def _wait(self):
return self._future.result(self._timeout)
def async(n, base_type, timeout=None):
def decorator(f):
if isinstance(n, int):
pool = base_type(n)
elif isinstance(n, base_type):
pool = n
else:
raise TypeError(
"Invalid type: %s"
% type(base_type)
)
@wraps(f)
def wrapped(*args, **kwargs):
return Tomorrow(
pool.submit(f, *args, **kwargs),
timeout=timeout
)
return wrapped
return decorator
def threads(n, timeout=None):
return async(n, ThreadPoolExecutor, timeout)