cape.manage: Manage CFD case folders¶
This module provides methods to manage and archive files for run folders. It provides extensive tools for archiving results to other locations either as a tar ball, tar bomb, or zip archive of the entire folder or a folder of several smaller zip files.
It also provides tools for deleting files either before or after
creating the archive. In addition, there is an easy interface for
keeping only the most recent n files of a certain glob. For example,
if there are solution files flow.01, flow.02, flow.03, and
flow.04, setting the PostUpdateFiles parameter to
{"flow.??": 2}
will delete only flow.01 and flow.02.
The module provides methods to perform deletions, conditional deletions,
and grouping files into tar or zip archives at multiple stages. For
example, PreDeleteFiles() deletes files after a case has been
completed and before generating the archive of the case. On the other
hand, PostDeleteFiles() deletes files after creating the archive;
the difference is whether or not the file in question is included in the
archive before it is deleted.
A case cannot be archived until it has been granted the status of
PASS, by meeting the requested number of iterations and phases and
by getting marked with a p in the run matrix file. However, less
aggressive pruning via the --clean command can always be performed,
even if the case is currently running.
The archiving process can be “reversed” (although this does not delete
the archived copy) using UnarchiveFolder(), which copies files
from the archive to the working folder. This can be useful if you
determine that a necessary file for post-processing was cleaned out or
if the case needs to be extended (run for more iterations).
Functions such as ProgressDeleteFiles() deletes files between
phases, and as such it is much more dangerous. Other methods will only
delete or archive once the case has been marked as PASS by the user.
An even more aggressive action can be taken using the --skeleton
command-line option. After creating or updating the archive, this
deletes even more files from the working copy than --archive using
the SkeletonFolder() function. A common use of this dichotomy is
to set up --archive so that all post-processing can still be done,
and once the post-processing --skeleton deletes everything but a
minimal set of information about the case. The --skeleton also has
an extra capability to replace the working copy with the last few lines
of that file, which might contain information on the most recent
iteration run, for example. In order to avoid catastrophe, the
--skeleton command effectively calls --archive as part of its
normal procedure.
This module contains many supporting methods to perform specific actions such as comparing modification dates on the working and archived copies. The main functions that are called from the command line are:
ManageFilesProgress(): delete files progressively, even if the case is still running (can be used for example to keep only the two most recent check point files); does not archive
ManageFilesPre(): delete or tar files/folders immediately prior to creating archive; reduces size or archive but not performed until case hasPASSstatus
ManageFilesPost(): deletes or tar files/folders after creating archive
Each of the four phases also has several contributing functions that perform a specific task at a specific phase, which are outlined below.
"Progress": delete files safely at any time
"Pre": delete files from complete case before archiving
"Post": delete files after creating/updating archive
"Skeleton": delete files after post-processing
The difference between DeleteFiles and UpdateFiles is merely on
what action is taken by default. The user can manually specify how many
most recent files matching a certain glob to keep using a dict
such as
{"flow[0-9][0-9]": 2}
but if a glob is given without a
dict, such as simply
"flow[0-9][0-9]"
by default DeleteFiles() will delete all of them while
UpdateFiles() will keep the most recent.
Finally, the main command-line folder management calls each interface directly with one function from this module.
--clean:CleanFolder()
--archive:ArchiveFolder()
--skeleton:SkeletonFolder()
--unarchive:UnarchiveFolder()
- cape.manage.ArchiveCaseWhole(opts)¶
Archive an entire run folder
This function must be run from the case folder to be archived
- Call:
>>> ArchiveCaseWhole(opts)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.ArchiveFiles(opts, fsub=None, phantom=False)¶
Delete files that match a list of glob
The function also searches in any folder matching the directory glob or list of directory globs fsub.
- Call:
>>> manage.ArchiveFiles(opts, fsub=None, phantom=False)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface
- fsub:
str|list[str] Folder, list of folders, or glob of folders to also search
- phantom:
True| {False} Only copy files if
True
- opts:
- Versions:
2016-03-01
@ddalle: Version 1.02016-12-09
@ddalle: Version 1.1, use ArchiveFiles option2017-03-06
@ddalle: Version 1.2, add phantom option
- cape.manage.ArchiveFolder(opts, fsub=[], phantom=False)¶
Archive a folder and clean up nonessential files
- Call:
>>> cape.manage.ArchiveFolder(opts, fsub=[], phantom=False)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface including management/archive interface
- fsub:
list[str] Globs of subdirectories that are adaptive run folders
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-12-09
@ddalle: Version 1.02017-12-15
@ddalle: Version 1.1, add phantom option
- cape.manage.CleanFolder(opts, fsub=[], phantom=False)¶
Delete files before archiving and regardless of status
- Call:
>>> cape.manage.CleanFolder(opts, fsub=[], phantom=False)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface including management/archive interface
- fsub:
list[str] Globs of subdirectories that are adaptive run folders
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2017-03-10
@ddalle: Version 1.02017-12-15
@ddalle: Added phantom option
- cape.manage.CreateArchiveCaseFolder(opts)¶
Create the group and run folders in the archive, as appropriate
This function must be run within the folder that is to be archived.
- Call:
>>> CreateArchiveCaseFolder(opts)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.CreateArchiveFolder(opts)¶
Create the folder that will contain the archive, if necessary
- Call:
>>> CreateArchiveFolder(opts)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.CreateArchiveGroupFolder(opts)¶
Create the group folder in the archive, as appropriate
This function must be run from within the folder getting archived.
- Call:
>>> CreateArchiveGroupFolder(opts)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.DeleteDirs(fdel, fsub=None, n=1, phantom=False)¶
Delete folders that match a glob
The function also searches in any folder matching the directory glob or list of directory globs fsub.
- Call:
>>> DeleteDirs_SubDir(fdel, n=1, fsub=None, phantom=False)
- Inputs:
- fdel:
str File name or glob of files to delete
- fsub:
str|list[str] Folder, list of folders, or glob of folders to also search
- n:
int Number of folders to keep at end of glob
- phantom:
True| {False} Only delete files if
False
- fdel:
- Versions:
2016-03-01
@ddalle: Version 1.0
- cape.manage.DeleteFiles(fdel, fsub=None, n=1, phantom=False)¶
Delete files that match a list of globs
The function also searches in any folder matching the directory glob or list of directory globs fsub.
- Call:
>>> cape.manage.DeleteFiles(fdel, fsub=None, n=1, phantom=False)
- Inputs:
- fdel:
str File name or glob of files to delete
- fsub:
str|list[str] Folder, list of folders, or glob of folders to also search
- n:
int Number of files to keep
- phantom:
True| {False} Only delete files if
False
- fdel:
- Versions:
2016-03-01
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add phantom option
- cape.manage.DeleteFilesExcept(fskel, dskel=[], fsub=None, n=0, phantom=False)¶
Delete all files except those that match a list of globs
- Call:
>>> cape.manage.DeleteFilesExcept(fskel, **kw)
- Inputs:
- fskel:
list[str|dict] List of file names or globs of files to delete
- dskel: {
[]} |list List of folder names of globs of folder names to delete
- fsub:
str|list[str] Folder, list of folders, or glob of folders to also search
- n: {
0} |int Number of files to keep if not set by dictionary options for each file; if
0, keep all by default- phantom:
True| {False} Only delete files if
False
- fskel:
- Versions:
2017-12-13
@ddalle: Version 1.0, forkDeleteFiles()
- cape.manage.ExpandLinks(fglob)¶
Expand any links in a full glob if linked to relative file
If the link points to an absolute path, the entry is not replaced with the target of the link.
- Call:
>>> flst = ExpandLinks(fglob)
- Inputs:
- fglob:
list[str] List of file names, possibly including links
- fglob:
- Outputs:
- flst:
list[str] List of file names plus expanded versions of any links
- flst:
- Versions:
2017-12-13
@ddalle: Version 1.0
- cape.manage.GetDirMatches(fname, fsub=None, n=0, qdel=False)¶
Get list of all folders matching a list of patterns
- Call:
>>> fglob = GetDirMatches(fname, fsub=None, n=0, qdel=False) >>> fglob = GetDirMatches(fname, fsubs)
- Inputs:
- fname:
list[dict|str] List of file name patterns
- fsub:
str|list[str] Folder name of folder name pattern
- n:
int Default number of files to ignore at end of glob
- qdel:
True| {False} Interpret n as how many files to keep if
True; as how many files to copy ifFalse
- fname:
- Outputs:
- fglob:
list[str] List of files matching input pattern
- fglob:
- See also:
- Versions:
2016-03-01
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add qdel kwarg
- cape.manage.GetFileMatches(fname, fsub=None, n=0, qdel=False)¶
Get list of all files or links matching a list of patterns
- Call:
>>> fglob = GetFileMatches(fname, fsub=None, n=0, qdel=False) >>> fglob = GetFileMatches(fname, fsubs)
- Inputs:
- fname:
list[dict|str] List of file name patterns
- fsub:
str|list[str] Folder name of folder name pattern
- n:
int Default number of files to ignore at end of glob
- qdel:
True| {False} Interpret n as how many files to keep if
True; as how many files to copy ifFalse
- fname:
- Outputs:
- fglob:
list[str] List of files matching input pattern
- fglob:
- See also:
- Versions:
2016-03-01
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add qdel kwarg
- cape.manage.GetImpliedFolders(fglob, fdirs=[])¶
Check a list of files to get implicit matching folders
For example,
["case.json", "adapt00/input.nml"]implies the folderadapt00/- Call:
>>> fsubs = GetImpliedFolders(fglob, fdirs=[])
- Inputs:
- fglob:
list[str] List of file names including any folder names
- fdirs: {
[]} |list[str] List of folders to append to
- fglob:
- Outputs:
- fsubs:
list[str] Unique list of folders including entries from fdirs
- fsubs:
- Versions:
2017-12-13
@ddalle: Version 1.0
- cape.manage.GetLinkMatches(fname, fsub=None, n=0, qdel=False)¶
Get list of all links matching a list of patterns
- Call:
>>> fglob = GetLinkMatches(fname, fsub=None, n=0, qdel=False) >>> fglob = GetLinkMatches(fname, fsubs)
- Inputs:
- fname:
list[dict|str] List of file name patterns
- fsub:
str|list[str] Folder name of folder name pattern
- n:
int Default number of files to ignore at end of glob
- qdel:
True| {False} Interpret n as how many files to keep if
True; as how many files to copy ifFalse
- fname:
- Outputs:
- fglob:
list[str] List of files matching input pattern
- fglob:
- See also:
- Versions:
2016-03-01
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add qdel
- cape.manage.GetMatches(fname, fsub=None, fkeep=None, ftest=None, n=0, fsort=None, qdel=False)¶
Get matches based on arbitrary rules
- Call:
>>> fglob = GetMatches(fname, **kw)
- Inputs:
- fname:
str File name or file name pattern
- fsub:
str|list[str] Subfolder name of folder name patterns in which to search
- fkeep:
list[str] List of file names matching a negative file glob
- ftest:
func Function to test file type, e.g.
os.path.isdir()- n:
int Default number of files to ignore from the end of the glob or number of files to ignore from beginning of glob if negative
- fsort: callable
Non-default sorting function
- qdel:
True| {False} Interpret n as how many files to keep if
True; as how many files to copy ifFalse
- fname:
- Outputs:
- fglob:
list[str] List of files matching input pattern
- fglob:
- Versions:
2016-03-14
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add qdel kwarg
- cape.manage.GetMatchesList(flist, fsub=None, ftest=None, n=0, qdel=False)¶
Get matches from a list of file glob descriptors
- Call:
>>> fglob = GetMatchesList(flist, **kw)
- Inputs:
- flist:
list[str|dict] List of file names or file name patterns
- fsub:
str|list[str] Subfolder name of folder name patterns in which to search
- ftest:
func Function to test file type, e.g.
os.path.isdir()- n:
int Default number of files to ignore from the end of the glob or number of files to ignore from beginning of glob if negative
- qdel:
True| {False} Interpret n as how many files to keep if
True; as how many files to copy ifFalse
- flist:
- Outputs:
- fglob:
list[str] List of files matching input pattern
- fglob:
- Versions:
2016-03-14
@ddalle: Version 1.02017-03-06
@ddalle: Added qdel option
- cape.manage.GetSearchDirs(fsub=None, fsort=None)¶
Get list of current folder and folders matching pattern
- Call:
>>> fdirs = GetSearchDirs() >>> fdirs = GetSearchDirs(fsub) >>> fdirs = GetSearchDirs(fsubs)
- Inputs:
- fsub:
str Folder name of folder name pattern
- fsubs:
list[str] List of folder names or folder name patterns
- fsort: callable
Non-default sorting function
- fsub:
- Versions:
2016-03-01
@ddalle: Version 1.0
- cape.manage.ManageFilesPost(opts=None, fsub=None, phantom=False)¶
Delete or group files and folders after creating archive
- Call:
>>> cape.manage.ManageFilesPost(opts=None, **kw)
- Inputs:
- opts:
cape.cfdx.options.Options|dict Options interface for archiving
- fsub:
list[str] Globs of subdirectories that are adaptive run folders
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add phantom option
- cape.manage.ManageFilesPre(opts=None, fsub=None, phantom=False)¶
Delete or group files and folders before creating archive
- Call:
>>> cape.manage.ManageFilesPre(opts=None, fsub=None)
- Inputs:
- opts:
cape.cfdx.options.Options|dict Options interface for archiving
- fsub:
list[str] Number of files to keep
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add phantom option
- cape.manage.ManageFilesProgress(opts=None, fsub=None, phantom=False)¶
Delete or group files and folders at end of each run
- Call:
>>> cape.manage.ManageFilesProgress(opts=None, **kw)
- Inputs:
- opts:
cape.cfdx.options.Options|dict Options interface for archiving
- fsub:
list[str] List of globs of subdirectories that are adaptive run folders
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add phantom option
- cape.manage.PostDeleteDirs(opts, fsub=None, aa=None, phantom=False)¶
Delete appropriate folders after completing archive
- Call:
>>> PostDeleteDirs(opts, fsub=None, aa=None, phantom=False)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PostDeleteFiles(opts, fsub=None, aa=None, phantom=False)¶
Delete appropriate files after completing archive
- Call:
>>> PostDeleteFiles(opts, fsub=None, aa=None, phantom=False)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PostTarDirs(opts, fsub=None, aa=None, frun=None)¶
Tar folders after archiving
The folders are not deleted after the tar ball is created
- Call:
>>> PostTarDirs(opts, fsub=None, aa=None, frun=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- frun:
str Name of case folder
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PostTarGroups(opts, fsub=None, aa=None, frun=None)¶
Tar file/folder groups
The files are not deleted after the tar ball is created
- Call:
>>> PostTarGroups(opts, fsub=None, aa=None, frun=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- frun:
str Case folder name
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PostUpdateFiles(opts, fsub=None, aa=None, phantom=False)¶
Delete files after archiving, by default keeping most recent
- Call:
>>> PreUpdateFiles(opts, fsub=None, aa=None, phantom=False)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PreDeleteDirs(opts, fsub=None, aa=None, phantom=False)¶
Delete folders that match a list of patterns before archiving
- Call:
>>> PreDeleteDirs(opts, fsub=None, aa=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PreDeleteFiles(opts, fsub=None, aa=None, phantom=False)¶
Delete files that match a list of file name patterns
- Call:
>>> PreDeleteFiles(opts, fsub=None, aa=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PreTarDirs(opts, fsub=None, aa=None)¶
Tar folders before archiving
The folders are deleted after the tar ball is created
- Call:
>>> PreTarDirs(opts, fsub=None, aa=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PreTarGroups(opts, fsub=None, aa=None)¶
Tar file/folder groups
The files are deleted after the tar ball is created
- Call:
>>> PreTarGroups(opts, fsub=None, aa=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.PreUpdateFiles(opts, fsub=None, aa=None, phantom=False)¶
Delete files that match list, keeping the most recent by default
- Call:
>>> PreUpdateFiles(opts, fsub=None, aa=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.ProgressArchiveFiles(opts, fsub=None, aa=None, phantom=False)¶
Archive files of active (in progress) case folder
- Call:
>>> ProgressArchiveFiles(opts, fsub=None, **kw)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.ProgressDeleteDirs(opts, fsub=None, aa=None, phantom=False)¶
Delete appropriate folders of active (in progress) case
- Call:
>>> ProgressDeleteDirs(opts, fsub=None, aa=None, phantom=False)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.ProgressDeleteFiles(opts, fsub=None, aa=None, phantom=False)¶
Delete appropriate files from active (in progress) case folder
- Call:
>>> ProgressDeleteFiles(opts, fsub=None, aa=None, phantom=False)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.ProgressTarDirs(opts, fsub=None, aa=None)¶
Tar folders of active (in progress) case
The folders are deleted after the tar ball is created
- Call:
>>> ProgressTarDirs(opts, fsub=None, aa=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.ProgressTarGroups(opts, fsub=None, aa=None)¶
Tar file/folder groups after each run
The files are deleted after the tar ball is created
- Call:
>>> ProgressTarGroups(opts, fsub=None, aa=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.ProgressUpdateFiles(opts, fsub=None, aa=None, phantom=False)¶
Delete files in active folder, by default keeping most recent
- Call:
>>> ProgressUpdateFiles(opts, fsub=None, aa=None)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.SkeletonDeleteFiles(opts, fsub=None, aa=None, phantom=False)¶
Delete all files except those matching file name patterns
- Call:
>>> SkeletonDeleteFiles(opts, fsub=None, aa=None, phantom=False)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2017-12-14
@ddalle: Version 1.0
- cape.manage.SkeletonFolder(opts, fsub=[], phantom=False)¶
Perform post-archiving clean-out actions; create a “skeleton”
- Call:
>>> cape.manage.SkeletonFolder(opts, fsub=[], phantom=False)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface including management/archive
- fsub:
list[str] Globs of subdirectories that are adaptive run folders
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2017-12-13
@ddalle: Version 1.02017-12-15
@ddalle: Version 1.1, add phantom option
- cape.manage.SkeletonTailFiles(opts, fsub=None, aa=None, phantom=False)¶
Replace files with their last few lines, possibly in a new file
- Call:
>>> SkeletonTailFiles(opts, fsub=None, aa=None, phantom=False)
- Inputs:
- opts:
None|Archive|dict Options dictionary or options interface
- fsub:
list[str] |str List of sub-directory globs in which to search
- aa: callable
Conversion function applied to opts
- phantom:
True| {False} Only delete files if
False
- opts:
- Versions:
2017-12-14
@ddalle: Version 1.0
- cape.manage.TailFiles(ftail, fsub=None, n=1, phantom=False)¶
Tail a list of files
An example input is
[{"run.resid": [2, "run.tail.resid"]}]; this tells the function to tail the last2files fromrun.residand put them in a file calledrun.tail.resid.- Call:
>>> cape.manage.TailFiles(ftail, fsub=None, n=1, phantom=False)
- Inputs:
- ftail:
list[dict] List of dictionaries of files to tail
- fsub:
str|list[str] Folder, list of folders, or glob of folders to also search
- n:
int Number of files to keep
- phantom:
True| {False} Only delete files if
False
- ftail:
- Versions:
2016-03-01
@ddalle: Version 1.02017-03-06
@ddalle: Version 1.1, add phantom option
- cape.manage.TarDir(cmd, ftar, fdir, clean=True)¶
Archive a folder and delete the folder
- Call:
>>> TarDir(cmd, ftar, fdir)
- Inputs:
- cmd:
list[str] List of archiving/compression commands
- ftar:
str Name of file to create
- fdir:
str Name of folder
- clean:
bool Whether or not to delete folder afterwards
- cmd:
- Versions:
2016-03-01
@ddalle: Version 1.0
- cape.manage.TarGroup(cmd, ftar, fname, n=0, clean=False)¶
Archive a group of files and delete the files
Only the present folder will searched for file name matches
- Call:
>>> TarGroup(cmd, ftar, fname, clean=False)
- Inputs:
- cmd:
list[str] List of archiving/compression commands
- ftar:
str Name of file to create
- fname:
list[dict|str] File name pattern or list thereof to combine into archive
- clean:
bool Whether or not to clean up after archiving
- cmd:
- Versions:
2016-03-01
@ddalle: Version 1.02016-03-14
@ddalle: Version 2.0; generalized
- cape.manage.TarLinks(cmd, ext, clean=True)¶
Tar all links existing in the current folder
- Call:
>>> TarLinks(cmd, ext, clean=True)
- Inputs:
- cmd:
list[str] List of archiving/compression commands
- ftar:
str Name of file to create
- clean:
bool Whether or not to clean up after archiving
- cmd:
- Versions:
2016-03-01
@ddalle: Version 1.0
- cape.manage.UnarchiveCaseWhole(opts)¶
Unarchive a tar ball that stores results for an entire folder
- Call:
>>> UnarchiveCaseWhole(opts)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface
- opts:
- Versions:
2017-03-13
@ddalle: Version 1.0
- cape.manage.UnarchiveFolder(opts)¶
Unarchive a case archived as one or more compressed files
- Call:
>>> cape.manage.UnarchiveFolder(opts)
- Inputs:
- opts:
cape.cfdx.options.Options Options interface
- opts:
- Versions:
2017-03-13
@ddalle: Version 1.0
- cape.manage.Untar(cmd, ftar)¶
Unarchive a tar ball and then delete it
- Call:
>>> cape.manage.Untar(cmd, ftar)
- Inputs:
- cmd:
list[str] List of archiving/compression commands
- ftar:
str Name of file to create
- fname:
str File name pattern or list thereof to combine into archive
- cmd:
- Versions:
2016-03-01
@ddalle: Version 1.0
- cape.manage.getmtime(fname)¶
Get the modification time of a file, using
sshif necessaryFor local files, this function uses
os.path.getmtime(). If fname contains a:, this function issues ansshcommand viasubprocess.Popen().- Call:
>>> t = getmtime(fname)
- Inputs:
- fname:
str Name of file
- fname:
- Outputs:
- t:
float|None Modification time;
Noneif file does not exist
- t:
- Versions:
2017-03-17
@ddalle: Version 1.0
- cape.manage.getmtime_glob(fglob)¶
Get the modification time of a glob, using
sshif necessary- Call:
>>> t = getmtime_glob(fglob)
- Inputs:
- fglob:
list[str] List if names of files
- fglob:
- Outputs:
- t:
float|None Modification time of most recently modified file
- t:
- Versions:
2017-03-13
@ddalle: Version 1.0
- cape.manage.isbrokenlink(fname)¶
Handle to test if a file is a broken link
- Call:
>>> q = cape.manage.isbrokenlink(fname)
- Inputs:
- fname:
str Name of link
- fname:
- Outputs:
- q:
bool Whether or not it is a link that is broken
- q:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.isfile(fname)¶
Handle to test if file or link
- Call:
>>> q = cape.manage.isfile(fname)
- Inputs:
- fname:
str Name of file
- fname:
- Outputs:
- q:
bool Whether or not file both exists and is either a file or link
- q:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.process_ArchiveFile(f, n=1)¶
Process a file glob description
This can be either a file name, file name pattern, or dictionary of file name pattern and number of files to keep
- Call:
>>> fname, nkeep = process_ArchiveFile(fname, n=1) >>> fname, nkeep = process_ArchiveFile(fdict, n=1) >>> fname, nkeep = process_ArchiveFile({fname: nkeep}, n=1)
- Inputs:
- fname:
str File name or file name pattern to delete/group/etc.
- nkeep:
int Number of matching files to keep
- n:
int Default number of files to keep
- fname:
- Outputs:
- fname:
str File name or file name pattern to delete/group/etc.
- nkeep:
int Number of matching files to keep
- fname:
- Versions:
2016-03-01
@ddalle: Version 1.02022-02-02
@ddalle: Version 1.1; python 3 fixes
- cape.manage.process_ArchiveGroup(grp)¶
Process an archive group, which has a precise format
It must be a dictionary with one entry
- Call:
>>> ftar, fpat = cape.manage.process_ArchiveGroup(grp) >>> ftar, fpat = cape.manage.process_Archivegroup({ftar: fpat})
- Inputs:
- grp:
dict, len: 1 Single dictionary with name and pattern or list of patterns
- grp:
- Outputs:
- ftar:
str Name of archive to create without extension
- fpat:
str|dict|list File name pattern or list of file name patterns
- ftar:
- Versions:
2016-03-01
@ddalle: Version 1.0
- cape.manage.sortfiles(fglob)¶
Sort a glob of files based on the time of their last edit
- Call:
>>> fsort = sortfiles(fglob)
- Inputs:
- fglob:
list[str] List of file names
- fglob:
- Outputs:
- fsort:
list[str] Above listed by
os.path.getmtime()
- fsort:
- Versions:
2016-03-14
@ddalle: Version 1.0
- cape.manage.write_log(txt, fname='archive.log')¶
Write the date to the archive log
- Call:
>>> cape.manage.write_log(txt, fname='archive.log')
- Inputs:
- fname: {
"archive.log"} |str Name of acrhive log file
- fname: {
- Versions:
2016-07-08
@ddalle: Version 1.0
- cape.manage.write_log_date(fname='archive.log')¶
Write the date to the archive log
- Call:
>>> cape.manage.write_log_date(fname='archive.log')
- Inputs:
- fname: {
"archive.log"} |str Name of acrhive log file
- fname: {
- Versions:
2016-07-08
@ddalle: Version 1.0