Skip to content

Commit

Permalink
fix(core): optimize imports
Browse files Browse the repository at this point in the history
  • Loading branch information
m-alisafaee committed Mar 31, 2022
1 parent 330a3b8 commit ecb8631
Show file tree
Hide file tree
Showing 11 changed files with 148 additions and 100 deletions.
4 changes: 2 additions & 2 deletions renku/core/commands/format/dataset_files.py
Expand Up @@ -21,8 +21,6 @@
from subprocess import PIPE, SubprocessError, run
from typing import Callable, Dict

from renku.core.commands.format.tabulate import tabulate
from renku.core.commands.schema.dataset import DatasetFileSchema
from renku.core.management.command_builder import inject
from renku.core.management.interface.client_dispatcher import IClientDispatcher

Expand All @@ -37,6 +35,7 @@ def tabular(records, *, columns=None):
Returns:
String of records in tabular representation.
"""
from renku.core.commands.format.tabulate import tabulate

if not columns:
columns = "added,creators,dataset,full_path"
Expand Down Expand Up @@ -123,6 +122,7 @@ def jsonld(records, **kwargs):
Args:
records: Filtered collection.
"""
from renku.core.commands.schema.dataset import DatasetFileSchema
from renku.core.models.json import dumps

data = [DatasetFileSchema(flattened=True).dump(record) for record in records]
Expand Down
6 changes: 3 additions & 3 deletions renku/core/commands/format/dataset_tags.py
Expand Up @@ -20,9 +20,6 @@
from collections import OrderedDict
from typing import Callable, Dict

from renku.core.commands.schema.dataset import DatasetTagSchema
from renku.core.models.tabulate import tabulate


def tabular(tags):
"""Format dataset tags with a tabular output.
Expand All @@ -33,6 +30,8 @@ def tabular(tags):
Returns:
String of tags in tabular representation.
"""
from renku.core.models.tabulate import tabulate

return tabulate(
tags,
headers=OrderedDict(
Expand All @@ -59,6 +58,7 @@ def jsonld(tags):
Returns:
String of tags in JSON-LD representation.
"""
from renku.core.commands.schema.dataset import DatasetTagSchema
from renku.core.models.json import dumps

data = [DatasetTagSchema().dump(tag) for tag in tags]
Expand Down
9 changes: 6 additions & 3 deletions renku/core/commands/format/datasets.py
Expand Up @@ -19,10 +19,7 @@
import textwrap
from typing import Callable, Dict

from renku.core.commands.format.tabulate import tabulate
from renku.core.commands.schema.dataset import dump_dataset_as_jsonld
from renku.core.metadata.immutable import DynamicProxy
from renku.core.models.json import dumps


def tabular(datasets, *, columns=None):
Expand All @@ -35,6 +32,8 @@ def tabular(datasets, *, columns=None):
Returns:
String representation of datasets in tabular form.
"""
from renku.core.commands.format.tabulate import tabulate

if not columns:
columns = "id,date_created,name,creators,tags,version"

Expand All @@ -59,6 +58,9 @@ def jsonld(datasets, **kwargs):
Returns:
String of datasets in JSON-LD format.
"""
from renku.core.commands.schema.dataset import dump_dataset_as_jsonld
from renku.core.models.json import dumps

data = [dump_dataset_as_jsonld(dataset) for dataset in datasets]
return dumps(data, indent=2)

Expand All @@ -73,6 +75,7 @@ def json(datasets, **kwargs):
String of datasets as JSON data.
"""
from renku.core.models.dataset import DatasetDetailsJson
from renku.core.models.json import dumps

data = [DatasetDetailsJson().dump(dataset) for dataset in datasets]
return dumps(data, indent=2)
Expand Down
9 changes: 5 additions & 4 deletions renku/core/commands/view_model/log.py
Expand Up @@ -24,10 +24,8 @@

import inject

from renku.core.commands.format.tabulate import tabulate
from renku.core.commands.view_model.plan import PlanViewModel

if TYPE_CHECKING:
from renku.core.commands.view_model.plan import PlanViewModel
from renku.core.models.dataset import Dataset
from renku.core.models.provenance.activity import Activity

Expand All @@ -42,6 +40,8 @@ def tabular(data, columns) -> str:
Returns:
str: data in tabular form.
"""
from renku.core.commands.format.tabulate import tabulate

return tabulate(data, columns, columns_mapping=LOG_COLUMNS, reverse=True)


Expand Down Expand Up @@ -131,6 +131,7 @@ def from_activity(cls, activity: "Activity") -> "ActivityLogViewModel":
Returns:
Log entry for activity.
"""
from renku.core.commands.view_model.plan import PlanViewModel
from renku.core.models.provenance.agent import Person, SoftwareAgent

plan = activity.plan_with_values
Expand Down Expand Up @@ -337,7 +338,7 @@ def __init__(
description: str,
details: ActivityDetailsViewModel,
agents: List[str],
plan: PlanViewModel,
plan: "PlanViewModel",
):
super().__init__(id, date, description, agents)
self.details = details
Expand Down
44 changes: 28 additions & 16 deletions renku/core/management/dataset/datasets_provenance.py
Expand Up @@ -18,29 +18,33 @@
"""Datasets Provenance."""

from datetime import datetime
from typing import List, Optional
from typing import TYPE_CHECKING, List, Optional
from uuid import UUID

from renku.core import errors
from renku.core.management.command_builder.command import inject
from renku.core.management.interface.dataset_gateway import IDatasetGateway
from renku.core.models.dataset import Dataset, DatasetTag, Url
from renku.core.models.provenance.agent import Person
from renku.core.utils import communication

if TYPE_CHECKING:
from renku.core.models.dataset import Dataset, DatasetTag
from renku.core.models.provenance.agent import Person


class DatasetsProvenance:
"""A set of datasets."""

dataset_gateway = inject.attr(IDatasetGateway)

@property
def datasets(self) -> List[Dataset]:
def datasets(self) -> List["Dataset"]:
"""Return an iterator of datasets."""
return self.dataset_gateway.get_all_active_datasets()

def get_by_id(self, id: str, immutable: bool = False) -> Optional[Dataset]:
def get_by_id(self, id: str, immutable: bool = False) -> Optional["Dataset"]:
"""Return a dataset by its id."""
from renku.core.models.dataset import Dataset

try:
dataset = self.dataset_gateway.get_by_id(id)
except errors.ObjectNotFoundError:
Expand All @@ -53,7 +57,7 @@ def get_by_id(self, id: str, immutable: bool = False) -> Optional[Dataset]:
return dataset.copy()
return None

def get_by_name(self, name: str, immutable: bool = False, strict: bool = False) -> Optional[Dataset]:
def get_by_name(self, name: str, immutable: bool = False, strict: bool = False) -> Optional["Dataset"]:
"""Return a dataset by its name."""
dataset = self.dataset_gateway.get_by_name(name)
if not dataset:
Expand All @@ -70,18 +74,20 @@ def get_provenance_tails(self):
"""Return the provenance for all datasets."""
return self.dataset_gateway.get_provenance_tails()

def get_previous_version(self, dataset: Dataset) -> Optional[Dataset]:
def get_previous_version(self, dataset: "Dataset") -> Optional["Dataset"]:
"""Return the previous version of a dataset if any."""
if dataset.is_derivation():
return self.get_by_id(dataset.derived_from.url_id) # type: ignore

return None

def add_or_update(self, dataset: Dataset, date: Optional[datetime] = None, creator: Optional[Person] = None):
def add_or_update(self, dataset: "Dataset", date: Optional[datetime] = None, creator: Optional["Person"] = None):
"""Add/update a dataset according to its new content.
NOTE: This functions always mutates the dataset.
"""
from renku.core.models.dataset import Dataset

assert isinstance(dataset, Dataset)

# NOTE: Dataset's name never changes, so, we use it to detect if a dataset should be mutated.
Expand All @@ -103,8 +109,10 @@ def add_or_update(self, dataset: Dataset, date: Optional[datetime] = None, creat

self.dataset_gateway.add_or_remove(dataset)

def remove(self, dataset, date: datetime = None, creator: Person = None):
def remove(self, dataset, date: datetime = None, creator: "Person" = None):
"""Remove a dataset."""
from renku.core.models.dataset import Dataset

assert isinstance(dataset, Dataset)

# NOTE: Dataset's name never changes, so, we use it to detect if a dataset should be mutated.
Expand All @@ -125,19 +133,21 @@ def remove(self, dataset, date: datetime = None, creator: Person = None):

def update_during_migration(
self,
dataset: Dataset,
dataset: "Dataset",
commit_sha: str,
date: Optional[datetime] = None,
tags: Optional[List[DatasetTag]] = None,
tags: Optional[List["DatasetTag"]] = None,
remove=False,
replace=False,
preserve_identifiers: bool = False,
):
"""Add, update, remove, or replace a dataset in migration."""
from renku.core.models.dataset import Dataset

assert isinstance(dataset, Dataset)
assert not (remove and replace), "Cannot remove and replace"

def update_dataset(existing, new) -> Dataset:
def update_dataset(existing, new) -> "Dataset":
"""Update existing dataset with the new dataset metadata."""
existing.update_metadata_from(new, exclude=["date_created", "derived_from", "same_as"])
existing.dataset_files = new.dataset_files
Expand Down Expand Up @@ -189,19 +199,21 @@ def _create_dataset_identifier(commit_sha: str, identifier: str) -> str:
uuid = f"{commit_sha[:20]}{identifier[-12:]}"
return UUID(uuid).hex

def get_all_tags(self, dataset: Dataset) -> List[DatasetTag]:
def get_all_tags(self, dataset: "Dataset") -> List["DatasetTag"]:
"""Return the list of all tags for a dataset."""
return self.dataset_gateway.get_all_tags(dataset)

def add_tag(self, dataset: Dataset, tag: DatasetTag):
def add_tag(self, dataset: "Dataset", tag: "DatasetTag"):
"""Add a tag from a dataset."""
self.dataset_gateway.add_tag(dataset, tag)

def remove_tag(self, dataset: Dataset, tag: DatasetTag):
def remove_tag(self, dataset: "Dataset", tag: "DatasetTag"):
"""Remove a tag from a dataset."""
self.dataset_gateway.remove_tag(dataset, tag)

def _process_dataset_tags(self, dataset: Dataset, tags: Optional[List[DatasetTag]]):
def _process_dataset_tags(self, dataset: "Dataset", tags: Optional[List["DatasetTag"]]):
from renku.core.models.dataset import DatasetTag, Url

if not tags:
return

Expand Down
6 changes: 4 additions & 2 deletions renku/core/management/dataset/providers/zenodo.py
Expand Up @@ -28,9 +28,7 @@
import attr
from tqdm import tqdm

from renku.core.commands.schema.dataset import dump_dataset_as_jsonld
from renku.core.management.dataset.providers.api import ExporterApi, ProviderApi
from renku.core.management.dataset.providers.doi import DOIProvider
from renku.core.metadata.immutable import DynamicProxy
from renku.core.utils.file_size import bytes_to_unit

Expand Down Expand Up @@ -461,6 +459,8 @@ def default_params(self):

def dataset_to_request(self):
"""Prepare dataset metadata for request."""
from renku.core.commands.schema.dataset import dump_dataset_as_jsonld

jsonld = dump_dataset_as_jsonld(self.dataset)
jsonld["upload_type"] = "dataset"
return jsonld
Expand Down Expand Up @@ -557,6 +557,8 @@ def find_record(self, uri, client=None, **kwargs):

def find_record_by_doi(self, doi):
"""Resolve the DOI and make a record for the retrieved record id."""
from renku.core.management.dataset.providers.doi import DOIProvider

doi = DOIProvider().find_record(doi)
return self.get_record(ZenodoProvider.record_id(doi.url))

Expand Down
21 changes: 11 additions & 10 deletions renku/core/management/interface/dataset_gateway.py
Expand Up @@ -18,42 +18,43 @@
"""Renku dataset gateway interface."""

from abc import ABC
from typing import List, Optional
from typing import TYPE_CHECKING, List, Optional

from renku.core.models.dataset import Dataset, DatasetTag
if TYPE_CHECKING:
from renku.core.models.dataset import Dataset, DatasetTag


class IDatasetGateway(ABC):
"""Interface for the DatasetGateway."""

def get_by_id(self, id: str) -> Dataset:
def get_by_id(self, id: str) -> "Dataset":
"""Get a dataset by id."""
raise NotImplementedError

def get_by_name(self, name: str) -> Optional[Dataset]:
def get_by_name(self, name: str) -> Optional["Dataset"]:
"""Get a dataset by id."""
raise NotImplementedError

def get_all_active_datasets(self) -> List[Dataset]:
def get_all_active_datasets(self) -> List["Dataset"]:
"""Get all datasets."""
raise NotImplementedError

def get_provenance_tails(self) -> List[Dataset]:
def get_provenance_tails(self) -> List["Dataset"]:
"""Return the provenance for all datasets."""
raise NotImplementedError

def get_all_tags(self, dataset: Dataset) -> List[DatasetTag]:
def get_all_tags(self, dataset: "Dataset") -> List["DatasetTag"]:
"""Return the list of all tags for a dataset."""
raise NotImplementedError

def add_tag(self, dataset: Dataset, tag: DatasetTag):
def add_tag(self, dataset: "Dataset", tag: "DatasetTag"):
"""Add a tag from a dataset."""
raise NotImplementedError

def remove_tag(self, dataset: Dataset, tag: DatasetTag):
def remove_tag(self, dataset: "Dataset", tag: "DatasetTag"):
"""Remove a tag from a dataset."""
raise NotImplementedError

def add_or_remove(self, dataset: Dataset) -> None:
def add_or_remove(self, dataset: "Dataset") -> None:
"""Add or remove a dataset."""
raise NotImplementedError

0 comments on commit ecb8631

Please sign in to comment.