Skip to content

Commit

Permalink
Merge pull request #479 from bageljrkhanofemus/task_handle
Browse files Browse the repository at this point in the history
introduce task handle base class
  • Loading branch information
lieryan committed Jun 3, 2022
2 parents e960373 + 2213d6a commit bad3bd2
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 9 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# **Upcoming release**


# Improvement

- #479 Add ABC and type hints for TaskHandle and JobSet (@bageljrkhanofemus)

# Release 1.1.1

## Bug fixes
Expand Down
89 changes: 85 additions & 4 deletions rope/base/taskhandle.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,75 @@
from abc import ABC, abstractmethod
from typing import Optional, Sequence

from rope.base import exceptions


class TaskHandle:
class BaseJobSet(ABC):
@abstractmethod
def started_job(self, name: str) -> None:
pass

@abstractmethod
def finished_job(self) -> None:
pass

@abstractmethod
def check_status(self) -> None:
pass

@abstractmethod
def get_active_job_name(self) -> str:
pass

@abstractmethod
def get_percent_done(self) -> Optional[float]:
pass

@abstractmethod
def get_name(self) -> str:
pass

@abstractmethod
def increment(self) -> None:
"""
Increment the number of tasks to complete.
This is used if the number is not known ahead of time.
"""
pass


class BaseTaskHandle(ABC):
@abstractmethod
def stop(self) -> None:
pass

@abstractmethod
def current_jobset(self) -> Optional[BaseJobSet]:
pass

@abstractmethod
def add_observer(self) -> None:
pass

@abstractmethod
def is_stopped(self) -> bool:
pass

@abstractmethod
def get_jobsets(self) -> Sequence[BaseJobSet]:
pass

def create_jobset(
self, name: str = "JobSet", count: Optional[int] = None
) -> BaseJobSet:
pass

def _inform_observers(self) -> None:
pass


class TaskHandle(BaseTaskHandle):
def __init__(self, name="Task", interrupts=True):
"""Construct a TaskHandle
Expand Down Expand Up @@ -52,7 +120,7 @@ def _inform_observers(self):
observer()


class JobSet:
class JobSet(BaseJobSet):
def __init__(self, handle, name, count):
self.handle = handle
self.name = name
Expand Down Expand Up @@ -86,8 +154,11 @@ def get_percent_done(self):
def get_name(self):
return self.name

def increment(self):
self.count += 1

class NullTaskHandle:

class NullTaskHandle(BaseTaskHandle):
def __init__(self):
pass

Expand All @@ -106,8 +177,15 @@ def get_jobsets(self):
def add_observer(self, observer):
pass

def current_jobset(self) -> None:
"""Return the current `JobSet`"""
return None


class NullJobSet(BaseJobSet):
def __init__(self, *args):
pass

class NullJobSet:
def started_job(self, name):
pass

Expand All @@ -125,3 +203,6 @@ def get_percent_done(self):

def get_name(self):
pass

def increment(self):
pass
9 changes: 4 additions & 5 deletions rope/contrib/autoimport/sqlite.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,14 @@


def get_future_names(
packages: List[Package], underlined: bool, job_set: taskhandle.JobSet
packages: List[Package], underlined: bool, job_set: taskhandle.BaseJobSet
) -> Generator[Future, None, None]:
"""Get all names as futures."""
with ProcessPoolExecutor() as executor:
for package in packages:
for module in get_files(package, underlined):
job_set.started_job(module.modname)
if not isinstance(job_set, taskhandle.NullJobSet):
job_set.count += 1
job_set.increment()
yield executor.submit(get_names, module, package)


Expand Down Expand Up @@ -269,7 +268,7 @@ def generate_cache(
self,
resources: List[Resource] = None,
underlined: bool = False,
task_handle=taskhandle.NullTaskHandle(),
task_handle: taskhandle.BaseTaskHandle = taskhandle.NullTaskHandle(),
):
"""Generate global name cache for project files.
Expand Down Expand Up @@ -299,7 +298,7 @@ def generate_cache(
def generate_modules_cache(
self,
modules: List[str] = None,
task_handle=taskhandle.NullTaskHandle(),
task_handle: taskhandle.BaseTaskHandle = taskhandle.NullTaskHandle(),
single_thread: bool = False,
underlined: bool = False,
):
Expand Down

0 comments on commit bad3bd2

Please sign in to comment.