Module jumpscale.core.base.store.filesystem

Expand source code
import os

from . import ConfigNotFound, EncryptedConfigStore
from .serializers import JsonSerializer

from jumpscale.sals.fs import exists, make_path, read_file_binary, rmtree, write_file_binary


class FileSystemStore(EncryptedConfigStore):
    """
    Filesystem store is an EncryptedConfigStore

    It saves the config relative to `config_env.get_store_config("filesystem")`

    To store every instance config in a different path, it uses the given `Location`.
    """

    def __init__(self, location):
        """
        create a new `FileSystemStore` that stores config at the given location under configured root.

        The root directory can be configured, see `jumpscale.core.config`

        Args:
            location (Location): where config will be stored per instance
        """
        super(FileSystemStore, self).__init__(location, JsonSerializer())
        self.root = self.config_env.get_store_config("filesystem")["path"]

    @property
    def config_root(self):
        """
        get the root directory where all configurations are written

        Returns:
            str: path
        """
        return os.path.join(self.root, self.location.path)

    def get_instance_root(self, instance_name):
        """
        get the directory where instance config is written

        Args:
            instance_name (str): name

        Returns:
            str: path
        """
        return os.path.join(self.config_root, instance_name)

    def get_path(self, instance_name):
        """
        get the path to data file where instance config is written

        Args:
            instance_name (str): name

        Returns:
            str: path
        """
        return os.path.join(self.get_instance_root(instance_name), "data")

    def read(self, instance_name):
        """
        read config data from the data file

        Args:
            instance_name (str): name

        Returns:
            str: data
        """
        path = self.get_path(instance_name)
        if not exists(path):
            raise ConfigNotFound(f"cannot find config for {instance_name} at {path}")
        return read_file_binary(path)

    def list_all(self):
        """
        list all instance names (directories under config root)

        Returns:
            list: instance/directory names
        """
        if not os.path.exists(self.config_root):
            return []
        return os.listdir(self.config_root)

    def write(self, instance_name, data):
        """
        write config data to data file

        Args:
            instance_name (str): config
            data (str): data

        Returns:
            bool: written or not
        """
        path = self.get_path(instance_name)
        make_path(path)
        return write_file_binary(path, data.encode())

    def delete(self, instance_name):
        """
        delete instance config directory

        Args:
            instance_name (str):
        """
        path = self.get_instance_root(instance_name)
        if os.path.exists(path):
            rmtree(path)

Classes

class FileSystemStore (location)

Filesystem store is an EncryptedConfigStore

It saves the config relative to config_env.get_store_config("filesystem")

To store every instance config in a different path, it uses the given Location.

create a new FileSystemStore that stores config at the given location under configured root.

The root directory can be configured, see jumpscale.core.config

Args

location : Location
where config will be stored per instance
Expand source code
class FileSystemStore(EncryptedConfigStore):
    """
    Filesystem store is an EncryptedConfigStore

    It saves the config relative to `config_env.get_store_config("filesystem")`

    To store every instance config in a different path, it uses the given `Location`.
    """

    def __init__(self, location):
        """
        create a new `FileSystemStore` that stores config at the given location under configured root.

        The root directory can be configured, see `jumpscale.core.config`

        Args:
            location (Location): where config will be stored per instance
        """
        super(FileSystemStore, self).__init__(location, JsonSerializer())
        self.root = self.config_env.get_store_config("filesystem")["path"]

    @property
    def config_root(self):
        """
        get the root directory where all configurations are written

        Returns:
            str: path
        """
        return os.path.join(self.root, self.location.path)

    def get_instance_root(self, instance_name):
        """
        get the directory where instance config is written

        Args:
            instance_name (str): name

        Returns:
            str: path
        """
        return os.path.join(self.config_root, instance_name)

    def get_path(self, instance_name):
        """
        get the path to data file where instance config is written

        Args:
            instance_name (str): name

        Returns:
            str: path
        """
        return os.path.join(self.get_instance_root(instance_name), "data")

    def read(self, instance_name):
        """
        read config data from the data file

        Args:
            instance_name (str): name

        Returns:
            str: data
        """
        path = self.get_path(instance_name)
        if not exists(path):
            raise ConfigNotFound(f"cannot find config for {instance_name} at {path}")
        return read_file_binary(path)

    def list_all(self):
        """
        list all instance names (directories under config root)

        Returns:
            list: instance/directory names
        """
        if not os.path.exists(self.config_root):
            return []
        return os.listdir(self.config_root)

    def write(self, instance_name, data):
        """
        write config data to data file

        Args:
            instance_name (str): config
            data (str): data

        Returns:
            bool: written or not
        """
        path = self.get_path(instance_name)
        make_path(path)
        return write_file_binary(path, data.encode())

    def delete(self, instance_name):
        """
        delete instance config directory

        Args:
            instance_name (str):
        """
        path = self.get_instance_root(instance_name)
        if os.path.exists(path):
            rmtree(path)

Ancestors

Instance variables

var config_root

get the root directory where all configurations are written

Returns

str
path
Expand source code
@property
def config_root(self):
    """
    get the root directory where all configurations are written

    Returns:
        str: path
    """
    return os.path.join(self.root, self.location.path)

Methods

def delete(self, instance_name)

delete instance config directory

Args

instance_name (str):

Expand source code
def delete(self, instance_name):
    """
    delete instance config directory

    Args:
        instance_name (str):
    """
    path = self.get_instance_root(instance_name)
    if os.path.exists(path):
        rmtree(path)
def get_instance_root(self, instance_name)

get the directory where instance config is written

Args

instance_name : str
name

Returns

str
path
Expand source code
def get_instance_root(self, instance_name):
    """
    get the directory where instance config is written

    Args:
        instance_name (str): name

    Returns:
        str: path
    """
    return os.path.join(self.config_root, instance_name)
def get_path(self, instance_name)

get the path to data file where instance config is written

Args

instance_name : str
name

Returns

str
path
Expand source code
def get_path(self, instance_name):
    """
    get the path to data file where instance config is written

    Args:
        instance_name (str): name

    Returns:
        str: path
    """
    return os.path.join(self.get_instance_root(instance_name), "data")
def list_all(self)

list all instance names (directories under config root)

Returns

list
instance/directory names
Expand source code
def list_all(self):
    """
    list all instance names (directories under config root)

    Returns:
        list: instance/directory names
    """
    if not os.path.exists(self.config_root):
        return []
    return os.listdir(self.config_root)
def read(self, instance_name)

read config data from the data file

Args

instance_name : str
name

Returns

str
data
Expand source code
def read(self, instance_name):
    """
    read config data from the data file

    Args:
        instance_name (str): name

    Returns:
        str: data
    """
    path = self.get_path(instance_name)
    if not exists(path):
        raise ConfigNotFound(f"cannot find config for {instance_name} at {path}")
    return read_file_binary(path)
def write(self, instance_name, data)

write config data to data file

Args

instance_name : str
config
data : str
data

Returns

bool
written or not
Expand source code
def write(self, instance_name, data):
    """
    write config data to data file

    Args:
        instance_name (str): config
        data (str): data

    Returns:
        bool: written or not
    """
    path = self.get_path(instance_name)
    make_path(path)
    return write_file_binary(path, data.encode())

Inherited members