# Source code for aiida.orm.nodes.data.remote.stash.base

# -*- coding: utf-8 -*-
"""Data plugin that models an archived folder on a remote computer."""
from aiida.common.datastructures import StashMode
from aiida.common.lang import type_check
from ...data import Data

__all__ = ('RemoteStashData',)

[docs]class RemoteStashData(Data):
"""Data plugin that models an archived folder on a remote computer.

A stashed folder is essentially an instance of RemoteData that has been archived. Archiving in this context can
simply mean copying the content of the folder to another location on the same or another filesystem as long as it is
on the same machine. In addition, the folder may have been compressed into a single file for efficiency or even
written to tape. The stash_mode attribute will distinguish how the folder was stashed which will allow the
implementation to also unstash it and transform it back into a RemoteData such that it can be used as an input
for new CalcJobs.

This class is a non-storable base class that merely registers the stash_mode attribute. Only its subclasses,
that actually implement a certain stash mode, can be instantiated and therefore stored. The reason for this design
is that because the behavior of the class can change significantly based on the mode employed to stash the files and
implementing all these variants in the same class will lead to an unintuitive interface where certain properties or
methods of the class will only be available or function properly based on the stash_mode.
"""

_storable = False

[docs]    def __init__(self, stash_mode: StashMode, **kwargs):
"""Construct a new instance

:param stash_mode: the stashing mode with which the data was stashed on the remote.
"""
super().__init__(**kwargs)
self.stash_mode = stash_mode

@property
def stash_mode(self) -> StashMode:
"""Return the mode with which the data was stashed on the remote.

:return: the stash mode.
"""
return StashMode(self.get_attribute('stash_mode'))

@stash_mode.setter
def stash_mode(self, value: StashMode):
"""Set the mode with which the data was stashed on the remote.

:param value: the stash mode.
"""
type_check(value, StashMode)
self.set_attribute('stash_mode', value.value)