...
Code Block | ||||
---|---|---|---|---|
| ||||
def __init__(self, backend_id, db_name, shot, run, user_name = None, data_version = 3None) if user_name is None: user_name = $USER if data_version is None: data_version = $IMAS_VERSION |
Additional "URI-based" constructor will be added in future...
...
All parameters that defines db_entry
DBEntry
are set in constructor, so create, open, close
will have no mandatory arguments
Code Block | ||||
---|---|---|---|---|
| ||||
def create(self, options = None) def open(self, options = None) def close(self, options = None) options - additional options (backend specific) |
...
Code Block | ||||
---|---|---|---|---|
| ||||
def get(self, idsNameids_name, occurrence = 0) # idsNameids_name (e.g. 'equilibrium') ENUM ? wallObj = initialize_ids_obj('wall') wallObj.put(self(db_entry)) return wallObj, IDSName.EQUILIBRIUM, wall.__name__ (see below)) |
Put IDS
Code Block | ||||
---|---|---|---|---|
| ||||
def put(self, ids, occurrence = 0) |
IDS
...
put slice
Code Block | ||||
---|---|---|---|---|
| ||||
def put_slice(self, ids, occurrence = 0) |
...
IDS get slice
Code Block | ||||
---|---|---|---|---|
| ||||
def get_slice(self, ids_name, time_requested, interpolation_method, occurrence=0): # idsName (e.g. 'equilibrium') return ids |
Any other method is needed to ba added to DBEntry class?
...
Partial Get
Code Block |
---|
def partial_get(self, ids_name, data_path, occurrence = 0, db_entry = None): |
IDS superclass
IDSBase
- Parent class for all classes representing particular IDSes.
Class methods (aka "static")
def get_ids(cls, ids_name):
For internal use only - it should not be called by users.
IDS class
Warning | ||
---|---|---|
| ||
Backward compatibility, understood as possibility of using 'old' and 'new' approach at the same time is kept:
Compatibility can be also ensured by introducing new names of methods - |
Class methods (aka "static")
Code Block |
---|
def get_max_occurrences(cls):
def read_time_mode(self, ctx):
def read_time(self, ctx): |
IDS storing / reading
DBEntry
is used to provide explicitly context to methods. This parameter is optional to keep To provide database context user has to pass explicitly DBEntry object to all methods responsible for saving / reading data. This parameter should be mandatory but has to be kept optional to ensure backward compatibility....
...
Code Block |
---|
def put(self, occurrence=0, db_entry=None): def get(self, occurrence=0, db_entry=None): def putSlice(self, occurrence=0, db_entry=None): def getSlice(self, time_requested, interpolation_method, occurrence=0, db_entry=None): |
Additional methods
Code Block |
---|
def copy_values(self, ids): def delete_datapartialGet(self, occurrence=0, db_entry=None ): def partial_get(self, dataPath, occurrence=0, db_entry=None): def get_field(self, dataPath, occurrence=0, db_entry=None): |
"Messy" methods
... that are not in line with proposed design but they must be kept to ensure backward compatibility.
...
Backward compatibility
PUT | GET | ||||
---|---|---|---|---|---|
|
|
...
PUT | GET | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
...
PUT | GET | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Importing IDS classes
Suggested method:
Code Block |
---|
import imas
ids_wall = imas.wall() |
It is also possible to write:
Code Block |
---|
import imas
from imas.wall import wall
ids_wall = wall() |
or
Code Block |
---|
import imas
ids_wall = imas.wall.wall() |
IDS names
Code Block |
---|
Info |
To avoid any mistakes |
...
, typos, argument describing IDS should not be a string (ida name - 'equilibrium', 'wall' etc) but a constant pre-defined value. |
It can be implemented using enum or class attribute
Enum
class IDSName(enum):
EQUILIBRIUM = 'equilibrium'
WALL = 'wall'
etc etc
Suggested methods of specifying IDS name are:
|
Code Block |
---|
from ids_names import IDSName
ids =
|
Warning |
---|
It is not enough to call |
Given IDS class attribute
e.g. Wall.__name__
|
Code Block |
---|
ids =
|
Info | ||
---|---|---|
| ||
This work has been carried out within the framework of the EUROfusion Consortium and has received funding from the Euratom research and training programme 2014-2018 under grant agreement No 633053.The scientific work is published for the realization of the international project co-financed by Polish Ministry of Science and Higher Education in 2019 and 2020 from financial resources of the program entitled "PMW"; Agreement No. 5040/H2020/Euratom/2019/2 and 5142/H2020-Euratom/2020/2”. |