Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _resolve_path(self, root_path, path):
"""Check if a path is within a root path and resolve it."""
try:
root_path = Path(root_path).resolve()
return (root_path / path).resolve().relative_to(root_path)
except ValueError:
raise errors.ParameterError(
'File {} is not within path {}'.format(path, root_path)
)
def checkout(repo, ref):
try:
repo.git.checkout(ref)
except GitCommandError:
raise errors.ParameterError(
'Cannot find reference "{}" in Git repository: {}'.format(
ref, url
)
def from_string(cls, string):
"""Create an instance from a 'Name ' string."""
REGEX = r'([^<]*)<{0,1}([^@<>]+@[^@<>]+\.[^@<>]+)*>{0,1}'
name, email = re.search(REGEX, string).groups()
name = name.rstrip()
# Check the git configuration.
if not name: # pragma: no cover
raise errors.ParameterError(
'Name is not valid: Valid format is "Name "'
)
if not email: # pragma: no cover
raise errors.ParameterError(
'Email is not valid: Valid format is "Name "'
)
return cls(name=name, email=email)
def _add_from_local(self, dataset, path, link, destination):
"""Add a file or directory from local filesystem."""
src = Path(path).resolve()
if not src.exists():
raise errors.ParameterError(
'Cannot find file/directory: {}'.format(path)
)
if destination.exists() and destination.is_dir():
destination = destination / src.name
# if we have a directory, recurse
if src.is_dir():
if destination.exists() and not destination.is_dir():
raise errors.ParameterError('Cannot copy directory to a file')
if src.name == '.git':
# Cannot have a '.git' directory inside a Git repo
return []
files = []
def dataset_remove(
client,
names,
with_output=False,
datasetscontext=contextlib.nullcontext,
referencescontext=contextlib.nullcontext,
commit_message=None
):
"""Delete a dataset."""
datasets = {name: client.get_dataset_path(name) for name in names}
if not datasets:
raise ParameterError(
'use dataset name or identifier', param_hint='names'
)
unknown = [
name
for name, path in datasets.items() if not path or not path.exists()
]
if unknown:
raise ParameterError(
'unknown datasets ' + ', '.join(unknown), param_hint='names'
)
datasets = set(datasets.values())
references = list(LinkReference.iter_items(client, common_path='datasets'))
if not with_output:
def untrack_paths_from_storage(self, *paths):
"""Untrack paths from the external storage."""
try:
call(
self._CMD_STORAGE_UNTRACK + list(paths),
stdout=PIPE,
stderr=STDOUT,
cwd=str(self.path),
)
except (KeyboardInterrupt, OSError) as e:
raise errors.ParameterError(
'Couldn\'t run \'git lfs\':\n{0}'.format(e)
)
src = repo_path / path
source_name = Path(source).name
relative_path = Path(path).relative_to(source)
if not dst_root.exists():
if len(sources) == 1:
dst = dst_root / relative_path
else: # Treat destination as a directory
dst = dst_root / source_name / relative_path
elif dst_root.is_dir():
dst = dst_root / source_name / relative_path
else: # Destination is an existing file
if len(sources) == 1 and not src.is_dir():
dst = dst_root
elif not sources:
raise errors.ParameterError('Cannot copy repo to file')
else:
raise errors.ParameterError(
'Cannot copy multiple files or directories to a file'
)
return (path, src, dst, source)