Examples#

Examples will be extended in future.

Introduction#

Most slk and slk_helpers commands are available as functions pyslk.pyslk.slk_COMMAND(...). All command lines arguments of slk version 3.3.10 are available as the functions’ arguments. These functions are simple wrappers that print out the text, which the slk/slk_helpers commands normally print to the command line. A bit more advanced wrappers are available for a few commands via pyslk.parsers.slk_COMMAND_....

Basic examples#

List files and directories in specific path#

# load library
>>> import pyslk
# list content of a folder
>>> pyslk.list("/arch/bm0146/k204221/iow")
    permissions    owner   group      filesize       date   time                                    filename
0   -rwxr-xr-x-  k204221  bm0146  1.268945e+06 2020-06-10  08:25          /arch/bm0146/k204221/iow/INDEX.txt
1   -rw-r--r--t  k204221  bm0146  2.094216e+10 2020-06-05  17:36  /arch/bm0146/k204221/iow/iow_data2_001.tar
2   -rw-r--r--t  k204221  bm0146  2.034971e+10 2020-06-05  17:38  /arch/bm0146/k204221/iow/iow_data2_002.tar
3   -rw-r--r--t  k204221  bm0146  2.088344e+10 2020-06-05  17:38  /arch/bm0146/k204221/iow/iow_data2_003.tar
4   -rw-r--r--t  k204221  bm0146  2.071567e+10 2020-06-05  17:40  /arch/bm0146/k204221/iow/iow_data2_004.tar
5   -rw-r--r--t  k204221  bm0146  2.047869e+10 2020-06-05  17:40  /arch/bm0146/k204221/iow/iow_data2_005.tar
6   -rw-r--r--t  k204221  bm0146  8.364491e+09 2020-06-05  17:41  /arch/bm0146/k204221/iow/iow_data2_006.tar
7   -rw-r--r--t  k204221  bm0146  2.007016e+11 2020-06-05  19:37  /arch/bm0146/k204221/iow/iow_data3_001.tar
8   -rw-r--r--t  k204221  bm0146  2.646606e+10 2020-06-05  19:14  /arch/bm0146/k204221/iow/iow_data3_002.tar
9   -rw-r--r--t  k204221  bm0146  4.194304e+06 2020-06-05  19:43  /arch/bm0146/k204221/iow/iow_data4_001.tar
10  -rw-r--r--t  k204221  bm0146  1.128477e+10 2020-06-05  19:46  /arch/bm0146/k204221/iow/iow_data4_002.tar
11  -rw-r--r--t  k204221  bm0146  2.094216e+10 2020-06-10  08:21  /arch/bm0146/k204221/iow/iow_data5_001.tar
12  -rw-r--r--t  k204221  bm0146  2.034971e+10 2020-06-10  08:23  /arch/bm0146/k204221/iow/iow_data5_002.tar
13  -rw-r--r--t  k204221  bm0146  2.088344e+10 2020-06-10  08:23  /arch/bm0146/k204221/iow/iow_data5_003.tar
14  -rw-r--r--t  k204221  bm0146  2.071567e+10 2020-06-10  08:24  /arch/bm0146/k204221/iow/iow_data5_004.tar
15  -rw-r--r--t  k204221  bm0146  2.047869e+10 2020-06-10  08:25  /arch/bm0146/k204221/iow/iow_data5_005.tar
16  -rw-r--r--t  k204221  bm0146  8.364491e+09 2020-06-10  08:25  /arch/bm0146/k204221/iow/iow_data5_006.tar
17  -rw-r--r--t  k204221  bm0146  2.094216e+10 2020-06-05  17:53   /arch/bm0146/k204221/iow/iow_data_001.tar
18  -rw-r--r--t  k204221  bm0146  2.034971e+10 2020-06-05  17:53   /arch/bm0146/k204221/iow/iow_data_002.tar
19  -rw-r--r--t  k204221  bm0146  2.088344e+10 2020-06-05  17:56   /arch/bm0146/k204221/iow/iow_data_003.tar
20  -rw-r--r---  k204221  bm0146  2.071567e+10 2020-06-05  17:56   /arch/bm0146/k204221/iow/iow_data_004.tar
21  -rw-r--r---  k204221  bm0146  2.047869e+10 2020-06-05  17:58   /arch/bm0146/k204221/iow/iow_data_005.tar
22  -rw-r-----t  k204221  bm0146  8.364491e+09 2020-06-05  17:57   /arch/bm0146/k204221/iow/iow_data_006.tar

Check if files exist#

# load library
>>> import pyslk
# check if a file exists
>>> pyslk.resource_exists("/arch/bm0146/k204221/iow/iow_data2_001.tar")
True
# check another non-existing file
>>> pyslk.resource_exists("/arch/bm0146/k204221/iow/NOT_EXISTS.tar")
False

Get size of a file#

# load library
>>> import pyslk
# get size
>>> pyslk.get_resource_size("/arch/bm0146/k204221/iow/INDEX.txt")
1268945

Get size of one folder recursively#

# load library
>>> import pyslk
# get size
>>> pyslk.arch_size("/arch/bm0146/k204221/iow", unit='G')
{'value': 534.3052, 'unit': 'G'}

Check if a file is in the cache and retrieve it#

# load library
>>> import pyslk
>>> import os
# is the file stored in the cache? yet!
>>> pyslk.is_cached("/arch/bm0146/k204221/iow/INDEX.txt")
True
# retrieve file
>>> pyslk.retrieve("/arch/bm0146/k204221/iow/INDEX.txt", '.', preserve_path=True)
''
>>> os.path.exists('INDEX.txt')
True

Get the checksums of a file#

# load library
>>> import pyslk
# get checksums
>>> pyslk.checksum("/arch/bm0146/k204221/iow/INDEX.txt")
{'adler32': '412dec3a', 'sha512': '83644ffc384c70aaf60d29f3303d771e219f3b3f8abdb3a590ac501faf7abbeb371ee4b6b949a1cdc3fa7c44438cd6643f877e8c1ab27d8fe5cc26eb06896d99'}

Search for files based on certain conditions#

We want to search for files, which are stored in /arch/bm0146/k204221/iow, are larger than 1 kb and smaller than approximately 2 MB.

# load pyslk
>>> import pyslk
# generate search query
>>> search_query = pyslk.gen_search_query(["path=/arch/bm0146/k204221/iow", "resources.size>1024", "resources.size<2000000"])
>>> search_query
'{"$and":[{"resources.size":{"$gt":1024}},{"resources.size":{"$lt":2000000}},{"path":{"$gte":"/arch/bm0146/k204221/iow","$max_iterations":1}}]}'
# run search
>>> search_id = pyslk.search(search_query)
>>> search_id
321321
# list search results
>>> pyslk.list(search_id)
   permissions    owner   group   filesize       date   time                            filename
0  -rwxr-xr-x-  k204221  bm0146  1268945.0 2020-06-10  08:25  /arch/bm0146/k204221/iow/INDEX.txt

or just

> import pyslk
> pyslk.list(pyslk.search(pyslk.gen_search_query(["path=/arch/bm0146/k204221/iow", "resources.size>1024", "resources.size<2000000"])))
   permissions    owner   group   filesize       date   time                            filename
0  -rwxr-xr-x-  k204221  bm0146  1268945.0 2020-06-10  08:25  /arch/bm0146/k204221/iow/INDEX.txt

Optimize retrieval of several files by running one retrieval per tape#

>>> import pprint
>>> import pyslk
# create grouping
>>> grouping = pyslk.group_files_by_tape('/arch/bm0146/k204221/iow', recursive=True, run_search_query=True)
# look into the grouping
>>> pprint.pprint(grouping)
[{'barcode': '',
  'description': 'files currently stored in the HSM cache',
  'file_count': 3,
  'file_ids': [49058705518, 49058705517, 49058705497],
  'files': ['/arch/bm0146/k204221/iow/iow_data_005.tar',
            '/arch/bm0146/k204221/iow/iow_data_004.tar',
            '/arch/bm0146/k204221/iow/INDEX.txt'],
  'id': -1,
  'location': 'cache',
  'search_complete': True,
  'search_id': 505589,
  'search_query': '{"$and":[{"path":{"$gte":"/arch/bm0146/k204221/iow"}},{"smart_pool":"slpstor"}]}',
  'status': ''},
  ...
  {'barcode': 'M12217M8',
  'description': 'files stored on the tape with the given ID and barcode/label',
  'file_count': 2,
  'file_ids': [49058705503, 49058705502],
  'files': ['/arch/bm0146/k204221/iow/iow_data2_006.tar',
            '/arch/bm0146/k204221/iow/iow_data2_005.tar'],
  'id': 130879,
  'location': 'tape',
  'search_complete': True,
  'search_id': 505599,
  'search_query': '{"$and":[{"path":{"$gte":"/arch/bm0146/k204221/iow"}},{"tape_barcode":"M12217M8"}]}',
  'status': 'AVAILABLE'}]
# print the search ids
>>> [r['search_id'] for r in grouping]
[505589, 505590, 505591, 505592, 505593, 505594, 505595, 505596, 505597, 505598, 505599]
# run retrievals
>>> pyslk.retrieve(505589, '.', preserve_path=True)
>>> pyslk.retrieve(505590, '.', preserve_path=True)
>>> pyslk.retrieve(505591, '.', preserve_path=True)
>>> pyslk.retrieve(505592, '.', preserve_path=True)
>>> pyslk.retrieve(505593, '.', preserve_path=True)
>>> pyslk.retrieve(505594, '.', preserve_path=True)
>>> pyslk.retrieve(505595, '.', preserve_path=True)
>>> pyslk.retrieve(505596, '.', preserve_path=True)
>>> pyslk.retrieve(505597, '.', preserve_path=True)
>>> pyslk.retrieve(505598, '.', preserve_path=True)
>>> pyslk.retrieve(505599, '.', preserve_path=True)