From fd7e1629e4fbaf2c8ca3cbefbaad5af200fb0112 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:18:03 +0100 Subject: [PATCH 01/13] Apply ruff/Pyflakes rule F841 F841 Local variable is assigned to but never used --- xsd-fu/python/generateDS/generateDS.py | 31 ++++++-------------------- 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index 0c0a9bc8e..5578990eb 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -207,8 +207,6 @@ def set_type_constants(nameSpace): nameSpace + 'int', nameSpace + 'short', ) - #ShortType = nameSpace + 'short' - #LongType = nameSpace + 'long' DecimalType = nameSpace + 'decimal' PositiveIntegerType = nameSpace + 'positiveInteger' NegativeIntegerType = nameSpace + 'negativeInteger' @@ -866,7 +864,6 @@ def collectElementNames(self, elementNames): parent.collectElementNames(elementNames) def coerce_attr_types(self): - replacements = [] attrDefs = self.getAttributeDefs() for name in attrDefs: attr = attrDefs[name] @@ -1556,7 +1553,6 @@ def generateExportAttributes(outfile, element, hasAttributes): attrDef = attrDefs[key] name = attrDef.getName() cleanName = mapName(cleanupName(name)) - capName = make_gs_name(cleanName) if attrDef.getUse() == 'optional': s1 = " if self.%s is not None:\n" % (cleanName, ) outfile.write(s1) @@ -1942,9 +1938,7 @@ def generateExportLiteralFn(outfile, prefix, element): count += 1 name = attrDef.getName() cleanName = cleanupName(name) - capName = make_gs_name(cleanName) mappedName = mapName(cleanName) - data_type = attrDef.getData_type() attrType = attrDef.getType() split_type = attrType.split(':') if len(split_type) == 2: @@ -2033,9 +2027,6 @@ def generateExportLiteralFn(outfile, prefix, element): for child in element.getChildren(): name = child.getName() name = cleanupName(name) - #unmappedName = child.getUnmappedCleanName() - #cleanName = cleanupName(name) - #mappedName = mapName(cleanName) if element.isMixed(): s1 = " showIndent(outfile, level)\n" wrt(s1) @@ -2218,10 +2209,8 @@ def generateBuildAttributes(outfile, element, hasAttributes): def generateBuildMixed_1(outfile, prefix, child, headChild, keyword, delayed): global DelayedElements, DelayedElements_subclass - nestedElements = 1 origName = child.getName() name = child.getCleanName() - headName = cleanupName(headChild.getName()) childType = child.getType() #below by kerim # name_type_problem @@ -2441,11 +2430,10 @@ def generateBuildStandard_1(outfile, prefix, child, headChild, ## elif mappedName in ElementDict: ## childType = ElementDict[mappedName].getType() childType = child.getType() - # fix_simpletype base = child.getBase() is_simple_type = (child.getSimpleType() or (base and base in SimpleTypeDict)) - # fix_simpletype + if (attrCount == 0 and (childType in StringType or childType == TokenType or @@ -2601,11 +2589,7 @@ def generateBuildStandard_1(outfile, prefix, child, headChild, wrt(s1) s1 = " nodeName_ == '%s':\n" % origName wrt(s1) - # Is this a simple type? - base = child.getBase() - if (child.getSimpleType() or - (base and base in SimpleTypeDict) - ): + if (is_simple_type): s1 = " obj_ = None\n" wrt(s1) else: @@ -2846,14 +2830,13 @@ def buildCtorArgs_aux(addedArgs, add, element): add(', %s=None' % mappedName) else: add(", %s='%s'" % (mappedName, default, )) - nestedElements = 0 for child in element.getChildren(): cleanName = child.getCleanName() if cleanName in addedArgs: continue addedArgs[cleanName] = 1 default = child.getDefault() - nestedElements = 1 + #nestedElements = 1 if child.getMaxOccurs() > 1: add(', %s=None' % cleanName) else: @@ -2962,7 +2945,7 @@ def generateCtor(outfile, element): member = 1 # Generate member initializers in ctor. member = 0 - nestedElements = 0 + #nestedElements = 0 for child in element.getChildren(): name = cleanupName(child.getCleanName()) logging.debug("Constructor child: %s" % name) @@ -2982,7 +2965,7 @@ def generateCtor(outfile, element): (name, name) outfile.write(s1) member = 1 - nestedElements = 1 + #nestedElements = 1 if childCount == 0 or element.isMixed(): s1 = ' self.valueOf_ = valueOf_\n' outfile.write(s1) @@ -3044,7 +3027,7 @@ def generateGettersAndSetters(outfile, element): s1 = ' def set%s(self, %s): self.%s = %s\n' % \ (capName, name, name, name) outfile.write(s1) - if child.getMaxOccurs() > 1: + if getMaxOccurs > 1: s1 = ' def add%s(self, value): self.%s.append(value)\n' % \ (capName, name) outfile.write(s1) @@ -4294,7 +4277,7 @@ def main(): 'member-specs=', 'version', ]) - except getopt.GetoptError as exp: + except getopt.GetoptError: usage() prefix = '' outFilename = None From cfc961a9d66b9550deef702b713d56ef738baae4 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:18:44 +0100 Subject: [PATCH 02/13] Apply ruff/pycodestyle E401 E401 Multiple imports on one line --- xsd-fu/python/generateDS/generateDS.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index 5578990eb..79625b9da 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -89,7 +89,7 @@ import os.path import time import getopt -import urllib.request, urllib.error, urllib.parse +import urllib import importlib from xml.sax import handler, make_parser import logging From 5bc10c7341f0cc0d9f75a4ca3484094e2e5379e3 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:20:44 +0100 Subject: [PATCH 03/13] Apply ruff/pycodestyle rule E713 E713 Test for membership should be `not in` --- xsd-fu/python/generateDS/generateDS.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index 79625b9da..b9795cbca 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -1027,7 +1027,7 @@ def startElement(self, name, attrs): self.inElement = 1 self.inNonanonymousComplexType = 1 element = XschemaElement(attrs) - if not 'type' in list(attrs.keys()) and not 'ref' in list(attrs.keys()): + if 'type' not in list(attrs.keys()) and 'ref' not in list(attrs.keys()): element.setExplicitDefine(1) if len(self.stack) == 1: element.setTopLevel(1) @@ -2362,7 +2362,7 @@ def generateBuildMixed_1(outfile, prefix, child, headChild, keyword, delayed): else: # Perhaps it's a complexType that is defined right here. # Generate (later) a class for the nested types. - if not delayed and not child in DelayedElements: + if not delayed and child not in DelayedElements: DelayedElements.append(child) DelayedElements_subclass.append(child) s1 = " %s child_.nodeType == Node.ELEMENT_NODE and \\\n" % \ @@ -2581,7 +2581,7 @@ def generateBuildStandard_1(outfile, prefix, child, headChild, if element_base and element_base in ElementDict: derived_child = True #print element.getName(), element_base - if not delayed and not child in DelayedElements: + if not delayed and child not in DelayedElements: DelayedElements.append(child) DelayedElements_subclass.append(child) s1 = " %s child_.nodeType == Node.ELEMENT_NODE and \\\n" % \ From ebdee91f2f34c2fe84700fb8af56e80f4925d1d5 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:25:26 +0100 Subject: [PATCH 04/13] Apply ruff/pycodestyle rule E722 E722 Do not use bare `except` --- xsd-fu/python/generateDS/generateDS.py | 5 +---- xsd-fu/python/generateDS/process_includes.py | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index b9795cbca..afa1035ff 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -512,10 +512,7 @@ def show(self, outfile, level): for attr in self.getAttributeDefs(): key = attr['name'] - try: - value = attr['value'] - except: - value = '' + value = attr.get('value', '') showLevel(outfile, level + 1) outfile.write('key: %s value: %s\n' % \ (key, value)) diff --git a/xsd-fu/python/generateDS/process_includes.py b/xsd-fu/python/generateDS/process_includes.py index 7b34b50ae..b2edd60fe 100755 --- a/xsd-fu/python/generateDS/process_includes.py +++ b/xsd-fu/python/generateDS/process_includes.py @@ -140,7 +140,7 @@ def process_include_tree(root): try: path, msg = urllib.request.urlretrieve(locn) idx = process_path(root, idx, path) - except: + except Exception: msg = "Can't retrieve import file %s. Aborting." % (locn, ) raise OSError(msg) else: @@ -186,7 +186,7 @@ def main(): args = sys.argv[1:] try: opts, args = getopt.getopt(args, 'hfs:', ['help', 'force', 'search=',]) - except: + except getopt.GetoptError: usage() for opt, val in opts: if opt in ('-h', '--help'): From c8276f61d6ccc5efbf660a26d699218c70851680 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 11:33:21 +0100 Subject: [PATCH 05/13] Apply ruff/isort rule I001 I001 Import block is un-sorted or un-formatted --- .../resources/transforms/util/write-transforms.py | 1 - xsd-fu/python/generateDS/__init__.py | 1 + xsd-fu/python/generateDS/generateDS.py | 14 +++++++------- xsd-fu/python/generateDS/process_includes.py | 8 ++++---- xsd-fu/python/ome/modeltools/generateds.py | 9 +++++---- xsd-fu/python/ome/modeltools/model.py | 7 +++---- xsd-fu/python/ome/modeltools/object.py | 7 ++----- xsd-fu/python/ome/modeltools/property.py | 4 +--- xsd-fu/python/util.py | 3 +-- 9 files changed, 24 insertions(+), 30 deletions(-) diff --git a/specification/src/main/resources/transforms/util/write-transforms.py b/specification/src/main/resources/transforms/util/write-transforms.py index 96d9129e2..f6893829e 100755 --- a/specification/src/main/resources/transforms/util/write-transforms.py +++ b/specification/src/main/resources/transforms/util/write-transforms.py @@ -34,7 +34,6 @@ import re from collections import defaultdict - # note the schemas (in reverse order) and the transforms among them schemas = [] diff --git a/xsd-fu/python/generateDS/__init__.py b/xsd-fu/python/generateDS/__init__.py index e08d02831..c81e774b5 100644 --- a/xsd-fu/python/generateDS/__init__.py +++ b/xsd-fu/python/generateDS/__init__.py @@ -4,4 +4,5 @@ from . import generateDS + __all__ = ["generateDS"] diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index afa1035ff..7899dc21f 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -85,17 +85,17 @@ -import sys -import os.path -import time import getopt -import urllib import importlib -from xml.sax import handler, make_parser -import logging import keyword -from io import StringIO +import logging +import os.path +import sys +import time +import urllib from collections import OrderedDict +from io import StringIO +from xml.sax import handler, make_parser # Default logger configuration ## logging.basicConfig(level=logging.DEBUG, diff --git a/xsd-fu/python/generateDS/process_includes.py b/xsd-fu/python/generateDS/process_includes.py index b2edd60fe..bf6b2e407 100755 --- a/xsd-fu/python/generateDS/process_includes.py +++ b/xsd-fu/python/generateDS/process_includes.py @@ -25,13 +25,13 @@ -import sys -import os import getopt +import os import re -import urllib.request -import urllib.parse +import sys import urllib.error +import urllib.parse +import urllib.request # # Try to import lxml first, and if that fails try ElementTree. diff --git a/xsd-fu/python/ome/modeltools/generateds.py b/xsd-fu/python/ome/modeltools/generateds.py index 21dad34ab..c807ec769 100644 --- a/xsd-fu/python/ome/modeltools/generateds.py +++ b/xsd-fu/python/ome/modeltools/generateds.py @@ -23,17 +23,18 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -import os -import sys import keyword import logging +import os +import sys +from xml import sax +from xml.etree import ElementTree # The generateDS package and our generateds module # collide on case-insensitive file systems. import generateDS.generateDS + from ome.modeltools.exceptions import ModelProcessingError -from xml import sax -from xml.etree import ElementTree from ome.modeltools.model import OMEModel XschemaHandler = generateDS.generateDS.XschemaHandler diff --git a/xsd-fu/python/ome/modeltools/model.py b/xsd-fu/python/ome/modeltools/model.py index c62ccd2c4..1e25dbe45 100644 --- a/xsd-fu/python/ome/modeltools/model.py +++ b/xsd-fu/python/ome/modeltools/model.py @@ -30,14 +30,13 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -from collections import OrderedDict import logging +from collections import OrderedDict +from ome.modeltools import config +from ome.modeltools.exceptions import ModelProcessingError from ome.modeltools.object import OMEModelObject from ome.modeltools.property import OMEModelProperty -from ome.modeltools.exceptions import ModelProcessingError - -from ome.modeltools import config class ReferenceDelegate: diff --git a/xsd-fu/python/ome/modeltools/object.py b/xsd-fu/python/ome/modeltools/object.py index 1de171aef..dc0878d81 100644 --- a/xsd-fu/python/ome/modeltools/object.py +++ b/xsd-fu/python/ome/modeltools/object.py @@ -25,17 +25,14 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -from collections import OrderedDict import logging - +from collections import OrderedDict from xml.etree import ElementTree +from ome.modeltools import config, language from ome.modeltools.entity import OMEModelEntity from ome.modeltools.property import OMEModelProperty -from ome.modeltools import config -from ome.modeltools import language - class OMEModelObject(OMEModelEntity): """ diff --git a/xsd-fu/python/ome/modeltools/property.py b/xsd-fu/python/ome/modeltools/property.py index 0b5a06741..ff5717305 100644 --- a/xsd-fu/python/ome/modeltools/property.py +++ b/xsd-fu/python/ome/modeltools/property.py @@ -26,12 +26,10 @@ # POSSIBILITY OF SUCH DAMAGE. import logging - from xml.etree import ElementTree +from ome.modeltools import config, language from ome.modeltools.entity import OMEModelEntity -from ome.modeltools import config -from ome.modeltools import language from ome.modeltools.exceptions import ModelProcessingError diff --git a/xsd-fu/python/util.py b/xsd-fu/python/util.py index dc66085a9..d53825de2 100644 --- a/xsd-fu/python/util.py +++ b/xsd-fu/python/util.py @@ -20,15 +20,14 @@ import codecs -from datetime import timedelta, tzinfo import os import re import textwrap import time +from datetime import timedelta, tzinfo from pytz import UTC - missing = object() __all__ = ['distinct', 'pathmatch', 'relpath', 'wraptext', 'UTC', From a560842b2a0d6d90d96bdadafe1c39b40f7ac828 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:09:16 +0100 Subject: [PATCH 06/13] Apply ruff/flake8-comprehensions rule C405 C405 Unnecessary list literal (rewrite as a set literal) --- xsd-fu/python/ome/modeltools/language.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xsd-fu/python/ome/modeltools/language.py b/xsd-fu/python/ome/modeltools/language.py index c160c61f8..bb1736ece 100644 --- a/xsd-fu/python/ome/modeltools/language.py +++ b/xsd-fu/python/ome/modeltools/language.py @@ -111,8 +111,7 @@ def __init__(self, namespace, templatepath): } # A global set XSD Schema types use as base classes which are primitive - self.primitive_base_types = set([ - "base64Binary"]) + self.primitive_base_types = {"base64Binary"} self.model_unit_map = {} self.model_unit_default = {} From 5a8b2e9037166e38881a240944933d6d9d648a2e Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:12:01 +0100 Subject: [PATCH 07/13] Apply ruff/flake8-bugbear rule B007 B007 Loop control variable not used within loop body --- xsd-fu/python/generateDS/generateDS.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index 7899dc21f..0d3b3cb8c 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -306,8 +306,7 @@ def pplist(lst): # def showLevel(outfile, level): - for idx in range(level): - outfile.write(' ') + outfile.write(' ' * level) class XschemaElementBase: From b20e2a473bb4c5d554c248b7d2ace3c2da67a465 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:21:50 +0100 Subject: [PATCH 08/13] Apply ruff/flake8-return rule RET504 RET504 Unnecessary assignment to before `return` statement --- xsd-fu/python/generateDS/generateDS.py | 31 +++++++++----------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index 0d3b3cb8c..06771634c 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -343,14 +343,12 @@ def getAttributeGroup(self): return self.attributeGroup def setListType(self, listType): self.listType = listType def isListType(self): return self.listType def __str__(self): - s1 = '<"%s" SimpleTypeElement instance at 0x%x>' % \ + return '<"%s" SimpleTypeElement instance at 0x%x>' % \ (self.getName(), id(self)) - return s1 def __repr__(self): - s1 = '<"%s" SimpleTypeElement instance at 0x%x>' % \ + return '<"%s" SimpleTypeElement instance at 0x%x>' % \ (self.getName(), id(self)) - return s1 class XschemaElement(XschemaElementBase): @@ -817,14 +815,12 @@ def replace_attributeGroup_names(self): groupName, )) def __str__(self): - s1 = '<"%s" XschemaElement instance at 0x%x>' % \ + return '<"%s" XschemaElement instance at 0x%x>' % \ (self.getName(), id(self)) - return s1 def __repr__(self): - s1 = '<"%s" XschemaElement instance at 0x%x>' % \ + return '<"%s" XschemaElement instance at 0x%x>' % \ (self.getName(), id(self)) - return s1 def fix_dup_names(self): # Patch-up names that are used for both a child element and an attribute. @@ -2747,8 +2743,7 @@ def buildCtorArgs_multilevel(element): if element.isMixed(): add(', mixedclass_=None') add(', content_=None') - s1 = ''.join(content) - return s1 + return ''.join(content) def buildCtorArgs_multilevel_aux(addedArgs, add, element): @@ -3578,8 +3573,7 @@ def buildCtorParams(element): add(', content_') else: buildCtorParams_aux(add, element) - s1 = ''.join(content) - return s1 + return ''.join(content) def buildCtorParams_aux(add, element): @@ -3598,13 +3592,10 @@ def buildCtorParams_aux(add, element): def get_class_behavior_args(classBehavior): - argList = [] args = classBehavior.getArgs() args = args.getArg() - for arg in args: - argList.append(arg.getName()) - argString = ', '.join(argList) - return argString + argList = [arg.getName() for arg in args] + return ', '.join(argList) # @@ -4123,10 +4114,8 @@ def strip_namespace(val): def escape_string(instring): - s1 = instring - s1 = s1.replace('\\', '\\\\') - s1 = s1.replace("'", "\\'") - return s1 + s1 = instring.replace('\\', '\\\\') + return s1.replace("'", "\\'") ##def process_include(inpath, outpath): From 71782caf707e6f4ac8461224487c0910ffbb1aea Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:29:46 +0100 Subject: [PATCH 09/13] Apply ruff/Pylint rule PLR0402 PLR0402 Use `from ... import ...` in lieu of alias --- xsd-fu/python/generateDS/generateDS.py | 75 +++++++++----------- xsd-fu/python/generateDS/process_includes.py | 19 +++-- xsd-fu/python/ome/modeltools/template.py | 2 +- 3 files changed, 44 insertions(+), 52 deletions(-) diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index 06771634c..70254b1dd 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -667,23 +667,22 @@ def resolve_type(self): type_val = type_val1 else: self.complex = 1 + elif type_val in StringType or \ + type_val == TokenType or \ + type_val == DateTimeType or \ + type_val == DateType or \ + type_val in IntegerType or \ + type_val == DecimalType or \ + type_val == PositiveIntegerType or \ + type_val == NonPositiveIntegerType or \ + type_val == NegativeIntegerType or \ + type_val == NonNegativeIntegerType or \ + type_val == BooleanType or \ + type_val == FloatType or \ + type_val == DoubleType: + pass else: - if type_val in StringType or \ - type_val == TokenType or \ - type_val == DateTimeType or \ - type_val == DateType or \ - type_val in IntegerType or \ - type_val == DecimalType or \ - type_val == PositiveIntegerType or \ - type_val == NonPositiveIntegerType or \ - type_val == NegativeIntegerType or \ - type_val == NonNegativeIntegerType or \ - type_val == BooleanType or \ - type_val == FloatType or \ - type_val == DoubleType: - pass - else: - type_val = StringType[0] + type_val = StringType[0] else: type_val = StringType[0] logging.debug("%s type resolution, resulting type: %s" % \ @@ -1150,11 +1149,10 @@ def startElement(self, name, attrs): if self.inAttribute: if 'base' in attrs: self.lastAttribute.setData_type(attrs['base']) - else: - # If we are in a simpleType, capture the name of - # the restriction base. - if self.inSimpleType and 'base' in list(attrs.keys()): - self.stack[-1].setBase(attrs['base']) + # If we are in a simpleType, capture the name of + # the restriction base. + elif self.inSimpleType and 'base' in list(attrs.keys()): + self.stack[-1].setBase(attrs['base']) self.inRestrictionType = 1 elif name == EnumerationType: if self.inAttribute and 'value' in attrs: @@ -1621,11 +1619,10 @@ def generateExportChildren(outfile, element, hasChildren, namespace): wrt(s1) elif child.getMaxOccurs() > 1: generateExportFn_2(outfile, child, name, namespace, ' ') + elif (child.getOptional()): + generateExportFn_3(outfile, child, name, namespace, '') else: - if (child.getOptional()): - generateExportFn_3(outfile, child, name, namespace, '') - else: - generateExportFn_1(outfile, child, name, namespace, '') + generateExportFn_1(outfile, child, name, namespace, '') ## base = element.getBase() ## if base and base in ElementDict: ## parent = ElementDict[base] @@ -2806,21 +2803,19 @@ def buildCtorArgs_aux(addedArgs, add, element): elif atype == BooleanType: if default is None: add(', %s=None' % mappedName) + elif default in ('false', '0'): + add(', %s=%s' % (mappedName, "False")) else: - if default in ('false', '0'): - add(', %s=%s' % (mappedName, "False")) - else: - add(', %s=%s' % (mappedName, "True")) + add(', %s=%s' % (mappedName, "True")) elif atype == FloatType or atype == DoubleType or atype == DecimalType: if default is None: add(', %s=None' % mappedName) else: add(', %s=%s' % (mappedName, default)) + elif default is None: + add(', %s=None' % mappedName) else: - if default is None: - add(', %s=None' % mappedName) - else: - add(", %s='%s'" % (mappedName, default, )) + add(", %s='%s'" % (mappedName, default, )) for child in element.getChildren(): cleanName = child.getCleanName() if cleanName in addedArgs: @@ -2879,11 +2874,10 @@ def buildCtorArgs_aux(addedArgs, add, element): elif childType == BooleanType: if default is None: add(', %s=None' % cleanName) + elif default in ('false', '0'): + add(', %s=%s' % (cleanName, "False", )) else: - if default in ('false', '0'): - add(', %s=%s' % (cleanName, "False", )) - else: - add(', %s=%s' % (cleanName, "True", )) + add(', %s=%s' % (cleanName, "True", )) elif childType == FloatType or \ childType == DoubleType or \ childType == DecimalType: @@ -2891,11 +2885,10 @@ def buildCtorArgs_aux(addedArgs, add, element): add(', %s=None' % cleanName) else: add(', %s=%s' % (cleanName, default, )) + elif default is None: + add(', %s=None' % cleanName) else: - if default is None: - add(', %s=None' % cleanName) - else: - add(", '%s=%s'" % (cleanName, default, )) + add(", '%s=%s'" % (cleanName, default, )) # end buildCtorArgs_aux diff --git a/xsd-fu/python/generateDS/process_includes.py b/xsd-fu/python/generateDS/process_includes.py index bf6b2e407..73c2f2c2a 100755 --- a/xsd-fu/python/generateDS/process_includes.py +++ b/xsd-fu/python/generateDS/process_includes.py @@ -143,18 +143,17 @@ def process_include_tree(root): except Exception: msg = "Can't retrieve import file %s. Aborting." % (locn, ) raise OSError(msg) + elif os.path.exists(locn): + idx = process_path(root, idx, locn) else: - if os.path.exists(locn): - idx = process_path(root, idx, locn) + for d in DIRPATH: + path = os.path.join(d,locn) + if os.path.exists(path): + idx = process_path(root, idx, path) + break else: - for d in DIRPATH: - path = os.path.join(d,locn) - if os.path.exists(path): - idx = process_path(root, idx, path) - break - else: - msg = "Can't find import file %s. Aborting." % (locn, ) - raise OSError(msg) + msg = "Can't find import file %s. Aborting." % (locn, ) + raise OSError(msg) else: process_include_tree(child) idx += 1 diff --git a/xsd-fu/python/ome/modeltools/template.py b/xsd-fu/python/ome/modeltools/template.py index 5d3f4a0ba..09cfa0015 100644 --- a/xsd-fu/python/ome/modeltools/template.py +++ b/xsd-fu/python/ome/modeltools/template.py @@ -28,7 +28,7 @@ from ome.modeltools import config try: - import mx.DateTime as DateTime + from mx import DateTime def now(): return DateTime.ISO.str(DateTime.now()) From 8051d3121da87a8bbf7e4b141c523f81e4a883d5 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:51:37 +0100 Subject: [PATCH 10/13] Apply ruff/Perflint rule PERF401 PERF401 Use a list comprehension to create a transformed list --- xsd-fu/python/generateDS/generateDS.py | 9 +++++---- xsd-fu/python/ome/modeltools/object.py | 15 +++++++++------ xsd-fu/python/ome/modeltools/property.py | 12 +++++++----- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/xsd-fu/python/generateDS/generateDS.py b/xsd-fu/python/generateDS/generateDS.py index 70254b1dd..43b09cfe5 100755 --- a/xsd-fu/python/generateDS/generateDS.py +++ b/xsd-fu/python/generateDS/generateDS.py @@ -2984,10 +2984,11 @@ def getValidatorBody(stName): infile = open(path, 'r') lines = infile.readlines() infile.close() - lines1 = [] - for line in lines: - if not line.startswith('##'): - lines1.append(line) + lines1 = [ + line + for line in lines + if not line.startswith('##') + ] s1 = ''.join(lines1) retrieved = 1 if not retrieved: diff --git a/xsd-fu/python/ome/modeltools/object.py b/xsd-fu/python/ome/modeltools/object.py index dc0878d81..1dbcb270d 100644 --- a/xsd-fu/python/ome/modeltools/object.py +++ b/xsd-fu/python/ome/modeltools/object.py @@ -249,12 +249,15 @@ def _get_instanceVariables(self): props.append([ self.langBaseType, "value", None, "Element's text data", False]) - for prop in self.properties.values(): - if not prop.isUnitsEnumeration: - props.append([ - prop.instanceVariableType, prop.instanceVariableName, - prop.instanceVariableDefault, prop.instanceVariableComment, - prop.isUnitsEnumeration]) + props.extend( + [ + prop.instanceVariableType, prop.instanceVariableName, + prop.instanceVariableDefault, prop.instanceVariableComment, + prop.isUnitsEnumeration + ] + for prop in self.properties.values() + if not prop.isUnitsEnumeration + ) return props instanceVariables = property( _get_instanceVariables, diff --git a/xsd-fu/python/ome/modeltools/property.py b/xsd-fu/python/ome/modeltools/property.py index ff5717305..0171e8d7b 100644 --- a/xsd-fu/python/ome/modeltools/property.py +++ b/xsd-fu/python/ome/modeltools/property.py @@ -381,12 +381,14 @@ def _get_isReference(self): doc="""Whether or not the property is a reference.""") def _get_concreteClasses(self): - returnList = [] if self.model.opts.lang.hasSubstitutionGroup(self.name): - for o in sorted(self.model.objects.values(), key=lambda x: x.name): - if o.parentName == self.name: - returnList.append(o.name) - return returnList + return [ + o.name + for o in sorted(self.model.objects.values(), key=lambda x: x.name) + if o.parentName == self.name + ] + else: + return [] concreteClasses = property( _get_concreteClasses, doc="""Concrete instance types for an abstract type.""") From 78e44c8205dfd4697b99cc2dbf37a7108531ab38 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:55:38 +0100 Subject: [PATCH 11/13] Apply ruff rule RUF015 RUF015 Prefer `next(iter(parents.keys()))` over single element slice --- xsd-fu/python/ome/modeltools/object.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xsd-fu/python/ome/modeltools/object.py b/xsd-fu/python/ome/modeltools/object.py index 1dbcb270d..76b44aee5 100644 --- a/xsd-fu/python/ome/modeltools/object.py +++ b/xsd-fu/python/ome/modeltools/object.py @@ -302,7 +302,7 @@ def _get_parent(self): parent = None if parents is not None: - parent = self.model.getObjectByName(list(parents.keys())[0]) + parent = self.model.getObjectByName(next(iter(parents.keys()))) return parent From abaf0092a1b5cfc0f41fb93d96a5375b2b220373 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:58:06 +0100 Subject: [PATCH 12/13] Apply ruff rule RUF022 RUF022 `__all__` is not sorted --- xsd-fu/python/util.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xsd-fu/python/util.py b/xsd-fu/python/util.py index d53825de2..186e97820 100644 --- a/xsd-fu/python/util.py +++ b/xsd-fu/python/util.py @@ -30,8 +30,7 @@ missing = object() -__all__ = ['distinct', 'pathmatch', 'relpath', 'wraptext', 'UTC', - 'LOCALTZ'] +__all__ = ['LOCALTZ', 'UTC', 'distinct', 'pathmatch', 'relpath', 'wraptext'] __docformat__ = 'restructuredtext en' From d7587469080bd2544f73dde6f4ec93c5cfd4193e Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:59:01 +0100 Subject: [PATCH 13/13] Apply ruff rule RUF039 RUF039 First argument to `re.split()` is not raw string --- xsd-fu/python/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xsd-fu/python/util.py b/xsd-fu/python/util.py index 186e97820..273a98468 100644 --- a/xsd-fu/python/util.py +++ b/xsd-fu/python/util.py @@ -147,7 +147,7 @@ def pathmatch(pattern, filename): '**': '(?:.+/)*?[^/]+', } buf = [] - for idx, part in enumerate(re.split('([?*]+/?)', pattern)): + for idx, part in enumerate(re.split(r'([?*]+/?)', pattern)): if idx % 2: buf.append(symbols[part]) elif part: