Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/kili/client_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ def __init__(
api_endpoint: Optional[str] = None,
verify: Optional[Union[bool, str]] = None,
graphql_client_params: Optional[GraphQLClientParams] = None,
disable_tqdm: bool | None = None,
) -> None:
"""Initialize Kili client (domain mode).

Expand All @@ -73,6 +74,10 @@ def __init__(
man-in-the-middle (MitM) attacks. Setting verify to ``False``
may be useful during local development or testing.
graphql_client_params: Parameters to pass to the graphQL client.
disable_tqdm: Global setting to disable progress bars (tqdm) for all operations.
Can be overridden by individual function calls.
Default to `KILI_DISABLE_TQDM` environment variable.
If not passed, default to `disable_tqdm` in config file or False.

Returns:
Instance of the Kili client.
Expand All @@ -86,6 +91,11 @@ def __init__(
kili.assets # domain namespace (clean name)
kili.projects.list() # domain methods
```

Disable progress bars globally:
```python
kili = Kili(disable_tqdm=True)
```
"""
warnings.warn(
"Client domain api is still a work in progress. Method names and return type will evolve.",
Expand All @@ -97,6 +107,7 @@ def __init__(
verify,
GraphQLClientName.SDK_DOMAIN,
graphql_client_params,
disable_tqdm,
)

# Domain API Namespaces - Lazy loaded properties
Expand Down
99 changes: 67 additions & 32 deletions src/kili/domain_api/issues.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@
from kili.domain_api.namespace_utils import get_available_methods
from kili.presentation.client.helpers.common_validators import (
assert_all_arrays_have_same_size,
resolve_disable_tqdm,
)
from kili.use_cases.issue import IssueUseCases
from kili.use_cases.issue.types import IssueToCreateUseCaseInput
from kili.utils import tqdm


class IssueFilter(TypedDict, total=False):
Expand Down Expand Up @@ -367,6 +369,7 @@ def cancel(
*,
issue_id: Optional[str] = None,
issue_ids: Optional[List[str]] = None,
disable_tqdm: Optional[bool] = None,
) -> List[dict[str, Any]]:
"""Cancel issues by setting their status to CANCELLED.

Expand All @@ -377,6 +380,7 @@ def cancel(
Args:
issue_id: Issue ID to cancel.
issue_ids: List of issue IDs to cancel.
disable_tqdm: If `True`, the progress bar will be disabled.

Returns:
List of dictionaries with the results of the status updates.
Expand All @@ -399,21 +403,32 @@ def cancel(

assert issue_ids is not None, "issue_ids must be provided"

resolved_disable_tqdm = resolve_disable_tqdm(disable_tqdm, self._client.disable_tqdm)

issue_use_cases = IssueUseCases(self._gateway)
results = []

for issue_id_item in issue_ids:
try:
result = issue_use_cases.update_issue_status(
issue_id=IssueId(issue_id_item), status="CANCELLED"
)
results.append(
{"id": issue_id_item, "status": "CANCELLED", "success": True, **result}
)
except (ValueError, TypeError, RuntimeError) as e:
results.append(
{"id": issue_id_item, "status": "CANCELLED", "success": False, "error": str(e)}
)
with tqdm.tqdm(
total=len(issue_ids), disable=resolved_disable_tqdm, desc="Cancelling issues"
) as pbar:
for issue_id_item in issue_ids:
try:
result = issue_use_cases.update_issue_status(
issue_id=IssueId(issue_id_item), status="CANCELLED"
)
results.append(
{"id": issue_id_item, "status": "CANCELLED", "success": True, **result}
)
except (ValueError, TypeError, RuntimeError) as e:
results.append(
{
"id": issue_id_item,
"status": "CANCELLED",
"success": False,
"error": str(e),
}
)
pbar.update(1)

return results

Expand All @@ -431,6 +446,7 @@ def open(
*,
issue_id: Optional[str] = None,
issue_ids: Optional[List[str]] = None,
disable_tqdm: Optional[bool] = None,
) -> List[dict[str, Any]]:
"""Open issues by setting their status to OPEN.

Expand All @@ -441,6 +457,7 @@ def open(
Args:
issue_id: Issue ID to open.
issue_ids: List of issue IDs to open.
disable_tqdm: If `True`, the progress bar will be disabled.

Returns:
List of dictionaries with the results of the status updates.
Expand All @@ -463,19 +480,27 @@ def open(

assert issue_ids is not None, "issue_ids must be provided"

resolved_disable_tqdm = resolve_disable_tqdm(disable_tqdm, self._client.disable_tqdm)

issue_use_cases = IssueUseCases(self._gateway)
results = []

for issue_id_item in issue_ids:
try:
result = issue_use_cases.update_issue_status(
issue_id=IssueId(issue_id_item), status="OPEN"
)
results.append({"id": issue_id_item, "status": "OPEN", "success": True, **result})
except (ValueError, TypeError, RuntimeError) as e:
results.append(
{"id": issue_id_item, "status": "OPEN", "success": False, "error": str(e)}
)
with tqdm.tqdm(
total=len(issue_ids), disable=resolved_disable_tqdm, desc="Opening issues"
) as pbar:
for issue_id_item in issue_ids:
try:
result = issue_use_cases.update_issue_status(
issue_id=IssueId(issue_id_item), status="OPEN"
)
results.append(
{"id": issue_id_item, "status": "OPEN", "success": True, **result}
)
except (ValueError, TypeError, RuntimeError) as e:
results.append(
{"id": issue_id_item, "status": "OPEN", "success": False, "error": str(e)}
)
pbar.update(1)

return results

Expand All @@ -493,6 +518,7 @@ def solve(
*,
issue_id: Optional[str] = None,
issue_ids: Optional[List[str]] = None,
disable_tqdm: Optional[bool] = None,
) -> List[dict[str, Any]]:
"""Solve issues by setting their status to SOLVED.

Expand All @@ -503,6 +529,7 @@ def solve(
Args:
issue_id: Issue ID to solve.
issue_ids: List of issue IDs to solve.
disable_tqdm: If `True`, the progress bar will be disabled.

Returns:
List of dictionaries with the results of the status updates.
Expand All @@ -525,19 +552,27 @@ def solve(

assert issue_ids is not None, "issue_ids must be provided"

resolved_disable_tqdm = resolve_disable_tqdm(disable_tqdm, self._client.disable_tqdm)

issue_use_cases = IssueUseCases(self._gateway)
results = []

for issue_id_item in issue_ids:
try:
result = issue_use_cases.update_issue_status(
issue_id=IssueId(issue_id_item), status="SOLVED"
)
results.append({"id": issue_id_item, "status": "SOLVED", "success": True, **result})
except (ValueError, TypeError, RuntimeError) as e:
results.append(
{"id": issue_id_item, "status": "SOLVED", "success": False, "error": str(e)}
)
with tqdm.tqdm(
total=len(issue_ids), disable=resolved_disable_tqdm, desc="Solving issues"
) as pbar:
for issue_id_item in issue_ids:
try:
result = issue_use_cases.update_issue_status(
issue_id=IssueId(issue_id_item), status="SOLVED"
)
results.append(
{"id": issue_id_item, "status": "SOLVED", "success": True, **result}
)
except (ValueError, TypeError, RuntimeError) as e:
results.append(
{"id": issue_id_item, "status": "SOLVED", "success": False, "error": str(e)}
)
pbar.update(1)

return results

Expand Down
Loading