def create_dataset( client, name, short_name=None, description=None, creators=None, commit_message=None, ): """Create an empty dataset in the current repo. :raises: ``renku.core.errors.ParameterError`` """ if not creators: creators = [Person.from_git(client.repo)] elif hasattr(creators, '__iter__') and isinstance(creators[0], str): creators = [Person.from_string(c) for c in creators] elif hasattr(creators, '__iter__') and isinstance(creators[0], dict): creators = [Person.from_dict(creator) for creator in creators] dataset, _, __ = client.create_dataset(name=name, short_name=short_name, description=description, creators=creators) return dataset
def create_dataset( client, short_name, title=None, description='', creators=None, keywords=None, commit_message=None ): """Create an empty dataset in the current repo. :raises: ``renku.core.errors.ParameterError`` """ if not creators: creators = [Person.from_git(client.repo)] else: creators, _ = _construct_creators(creators) dataset, _, __ = client.create_dataset( short_name=short_name, title=title, description=description, creators=creators, keywords=keywords ) return dataset
def init_repository(self, force=False): """Initialize an empty Renku repository.""" from git import Repo from renku.core.models.provenance.agents import Person # verify if folder is empty if self.repo is not None and not force: raise errors.InvalidFileOperation( 'Folder {0} already contains file. Use --force to overwrite'. format(self.repo.git_dir)) # initialize repo path = self.path.absolute() self.repo = Repo.init(str(path)) # verify if author information is available Person.from_git(self.repo)
def create_dataset( self, short_name=None, title=None, description=None, creators=None, keywords=None, ): """Create a dataset.""" if not short_name: raise errors.ParameterError('Dataset short_name must be provided.') if not is_dataset_short_name_valid(short_name): raise errors.ParameterError( 'Dataset short_name "{}" is not valid.'.format(short_name)) if self.load_dataset(short_name=short_name): raise errors.DatasetExistsError( 'Dataset exists: "{}".'.format(short_name)) if not title: title = short_name identifier = str(uuid.uuid4()) path = self.renku_datasets_path / identifier / self.METADATA if path.exists(): raise errors.DatasetExistsError( 'Dataset with reference {} exists'.format(path)) path.parent.mkdir(parents=True, exist_ok=True) if creators is None: creators = [Person.from_git(self.repo)] keywords = keywords or () with with_reference(path): dataset = Dataset( client=self, identifier=identifier, short_name=short_name, name=title, description=description, creator=creators, keywords=keywords, ) dataset_ref = LinkReference.create(client=self, name='datasets/' + short_name) dataset_ref.set_reference(path) dataset.path = Path(dataset.path).relative_to(self.path) dataset.to_yaml() return dataset, path, dataset_ref
def __attrs_post_init__(self): """Initialize computed attributes.""" if not self.creator and self.client: if self.client.renku_metadata_path.exists(): self.creator = Person.from_commit( self.client.find_previous_commit( self.client.renku_metadata_path, return_first=True), ) else: # this assumes the project is being newly created self.creator = Person.from_git(self.client.repo) self._id = self.project_id
def init_repository(self, force=False, user=None): """Initialize an empty Renku repository.""" from git import Repo from renku.core.models.provenance.agents import Person # verify if folder is empty if self.repo is not None and not force: raise errors.InvalidFileOperation( "Folder {0} already contains file. Use --force to overwrite". format(self.repo.git_dir)) # initialize repo and set user data path = self.path.absolute() self.repo = Repo.init(str(path)) if user: config_writer = self.repo.config_writer() for key, value in user.items(): config_writer.set_value("user", key, value) config_writer.release() # verify if author information is available Person.from_git(self.repo)
def create_dataset(self, name, short_name=None, description='', creators=None): """Create a dataset.""" if not name: raise errors.ParameterError('Dataset name must be provided.') if not short_name: short_name = generate_default_short_name(name, None) if not is_dataset_name_valid(short_name): raise errors.ParameterError( 'Dataset name "{}" is not valid.'.format(short_name)) if self.load_dataset(name=short_name): raise errors.DatasetExistsError( 'Dataset exists: "{}".'.format(short_name)) identifier = str(uuid.uuid4()) path = self.renku_datasets_path / identifier / self.METADATA if path.exists(): raise errors.DatasetExistsError( 'Dataset with reference {} exists'.format(path)) path.parent.mkdir(parents=True, exist_ok=True) if creators is None: creators = [Person.from_git(self.repo)] with with_reference(path): dataset = Dataset(client=self, identifier=identifier, name=name, short_name=short_name, description=description, creator=creators) dataset_ref = LinkReference.create(client=self, name='datasets/' + short_name) dataset_ref.set_reference(path) dataset.to_yaml() return dataset, path, dataset_ref
def __attrs_post_init__(self): """Initialize computed attributes.""" if not self.creator and self.client: if self.client.renku_metadata_path.exists(): self.creator = Person.from_commit( self.client.find_previous_commit(self.client.renku_metadata_path, return_first=True), ) else: # this assumes the project is being newly created self.creator = Person.from_git(self.client.repo) try: self._id = self.project_id except ValueError: """Fallback to old behaviour.""" if self._id: pass elif self.client and self.client.is_project_set(): self._id = self.client.project._id else: raise
def _handle_sentry(self): """Handle exceptions using Sentry.""" from sentry_sdk import capture_exception, configure_scope from sentry_sdk.utils import capture_internal_exceptions with configure_scope() as scope: with capture_internal_exceptions(): from git import Repo from renku.core.commands import get_git_home from renku.core.models.provenance.agents import Person repo = Repo(get_git_home()) user = Person.from_git(repo) scope.user = {'name': user.name, 'email': user.email} event_id = capture_exception() click.echo( _BUG + 'Recorded in Sentry with ID: {0}\n'.format(event_id), err=True, ) raise