Export data from Vault to a file in an assortment of formats.
(params, file_format, filename, **kwargs)
| 244 | |
| 245 | |
| 246 | def export(params, file_format, filename, **kwargs): |
| 247 | # type: (KeeperParams, str, str, ...) -> None |
| 248 | """Export data from Vault to a file in an assortment of formats.""" |
| 249 | sync_down.sync_down(params) |
| 250 | |
| 251 | exporter = exporter_for_format(file_format)() # type: BaseExporter |
| 252 | if 'max_size' in kwargs: |
| 253 | exporter.max_size = int(kwargs['max_size']) |
| 254 | |
| 255 | save_in_vault = kwargs.get('save_in_vault') is True |
| 256 | if save_in_vault and file_format != 'keepass': |
| 257 | save_in_vault = False |
| 258 | |
| 259 | if not save_in_vault: |
| 260 | if not filename and not exporter.supports_stdout(): |
| 261 | raise CommandError('export', 'File name parameter is required.') |
| 262 | |
| 263 | folder_filter = None # type: Optional[Set[str]] |
| 264 | record_filter = None # type: Optional[Set[str]] |
| 265 | folder_path = kwargs.get('folder') |
| 266 | if folder_path: |
| 267 | folder = None # type: Optional[BaseFolderNode] |
| 268 | rs = try_resolve_path(params, folder_path) |
| 269 | if rs: |
| 270 | f, rest = rs |
| 271 | if not rest: |
| 272 | folder = f |
| 273 | if not folder: |
| 274 | logging.warning('Folder \"%s\" not found', folder_path) |
| 275 | return |
| 276 | folder_filter = set() |
| 277 | record_filter = set() |
| 278 | |
| 279 | def on_folder(base_folder): # type: (BaseFolderNode) -> None |
| 280 | folder_filter.add(base_folder.uid) |
| 281 | if base_folder.uid in params.subfolder_record_cache: |
| 282 | record_filter.update(params.subfolder_record_cache[base_folder.uid]) |
| 283 | base.FolderMixin.traverse_folder_tree(params, folder.uid, on_folder) |
| 284 | |
| 285 | to_export = [] |
| 286 | if exporter.has_shared_folders(): |
| 287 | shfolders = [api.get_shared_folder(params, sf_uid) for sf_uid in params.shared_folder_cache] |
| 288 | shfolders.sort(key=lambda x: x.name.lower(), reverse=False) |
| 289 | for f in shfolders: |
| 290 | if folder_filter: |
| 291 | if f.shared_folder_uid not in folder_filter: |
| 292 | continue |
| 293 | |
| 294 | fol = ImportSharedFolder() |
| 295 | fol.uid = f.shared_folder_uid |
| 296 | fol.path = get_folder_path(params, f.shared_folder_uid) |
| 297 | fol.manage_users = f.default_manage_users |
| 298 | fol.manage_records = f.default_manage_records |
| 299 | fol.can_edit = f.default_can_edit |
| 300 | fol.can_share = f.default_can_share |
| 301 | fol.permissions = [] |
| 302 | if f.teams: |
| 303 | for team in f.teams: |
nothing calls this directly
no test coverage detected