From e9e87a721cd46c2df7e8ee75c9c6e5c9c96378fc Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:19:28 +0200 Subject: [PATCH 01/11] [property] Remove Property class --- odml/property.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/odml/property.py b/odml/property.py index a8ec7c56..1d6404d2 100644 --- a/odml/property.py +++ b/odml/property.py @@ -8,12 +8,8 @@ from .tools.doc_inherit import inherit_docstring, allow_inherit_docstring -class Property(base._baseobj): - pass - - @allow_inherit_docstring -class BaseProperty(base.baseobject, Property): +class BaseProperty(base.baseobject): """An odML Property""" _format = frmt.Property From 0ab8d5f8fd3f69142d46474ba55ec63e72f5f470 Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:21:37 +0200 Subject: [PATCH 02/11] [section] Remove Section class --- odml/section.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/odml/section.py b/odml/section.py index 8a9e9edc..6432c324 100644 --- a/odml/section.py +++ b/odml/section.py @@ -12,12 +12,8 @@ from .tools.doc_inherit import inherit_docstring, allow_inherit_docstring -class Section(base._baseobj): - pass - - @allow_inherit_docstring -class BaseSection(base.sectionable, Section): +class BaseSection(base.sectionable): """ An odML Section """ type = None # id = None From de90f8fef692e79594512d5ace172492de5436e6 Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:22:07 +0200 Subject: [PATCH 03/11] [document] Remove Document class --- odml/doc.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/odml/doc.py b/odml/doc.py index 02c3f8a3..f5bf9305 100644 --- a/odml/doc.py +++ b/odml/doc.py @@ -8,12 +8,8 @@ from .tools.doc_inherit import inherit_docstring, allow_inherit_docstring -class Document(base._baseobj): - pass - - @allow_inherit_docstring -class BaseDocument(base.sectionable, Document): +class BaseDocument(base.sectionable): """ A representation of an odML document in memory. Its odml attributes are: *author*, *date*, *version* and *repository*. From cd3301bc05fad3bb1c7e88be89811f4957cb788c Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:23:26 +0200 Subject: [PATCH 04/11] [base] Remove _baseobj class --- odml/base.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/odml/base.py b/odml/base.py index abe7b5aa..0872bfe1 100644 --- a/odml/base.py +++ b/odml/base.py @@ -9,11 +9,7 @@ from .tools.doc_inherit import allow_inherit_docstring -class _baseobj(object): - pass - - -class baseobject(_baseobj): +class baseobject(object): _format = None def format(self): @@ -40,9 +36,6 @@ def __eq__(self, obj): unique within a document. """ # cannot compare totally different stuff - if not isinstance(obj, _baseobj): - return False - if not isinstance(self, obj.__class__): return False From a1038dc4bca4f7cf24d61702a11317e08786df61 Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:25:22 +0200 Subject: [PATCH 05/11] [base] Rename baseobject to BaseObject --- odml/base.py | 4 ++-- odml/property.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/odml/base.py b/odml/base.py index 0872bfe1..246dac1f 100644 --- a/odml/base.py +++ b/odml/base.py @@ -9,7 +9,7 @@ from .tools.doc_inherit import allow_inherit_docstring -class baseobject(object): +class BaseObject(object): _format = None def format(self): @@ -160,7 +160,7 @@ def append(self, *obj_tuple): @allow_inherit_docstring -class sectionable(baseobject): +class sectionable(BaseObject): def __init__(self): from odml.section import BaseSection self._sections = SmartList(BaseSection) diff --git a/odml/property.py b/odml/property.py index 1d6404d2..2ad4bcc6 100644 --- a/odml/property.py +++ b/odml/property.py @@ -9,7 +9,7 @@ @allow_inherit_docstring -class BaseProperty(base.baseobject): +class BaseProperty(base.BaseObject): """An odML Property""" _format = frmt.Property From f941a3c55db5c577cdbc9e43da2305e437167c3d Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:28:12 +0200 Subject: [PATCH 06/11] [base] Rename sectionable to Sectionable --- odml/base.py | 4 ++-- odml/doc.py | 2 +- odml/section.py | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/odml/base.py b/odml/base.py index 246dac1f..bc0395ce 100644 --- a/odml/base.py +++ b/odml/base.py @@ -160,7 +160,7 @@ def append(self, *obj_tuple): @allow_inherit_docstring -class sectionable(BaseObject): +class Sectionable(BaseObject): def __init__(self): from odml.section import BaseSection self._sections = SmartList(BaseSection) @@ -558,7 +558,7 @@ def clone(self, children=True): to another document """ from odml.section import BaseSection - obj = super(sectionable, self).clone(children) + obj = super(Sectionable, self).clone(children) obj._parent = None obj._sections = SmartList(BaseSection) if children: diff --git a/odml/doc.py b/odml/doc.py index f5bf9305..4d3f5d6a 100644 --- a/odml/doc.py +++ b/odml/doc.py @@ -9,7 +9,7 @@ @allow_inherit_docstring -class BaseDocument(base.sectionable): +class BaseDocument(base.Sectionable): """ A representation of an odML document in memory. Its odml attributes are: *author*, *date*, *version* and *repository*. diff --git a/odml/section.py b/odml/section.py index 6432c324..a30f0fd5 100644 --- a/odml/section.py +++ b/odml/section.py @@ -13,7 +13,7 @@ @allow_inherit_docstring -class BaseSection(base.sectionable): +class BaseSection(base.Sectionable): """ An odML Section """ type = None # id = None @@ -239,9 +239,9 @@ def get_repository(self): return self.parent.get_repository() return super(BaseSection, self).repository - @base.sectionable.repository.setter + @base.Sectionable.repository.setter def repository(self, url): - base.sectionable.repository.fset(self, url) + base.Sectionable.repository.fset(self, url) @inherit_docstring def get_terminology_equivalent(self): From 74a86a6e0478993f1599e19df0face551b1fc68d Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:32:21 +0200 Subject: [PATCH 07/11] [document] Order magic methods --- odml/doc.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/odml/doc.py b/odml/doc.py index 4d3f5d6a..f71217f6 100644 --- a/odml/doc.py +++ b/odml/doc.py @@ -37,6 +37,10 @@ def __init__(self, author=None, date=None, version=None, repository=None, id=Non self._date = None self.date = date + def __repr__(self): + return "" % (self._version, self._author, + len(self._sections)) + @property def id(self): """ @@ -103,11 +107,6 @@ def parent(self): """ The parent of a document is always None. """ return None - def __repr__(self): - return "" % (self._version, - self._author, - len(self._sections)) - def finalize(self): """ This needs to be called after the document is set up from parsing From d3430bb92a86a28fa6cb5580ddd19fbcb3fb86a9 Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:34:31 +0200 Subject: [PATCH 08/11] [base] Order magic methods --- odml/base.py | 58 ++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/odml/base.py b/odml/base.py index bc0395ce..a1109e81 100644 --- a/odml/base.py +++ b/odml/base.py @@ -12,22 +12,11 @@ class BaseObject(object): _format = None - def format(self): - return self._format - - @property - def document(self): - """ Returns the Document object in which this object is contained """ - if self.parent is None: - return None - return self.parent.document - - def get_terminology_equivalent(self): + def __hash__(self): """ - Returns the equivalent object in an terminology (should there be one - defined) or None + Allow all odML objects to be hash-able. """ - return None + return id(self) def __eq__(self, obj): """ @@ -53,6 +42,23 @@ def __ne__(self, obj): """ return not self == obj + def format(self): + return self._format + + @property + def document(self): + """ Returns the Document object in which this object is contained """ + if self.parent is None: + return None + return self.parent.document + + def get_terminology_equivalent(self): + """ + Returns the equivalent object in an terminology (should there be one + defined) or None + """ + return None + def clean(self): """ Stub that doesn't do anything for this class @@ -70,12 +76,6 @@ def clone(self, children=True): obj = copy.copy(self) return obj - def __hash__(self): - """ - Allow all odML objects to be hash-able. - """ - return id(self) - class SmartList(list): @@ -166,6 +166,15 @@ def __init__(self): self._sections = SmartList(BaseSection) self._repository = None + def __getitem__(self, key): + return self._sections[key] + + def __len__(self): + return len(self._sections) + + def __iter__(self): + return self._sections.__iter__() + @property def document(self): """ @@ -242,15 +251,6 @@ def remove(self, section): self._sections.remove(section) section._parent = None - def __getitem__(self, key): - return self._sections[key] - - def __len__(self): - return len(self._sections) - - def __iter__(self): - return self._sections.__iter__() - def itersections(self, recursive=True, yield_self=False, filter_func=lambda x: True, max_depth=None): """ From 063a40fe171e5fd24ed1a410f13c7942f7b7fbdf Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:37:17 +0200 Subject: [PATCH 09/11] [section] Order magic methods --- odml/section.py | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/odml/section.py b/odml/section.py index a30f0fd5..95152238 100644 --- a/odml/section.py +++ b/odml/section.py @@ -55,8 +55,22 @@ def __init__(self, name, type=None, parent=None, self.parent = parent def __repr__(self): - return "
" % (self._name, self.type, - len(self._sections)) + return "
" % (self._name, self.type, len(self._sections)) + + def __iter__(self): + """ + Iterate over each section and property contained in this section + """ + for section in self._sections: + yield section + for prop in self._props: + yield prop + + def __len__(self): + """ + Number of children (sections AND properties) + """ + return len(self._sections) + len(self._props) @property def id(self): @@ -350,21 +364,6 @@ def remove(self, obj): else: raise ValueError("Can only remove sections and properties") - def __iter__(self): - """ - Iterate over each section and property contained in this section - """ - for section in self._sections: - yield section - for prop in self._props: - yield prop - - def __len__(self): - """ - Number of children (sections AND properties) - """ - return len(self._sections) + len(self._props) - def clone(self, children=True): """ Clone this object recursively allowing to copy it independently From 577c900687c0d039cc35835e0225c671264cf6af Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:41:25 +0200 Subject: [PATCH 10/11] [property] Order magic methods --- odml/property.py | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/odml/property.py b/odml/property.py index 2ad4bcc6..2602dea2 100644 --- a/odml/property.py +++ b/odml/property.py @@ -79,6 +79,23 @@ def __init__(self, name, value=None, parent=None, unit=None, self.parent = parent + def __len__(self): + return len(self._value) + + def __getitem__(self, key): + return self._value[key] + + def __setitem__(self, key, item): + if int(key) < 0 or int(key) > self.__len__(): + raise IndexError("odml.Property.__setitem__: key %i invalid for " + "array of length %i" % (int(key), self.__len__())) + try: + val = dtypes.get(item, self.dtype) + self._value[int(key)] = val + except Exception: + raise ValueError("odml.Property.__setitem__: passed value cannot be " + "converted to data type \'%s\'!" % self._dtype) + @property def id(self): return self._id @@ -490,22 +507,6 @@ def get_terminology_equivalent(self): except KeyError: return None - def __len__(self): - return len(self._value) - - def __getitem__(self, key): - return self._value[key] - - def __setitem__(self, key, item): - if int(key) < 0 or int(key) > self.__len__(): - raise IndexError("odml.Property.__setitem__: key %i invalid for array of length %i" - % (int(key), self.__len__())) - try: - val = dtypes.get(item, self.dtype) - self._value[int(key)] = val - except Exception: - raise ValueError("odml.Property.__setitem__: passed value cannot be converted to data type \'%s\'!" % self._dtype) - def extend(self, obj, strict=True): """ Extend the list of values stored in this property by the passed values. Method From f6dd1602906db10e3c1703f70fe5e18ce4281f9f Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 13 Apr 2018 15:47:54 +0200 Subject: [PATCH 11/11] [odmlparser] Remove outdated method The functionality of 'is_valid_attribute' has already previously been migrated to dict_parser. --- odml/tools/odmlparser.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/odml/tools/odmlparser.py b/odml/tools/odmlparser.py index 641a52a9..c7aca64d 100644 --- a/odml/tools/odmlparser.py +++ b/odml/tools/odmlparser.py @@ -102,18 +102,6 @@ def __init__(self, parser='XML'): self.parser = parser self.warnings = [] - def is_valid_attribute(self, attr, fmt): - if attr in fmt.arguments_keys: - return attr - - if fmt.revmap(attr): - return attr - - msg = "Invalid element <%s> inside <%s> tag" % (attr, fmt.__class__.__name__) - print(msg) - self.warnings.append(msg) - return None - def from_file(self, file, doc_format=None): if self.parser == 'XML':