From: Sebastian Wagner Date: Thu, 12 Sep 2019 13:31:34 +0000 (+0200) Subject: mgr/orchstrator: Removed all type anotations incompatible to Python 2 X-Git-Tag: v15.1.0~737^2~9 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=310f5090ab0445493e36cb547d08f20cf636bbb7;p=ceph-ci.git mgr/orchstrator: Removed all type anotations incompatible to Python 2 * Reduce mypy's type checking capability * Remove useful code documentation Signed-off-by: Sebastian Wagner --- diff --git a/src/pybind/mgr/orchestrator.py b/src/pybind/mgr/orchestrator.py index f335eec7f7b..2ba4f1f538f 100644 --- a/src/pybind/mgr/orchestrator.py +++ b/src/pybind/mgr/orchestrator.py @@ -27,17 +27,10 @@ from mgr_util import format_bytes try: from ceph.deployment.drive_group import DriveGroupSpec from typing import TypeVar, Generic, List, Optional, Union, Tuple, Iterator, Callable, Any, Type - except ImportError: pass - #T, G = object, object -T = TypeVar('T') -U = TypeVar('U') -V = TypeVar('V') -G = Generic[T] -Promises = TypeVar('Promises', bound='_Promise') -Completions = TypeVar('Completions', bound='Completion') +logger = logging.getLogger(__name__) @@ -160,7 +153,7 @@ def _no_result(): return object() -class _Promise(Generic[T]): +class _Promise(object): """ A completion may need multiple promises to be fulfilled. `_Promise` is one step. @@ -177,12 +170,12 @@ class _Promise(Generic[T]): NO_RESULT = _no_result() # type: None def __init__(self, - _first_promise=None, # type: Optional["_Promise[V]"] - value=NO_RESULT, # type: Optional[T] - on_complete=None # type: Optional[Callable[[T], Union[U, _Promise[U]]]] + _first_promise=None, # type: Optional["_Promise"] + value=NO_RESULT, # type: Optional + on_complete=None # type: Optional[Callable] ): self._on_complete = on_complete - self._next_promise = None # type: Optional[_Promise[U]] + self._next_promise = None # type: Optional[_Promise] self._state = self.INITIALIZED self._exception = None # type: Optional[Exception] @@ -202,7 +195,7 @@ class _Promise(Generic[T]): ) def then(self, on_complete): - # type: (Promises, Callable[[T], Union[U, _Promise[U]]]) -> Promises[U] + # type: (Any, Callable) -> Any """ Call ``on_complete`` as soon as this promise is finalized. """ @@ -221,7 +214,7 @@ class _Promise(Generic[T]): return self._next_promise def _set_next_promise(self, next): - # type: (_Promise[U]) -> None + # type: (_Promise) -> None assert self is not next assert self._state is self.INITIALIZED @@ -231,7 +224,6 @@ class _Promise(Generic[T]): p._first_promise = self._first_promise def finalize(self, value=NO_RESULT): - # type: (Optional[T]) -> None """ Sets this promise to complete. @@ -318,7 +310,7 @@ class ProgressReference(object): def __init__(self, message, # type: str mgr, - completion=None # type: Optional[Callable[[], Completion[float]]] + completion=None # type: Optional[Callable[[], Completion]] ): """ ProgressReference can be used within Completions:: @@ -341,7 +333,7 @@ class ProgressReference(object): #: The completion can already have a result, before the write #: operation is effective. progress == 1 means, the services are #: created / removed. - self.completion = completion # type: Optional[Callable[[], Completion[float]]] + self.completion = completion # type: Optional[Callable[[], Completion]] #: if a orchestrator module can provide a more detailed #: progress information, it needs to also call ``progress.update()``. @@ -400,7 +392,7 @@ class ProgressReference(object): self.progress = 1 -class Completion(_Promise[T]): +class Completion(_Promise): """ Combines multiple promises into one overall operation. @@ -430,9 +422,9 @@ class Completion(_Promise[T]): """ def __init__(self, - _first_promise=None, # type: Optional["Completion[V]"] - value=_Promise.NO_RESULT, # type: Optional[T] - on_complete=None # type: Optional[Callable[[T], Union[U, Completion[U]]]] + _first_promise=None, # type: Optional["Completion"] + value=_Promise.NO_RESULT, # type: Any + on_complete=None # type: Optional[Callable] ): super(Completion, self).__init__(_first_promise, value, on_complete) @@ -458,15 +450,15 @@ class Completion(_Promise[T]): return None @classmethod - def with_progress(cls, # type: Completions[T] + def with_progress(cls, # type: Any message, # type: str mgr, - _first_promise=None, # type: Optional["Completions[V]"] - value=_Promise.NO_RESULT, # type: Optional[T] - on_complete=None, # type: Optional[Callable[[T], Union[U, Completions[U]]]] - calc_percent=None # type: Optional[Callable[[], Completions[float]]] + _first_promise=None, # type: Optional["Completions"] + value=_Promise.NO_RESULT, # type: Any + on_complete=None, # type: Optional[Callable] + calc_percent=None # type: Optional[Callable[[], Any]] ): - # type: (...) -> Completions[T] + # type: (...) -> Any c = cls( _first_promise=_first_promise, @@ -587,7 +579,7 @@ def raise_if_exception(c): raise e -class TrivialReadCompletion(Completion[T]): +class TrivialReadCompletion(Completion): """ This is the trivial completion simply wrapping a result. """ @@ -732,7 +724,7 @@ class Orchestrator(object): raise NotImplementedError() def get_hosts(self): - # type: () -> Completion[List[InventoryNode]] + # type: () -> Completion """ Report the hosts in the cluster. @@ -757,7 +749,7 @@ class Orchestrator(object): return NotImplementedError() def get_inventory(self, node_filter=None, refresh=False): - # type: (InventoryFilter, bool) -> Completion[List[InventoryNode]] + # type: (InventoryFilter, bool) -> Completion """ Returns something that was created by `ceph-volume inventory`. @@ -766,7 +758,7 @@ class Orchestrator(object): raise NotImplementedError() def describe_service(self, service_type=None, service_id=None, node_name=None, refresh=False): - # type: (Optional[str], Optional[str], Optional[str], bool) -> Completion[List[ServiceDescription]] + # type: (Optional[str], Optional[str], Optional[str], bool) -> Completion """ Describe a service (of any kind) that is already configured in the orchestrator. For example, when viewing an OSD in the dashboard @@ -942,7 +934,7 @@ class Orchestrator(object): @_hide_in_features def upgrade_status(self): - # type: () -> Completion[UpgradeStatusSpec] + # type: () -> Completion """ If an upgrade is currently underway, report on where we are in the process, or if some error has occurred. @@ -953,7 +945,7 @@ class Orchestrator(object): @_hide_in_features def upgrade_available(self): - # type: () -> Completion[List[str]] + # type: () -> Completion """ Report on what versions are available to upgrade to diff --git a/src/pybind/mgr/rook/module.py b/src/pybind/mgr/rook/module.py index b2092d167ef..c0384437f0a 100644 --- a/src/pybind/mgr/rook/module.py +++ b/src/pybind/mgr/rook/module.py @@ -10,9 +10,6 @@ try: except ImportError: pass # just for type checking -T = TypeVar('T') - - try: from kubernetes import client, config from kubernetes.client.rest import ApiException @@ -36,13 +33,13 @@ import orchestrator from .rook_cluster import RookCluster -class RookCompletion(orchestrator.Completion[T]): +class RookCompletion(orchestrator.Completion): def evaluate(self): self._first_promise.finalize(None) def deferred_read(f): - # type: (Callable[..., T]) -> Callable[..., RookCompletion[T]] + # type: (Callable) -> Callable[..., RookCompletion] """ Decorator to make RookOrchestrator methods return a completion object that executes themselves. @@ -55,12 +52,12 @@ def deferred_read(f): return wrapper -def write_completion(on_complete, # type: Callable[[], T] +def write_completion(on_complete, # type: Callable message, # type: str mgr, - calc_percent=None # type: Optional[Callable[[], RookCompletion[float]]] + calc_percent=None # type: Optional[Callable[[], RookCompletion]] ): - # type: (...) -> RookCompletion[T] + # type: (...) -> RookCompletion return RookCompletion.with_progress( message=message, mgr=mgr, diff --git a/src/pybind/mgr/ssh/module.py b/src/pybind/mgr/ssh/module.py index af42e778ad3..5dd0f66f7b8 100644 --- a/src/pybind/mgr/ssh/module.py +++ b/src/pybind/mgr/ssh/module.py @@ -9,7 +9,6 @@ try: except ImportError: pass # just for type checking -T = TypeVar('T') import six import os @@ -71,10 +70,10 @@ except ImportError: # multiple bootstrapping / initialization -class AsyncCompletion(orchestrator.Completion[T]): - def __init__(self, *args, many=False, **kwargs): - self.__on_complete = None # type: Callable[[T], Any] - self.many = many +class AsyncCompletion(orchestrator.Completion): + def __init__(self, *args, **kwargs): + self.__on_complete = None # type: Callable + self.many = kwargs.pop('many') super(AsyncCompletion, self).__init__(*args, **kwargs) def propagate_to_next(self): @@ -89,7 +88,7 @@ class AsyncCompletion(orchestrator.Completion[T]): @property def _on_complete(self): - # type: () -> Optional[Callable[[T], Any]] + # type: () -> Optional[Callable] if self.__on_complete is None: return None @@ -112,7 +111,7 @@ class AsyncCompletion(orchestrator.Completion[T]): @_on_complete.setter def _on_complete(self, inner): - # type: (Callable[[T], Any]) -> None + # type: (Callable) -> None self.__on_complete = inner @@ -131,17 +130,17 @@ def ssh_completion(cls=AsyncCompletion, **c_kwargs): def async_completion(f): - # type: (Callable[..., T]) -> Callable[..., AsyncCompletion[T]] + # type: (Callable) -> Callable[..., AsyncCompletion] return ssh_completion()(f) def async_map_completion(f): - # type: (Callable[..., T]) -> Callable[..., AsyncCompletion[T]] + # type: (Callable) -> Callable[..., AsyncCompletion] return ssh_completion(many=True)(f) def trivial_completion(f): - # type: (Callable[..., T]) -> Callable[..., orchestrator.Completion[T]] + # type: (Callable) -> Callable[..., orchestrator.Completion] return ssh_completion(cls=orchestrator.Completion)(f) diff --git a/src/pybind/mgr/test_orchestrator/module.py b/src/pybind/mgr/test_orchestrator/module.py index 43c6c44da21..70118e8a4c5 100644 --- a/src/pybind/mgr/test_orchestrator/module.py +++ b/src/pybind/mgr/test_orchestrator/module.py @@ -15,16 +15,14 @@ from mgr_module import MgrModule import orchestrator -T = TypeVar('T') - -class TestCompletion(orchestrator.Completion[T]): +class TestCompletion(orchestrator.Completion): def evaluate(self): self._first_promise.finalize(None) def deferred_read(f): - # type: (Callable[..., T]) -> Callable[..., TestCompletion[T]] + # type: (Callable) -> Callable[..., TestCompletion] """ Decorator to make methods return a completion object that executes themselves. @@ -39,7 +37,7 @@ def deferred_read(f): def deferred_write(message): def inner(f): - # type: (Callable[..., T]) -> Callable[..., TestCompletion[T]] + # type: (Callable) -> Callable[..., TestCompletion] @functools.wraps(f) def wrapper(self, *args, **kwargs):