-
Notifications
You must be signed in to change notification settings - Fork 32
FileStore
Stores are Catmandu packages to store Catmandu Items in a database. A FileStore is a Store where you can store binary content (unstructured data). The plan is to implement different kind of FileStore backends for Catmandu to store files in many type of systems. Out of the box, one FileStore implementation is provided: File::Simple which stores files in a directory structure on the local file system.
The command below stores the /tmp/myfile.txt
in the File::Simple
FileStore:
$ catmandu stream /tmp/myfile.txt to File::Simple --root t/data --bag 1234 --id myfile.txt
The root
parameter is mandatory for the File::Simple
FileStore. It defines the location where all stored
files are written. The other two parameters bag
and id
are mandatory for every FileStore (see below).
To extract a file from a FileStore the stream
command can be used in the opposite direction:
$ catmandu stream File::Simple --root t/data --bag 1234 --id myfile.txt to /tmp/myfile.txt
From the File::Simple
store a the file myfile.txt
is extracted from the Bag with identifier 1234
Every FileStore inherits the functionality of a Store. In this way the drop
and delete
commands can be used
to delete data from a FileStore:
# Delete a "file"
$ catmandu delete File::Simple --root t/data --bag 1234 --id myfile.txt
# Delete a "folder"
$ catmandu drop File::Simple --root t/data --bag 1234
A FileStore contain one or more Bags. These are containers (or "folders") that contain zero or more files.
The name of these container is an identifiers. In the case of the File::Simple
this identifier needs to be a number, or when setting the uuid
option an UUID identifier.
The binary data stored in these Bags also needs an identifier, indicated with the id
option. Usually the file name is a good identifier to use.
Both the bag
name option and id
option are required when uploading or streaming data from a FileStore Bag.
Every FileStore has a default bag called index
which contains a list of all available Bags in the store. Using the export
command a listing of bags can be requested from the FileStore:
$ catmandu export File::Simple --root t/data to YAML
To retrieve a listing of all files stored in a bag the bag
option needs to be provided:
$ catmandu export File::Simple --root t/data --bag 1234 to YAML
As for Stores, the configuration parameters for FileStore can be written in a catmandu.yml
configuration file. In this way the Catmandu commands can be shortened:
$ cat catmandu.yml
---
store:
files
package: File::Simple
options:
root: t/data
# Get a "directory" listing
$ catmandu export files to YAML
# Get a "file" listing
$ catmandu export files --bag 1234 to YAML
# Add a file
$ catmandu stream /tmp/myfile.txt to files --bag 1234 --id myfile.txt
# Download a file
$ catmandu stream files --bag 1234 --id myfile.txt to /tmp/myfile.txt