Source code for nxswriter.EGroup
#!/usr/bin/env python
# This file is part of nexdatas - Tango Server for NeXus data writer
#
# Copyright (C) 2012-2017 DESY, Jan Kotanski <jkotan@mail.desy.de>
#
# nexdatas is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# nexdatas is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with nexdatas. If not, see <http://www.gnu.org/licenses/>.
#
""" Definitions of group tag evaluation classes """
import sys
from .FElement import FElementWithAttr
from .Errors import (XMLSettingSyntaxError)
[docs]class EGroup(FElementWithAttr):
""" group H5 tag element
"""
def __init__(self, attrs, last, streams=None,
reloadmode=False):
""" constructor
:param attrs: dictionary of the tag attributes
:type attrs: :obj:`dict` <:obj:`str`, :obj:`str`>
:param last: the last element from the stack
:type last: :class:`nxswriter.Element.Element`
:param streams: tango-like steamset class
:type streams: :class:`StreamSet` or :class:`tango.LatestDeviceImpl`
:param reloadmode: reload mode
:type reloadmode: :obj:`bool`
"""
FElementWithAttr.__init__(self, "group", attrs, last, streams=streams,
reloadmode=reloadmode)
if self._lastObject() is not None:
if ("type" in attrs.keys()) and ("name" in attrs.keys()):
if sys.version_info > (3,):
gname = attrs["name"]
else:
gname = attrs["name"].encode()
elif "type" in attrs.keys():
if sys.version_info > (3,):
gname = attrs["type"][2:]
else:
gname = attrs["type"][2:].encode()
else:
if self._streams:
self._streams.error(
"EGroup::__init__() - The group type not defined",
std=False)
raise XMLSettingSyntaxError("The group type not defined")
if self._reloadmode:
names = [kd.name for kd in self._lastObject()]
if gname in names:
if sys.version_info < (3,):
gname = gname.encode()
self.h5Object = self._lastObject().open(gname)
return
try:
#: (:class:`nxswriter.FileWriter.FTGroup`) \
#: stored H5 file object (defined in base class)
if sys.version_info > (3,):
self.h5Object = self._lastObject().create_group(
gname, attrs["type"])
else:
self.h5Object = self._lastObject().create_group(
gname, attrs["type"].encode())
except Exception as e:
if sys.version_info < (3,):
atype = attrs["type"]
else:
atype = attrs["type"].encode()
if self._streams:
self._streams.debug(str(e))
self._streams.error(
"EGroup::__init__() - "
"The group '%s' of '%s' type cannot be created. \n"
"Please remove the old file, change the file name "
"or change the group name." %
(gname, atype),
std=False)
raise XMLSettingSyntaxError(
"The group '%s' of '%s' type cannot be created. \n"
"Please remove the old file, change the file name "
"or change the group name." %
(gname, atype))
else:
if self._streams:
self._streams.error(
"EGroup::__init__() - "
"File object for the last element does not exist",
std=False)
raise XMLSettingSyntaxError(
"File object for the last element does not exist")
self._setAttributes(["name", "type"])
[docs] def store(self, xml=None, globalJSON=None):
""" stores the tag content
:param xml: xml setting
:type xml: :obj:`str`
:param globalJSON: global JSON string
:type globalJSON: \
: :obj:`dict` <:obj:`str`, :obj:`dict` <:obj:`str`, any>>
"""
self._createAttributes()