...
Warning |
---|
Introduced changes should work in parallel with existing API (unless it proves impossible) 'Old' methods and classes will be marked as |
...
DBEntry
Class structure:
Class keeps information about one, particular database entry (eg. pulse-file, HDC container, SQL-database, etc etc)
Gliffy Diagram | ||||||
---|---|---|---|---|---|---|
|
db_entry
DBEntry
class represents data accessible through Access Layerhdc_entry
HDCEntry
,sql_entry
SQLEntry
are examples of classes that represents IMAS data entry accessible via other mechanisms than AL (if they will be implemented in future)imas_entry
IMASEntry
a parent class for all??_entry
all XXXEntry
classes. It will be implemented in future if any other mechanism of accessing data than AL will be used. Could be empty...
...
- backend_id - MDSPLUS_BACKEND, MEMORY_BACKEND, ASCII_BACKEND - mandatory -
- db name - eg.
test
- mandatory - shot - mandatory
- run - mandatory
- user name - eg.
g2bpalak
- optional - if None → $USER optional (ifNone
→ $USER) - data version - e.g. 3 - optional - currently not used, we should keep it as it will point us to a proper dir in imasdb structure, when we develop versions 4,5, etc - if None → 3None →
$IMAS_VERSION
Code Block | ||||
---|---|---|---|---|
| ||||
def __init__(self, backend_id, db_name, shot, run, user_name = None, data_version = 3None) if userNameuser_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 (possibly backend specific) |
DBEntry methods for IDS storing /reading
Get IDS
...
Code Block | ||||
---|---|---|---|---|
| ||||
def get(self, idsNameids_name, occurrence = 0) # idsNameids_name (e.g. 'equilibrium', IDSName.EQUILIBRIUM, wall.__name__ (see below)) return ids |
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 |
...
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):
IDS class
Class methods (aka "static")
def get_max_occurrences(cls):
def read_time_mode(self, ctx):
def read_time(self, ctx):
...
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 - |
IDS storing / reading
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):
def partialGet(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.
Code Block |
---|
def setPulseCtx(self, ctx):
def getPulseCtx(self): |
Examples
Backward compatibility
PUT | GET | ||||
---|---|---|---|---|---|
|
|
Storing/reading data via db_entry methods
PUT | GET | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Storing/reading data via ids methods
PUT | GET | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
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. Suggested methods of specifying IDS name are:
|
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”. |
def put(self, occurrence=0, db_entry=None):
...