diff --git a/dvc/command/data_sync.py b/dvc/command/data_sync.py index 7923747a9..612cbd7eb 100644 --- a/dvc/command/data_sync.py +++ b/dvc/command/data_sync.py @@ -58,6 +58,14 @@ class CmdDataSync(CmdBase): Logger.info('Cannot perform the cmd since DVC is busy and locked. Please retry the cmd later.') return 1 + good = self.config.sanity_check() + + if not good[0]: + Logger.error('config \'%s\' is not correctly setup. Please fix:' % Runtime.CONFIG) + for e in good[1]: + Logger.error(' ' + e) + return 1 + try: for target in self.parsed_args.targets: data_item = self.settings.path_factory.data_item(target) diff --git a/dvc/command/remove.py b/dvc/command/remove.py index 3cf8985ff..a9b9b4ec9 100644 --- a/dvc/command/remove.py +++ b/dvc/command/remove.py @@ -93,7 +93,7 @@ class CmdDataRemove(CmdBase): # it raises exception if not a symlink is provided Logger.debug(u'[Cmd-Remove] Remove file {}.'.format(target)) - data_item = self.settings.path_factory.data_item(target) + data_item = self.settings.path_factory.existing_data_item(target) self._remove_cache_file(data_item) self._remove_state_file(data_item) @@ -120,7 +120,8 @@ class CmdDataRemove(CmdBase): self._remove_dvc_path(data_item.cache, 'cache') else: if not self.parsed_args.keep_in_cache: - Logger.warn(u'[Cmd-Remove] Unable to find cache file for data item %s' % data_item.data.relative) + msg = u'[Cmd-Remove] Unable to find cache file {} for data item {}' + Logger.warn(msg.format(data_item.cache.relative, data_item.data.relative)) pass def _remove_dvc_path(self, dvc_path, name): @@ -132,6 +133,9 @@ class CmdDataRemove(CmdBase): def remove_from_cloud(self, aws_file_name): Logger.debug(u'[Cmd-Remove] Remove from cloud {}.'.format(aws_file_name)) + if not self.config.aws_access_key_id or not self.config.aws_secret_access_key: + Logger.debug('[Cmd-Remove] Unable to check cache file in the cloud') + return conn = S3Connection(self.config.aws_access_key_id, self.config.aws_secret_access_key) bucket_name = self.config.storage_bucket bucket = conn.lookup(bucket_name) diff --git a/dvc/config.py b/dvc/config.py index c2b1611d6..663f1f575 100644 --- a/dvc/config.py +++ b/dvc/config.py @@ -35,6 +35,16 @@ class ConfigI(object): def storage_prefix(self): return '' + def sanity_check(self): + pass + + def aws_access_key_id(self): + return None + + @property + def aws_secret_access_key(self): + return None + class Config(ConfigI): CONFIG = 'dvc.conf' @@ -72,12 +82,16 @@ class Config(ConfigI): def aws_access_key_id(self): if not self._aws_creds: self._aws_creds = self.get_aws_credentials() + if not self._aws_creds: + return None return self._aws_creds[0] @property def aws_secret_access_key(self): if not self._aws_creds: - self._aws_creds = get_aws_credentials() + self._aws_creds = self.get_aws_credentials() + if not self._aws_creds: + return None return self._aws_creds[1] @property @@ -191,7 +205,6 @@ class Config(ConfigI): return None - def sanity_check(self): """ sanity check a config @@ -221,12 +234,12 @@ class Config(ConfigI): elif cloud == 'amazon': creds = self.get_aws_credentials() if creds is None: - errors.append('can\'t find aws credentials. TODO') + errors.append('can\'t find aws credentials.') self._aws_creds = creds elif cloud == 'google': project = self._config['GC'].get('ProjectName', None) if project is None or len(project) < 1: - errors.append('can\'t read google cloud project name. Please set ProjectName in section GC. TODO HOW FIND') + errors.append('can\'t read google cloud project name. Please set ProjectName in section GC.') else: errors.append('unknown Cloud %s' % cloud) diff --git a/dvc/runtime.py b/dvc/runtime.py index 47ea3d010..92e9648dd 100644 --- a/dvc/runtime.py +++ b/dvc/runtime.py @@ -29,13 +29,6 @@ class Runtime(object): if parse_config: runtime_config = Config(Runtime.conf_file_path(runtime_git.git_dir)) - - good = runtime_config.sanity_check() - if good[0] == False: - Logger.error('config \'%s\' is not correctly setup. Please fix:' % Runtime.CONFIG) - for e in good[1]: - Logger.error(' ' + e) - sys.exit(-1) else: runtime_config = ConfigI()