Source code for gemstone.util

import logging
import importlib

from gemstone.client import RemoteService, AsyncMethodCall


def init_default_logger():
    logging.basicConfig(
        level=logging.DEBUG,
    )
    return logging.getLogger()


[docs]def as_completed(*async_result_wrappers): """ Yields results as they become available from asynchronous method calls. Example usage :: async_calls = [service.call_method_async("do_stuff", (x,)) for x in range(25)] for async_call in gemstone.as_completed(*async_calls): print("just finished with result ", async_call.result()) :param async_result_wrappers: :py:class:`gemstone.client.structs.AsyncMethodCall` instances. :return: a generator that yields items as soon they results become available. .. versionadded:: 0.5.0 """ for item in async_result_wrappers: if not isinstance(item, AsyncMethodCall): raise TypeError("Got non-AsyncMethodCall object: {}".format(item)) wrappers_copy = list(async_result_wrappers) while len(wrappers_copy): completed = list(filter(lambda x: x.finished(), wrappers_copy)) if not len(completed): continue for item in completed: wrappers_copy.remove(item) yield item
[docs]def first_completed(*async_result_wrappers): """ Just like :py:func:`as_completed`, but returns only the first item and discards the rest. :param async_result_wrappers: :return: .. versionadded:: 0.5.0 """ for item in async_result_wrappers: if not isinstance(item, AsyncMethodCall): raise TypeError("Got non-AsyncMethodCall object: {}".format(item)) wrappers_copy = list(async_result_wrappers) while True: completed = list(filter(lambda x: x.finished(), wrappers_copy)) if not len(completed): continue return completed[0].result()
def get_remote_service_instance_for_url(url): return RemoteService(url)
[docs]def dynamic_load(module_or_member): """ Dynamically loads a class or member of a class. If ``module_or_member`` is something like ``"a.b.c"``, will perform ``from a.b import c``. If ``module_or_member`` is something like ``"a"`` will perform ``import a`` :param module_or_member: the name of a module or member of a module to import. :return: the returned entity, be it a module or member of a module. """ parts = module_or_member.split(".") if len(parts) > 1: name_to_import = parts[-1] module_to_import = ".".join(parts[:-1]) else: name_to_import = None module_to_import = module_or_member module = importlib.import_module(module_to_import) if name_to_import: to_return = getattr(module, name_to_import) if not to_return: raise AttributeError("{} has no attribute {}".format(module, name_to_import)) return to_return else: return module