From a64fef50bcf1d4ef20e89d363517fd325917c12f Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Mon, 7 Nov 2022 22:05:55 -0600 Subject: [PATCH] Arch: Remove Py2 code --- src/Mod/Arch/ArchAxis.py | 7 +---- src/Mod/Arch/ArchCommands.py | 28 ++++------------- src/Mod/Arch/exportIFC.py | 56 +++------------------------------ src/Mod/Arch/importIFC.py | 17 ++-------- src/Mod/Arch/importIFCHelper.py | 20 ------------ src/Mod/Arch/importJSON.py | 5 +-- src/Mod/Arch/importSHP.py | 2 -- src/Mod/Arch/importWebGL.py | 5 +-- 8 files changed, 15 insertions(+), 125 deletions(-) diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index 693b731407..78570e41f9 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -533,8 +533,6 @@ class _ViewProviderAxis: tx = coin.SoAsciiText() tx.justification = coin.SoText2.LEFT t = vobj.Object.Labels[i] - if six.PY2 and isinstance(t,six.text_type): - t = t.encode("utf8") tx.string.setValue(t) if hasattr(vobj,"FontSize"): fs = vobj.FontSize.Value @@ -566,10 +564,7 @@ class _ViewProviderAxis: ('C',100),('XC',90),('L',50),('XL',40), ('X',10),('IX',9),('V',5),('IV',4),('I',1)) if hasattr(vobj.Object,"CustomNumber") and vobj.Object.CustomNumber: - if six.PY2: - return vobj.Object.CustomNumber.encode("utf8") - else: - return vobj.Object.CustomNumber + return vobj.Object.CustomNumber elif hasattr(vobj,"NumberingStyle"): if vobj.NumberingStyle == "1,2,3": return str(num+1) diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 8f729bb9e5..8ee1d105f8 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -46,22 +46,6 @@ __url__ = "https://www.freecadweb.org" # module functions ############################################### - -def string_replace(text, pattern, replacement): - """ - if py2 isn't supported anymore calls to this function - should be replaced with: - `text.replace(pattern, replacement)` - for python2 the encoding must be done, as unicode replacement leads to something like this: - ``` - >>> a = u'abc mm ^3' - >>> a.replace(u"^3", u"³") - u'abc mm \xc2\xb3' - ``` - """ - return text.replace(pattern, replacement) - - def getStringList(objects): '''getStringList(objects): returns a string defining a list of objects''' @@ -859,14 +843,14 @@ def survey(callback=False): if o.Object.Shape.Solids: u = FreeCAD.Units.Quantity(o.Object.Shape.Volume,FreeCAD.Units.Volume) t = u.getUserPreferred()[0] - t = string_replace(t, "^3","³") + t = t.replace("^3","³") anno.LabelText = "v " + t FreeCAD.Console.PrintMessage("Object: " + n + ", Element: Whole, Volume: " + utf8_decode(t) + "\n") FreeCAD.SurveyObserver.totalVolume += u.Value elif o.Object.Shape.Faces: u = FreeCAD.Units.Quantity(o.Object.Shape.Area,FreeCAD.Units.Area) t = u.getUserPreferred()[0] - t = string_replace(t, "^2","²") + t = t.replace("^2","²") anno.LabelText = "a " + t FreeCAD.Console.PrintMessage("Object: " + n + ", Element: Whole, Area: " + utf8_decode(t) + "\n") FreeCAD.SurveyObserver.totalArea += u.Value @@ -902,7 +886,7 @@ def survey(callback=False): if "Face" in el: u = FreeCAD.Units.Quantity(e.Area,FreeCAD.Units.Area) t = u.getUserPreferred()[0] - t = string_replace(t, "^2","²") + t = t.replace("^2","²") anno.LabelText = "a " + t FreeCAD.Console.PrintMessage("Object: " + n + ", Element: " + el + ", Area: "+ utf8_decode(t) + "\n") FreeCAD.SurveyObserver.totalArea += u.Value @@ -938,12 +922,12 @@ def survey(callback=False): if FreeCAD.SurveyObserver.totalArea: u = FreeCAD.Units.Quantity(FreeCAD.SurveyObserver.totalArea,FreeCAD.Units.Area) t = u.getUserPreferred()[0] - t = string_replace(t, "^2","²") + t = t.replace("^2","²") msg += " Area: " + t if FreeCAD.SurveyObserver.totalVolume: u = FreeCAD.Units.Quantity(FreeCAD.SurveyObserver.totalVolume,FreeCAD.Units.Volume) t = u.getUserPreferred()[0] - t = string_replace(t, "^3","³") + t = t.replace("^3","³") msg += " Volume: " + t FreeCAD.Console.PrintMessage(msg+"\n") @@ -1049,7 +1033,7 @@ class SurveyTaskPanel: if hasattr(FreeCAD,"SurveyObserver"): u = FreeCAD.Units.Quantity(FreeCAD.SurveyObserver.totalArea,FreeCAD.Units.Area) t = u.getUserPreferred()[0] - t = string_replace(t, "^2","²") + t = t.replace("^2","²") if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch").GetBool("surveyUnits",True): QtGui.QApplication.clipboard().setText(t) else: diff --git a/src/Mod/Arch/exportIFC.py b/src/Mod/Arch/exportIFC.py index 687c06684c..3d6a7afb01 100644 --- a/src/Mod/Arch/exportIFC.py +++ b/src/Mod/Arch/exportIFC.py @@ -47,7 +47,6 @@ import exportIFCStructuralTools from DraftGeomUtils import vec from importIFCHelper import dd2dms -from importIFCHelper import decode from draftutils.messages import _msg, _err if FreeCAD.GuiUp: @@ -253,9 +252,6 @@ def export(exportList, filename, colors=None, preferences=None): templatefilehandle, templatefile = tempfile.mkstemp(suffix=".ifc") of = pyopen(templatefile, "w") - if six.PY2: - template = template.encode("utf8") - of.write(template) of.close() os.close(templatefilehandle) @@ -588,8 +584,6 @@ def export(exportList, filename, colors=None, preferences=None): r2,p2,c2 = getRepresentation(ifcfile,context,o,colors=colors,preferences=preferences) if preferences['DEBUG']: print(" adding ",c2," : ",o.Label) l = o.Label - if six.PY2: - l = l.encode("utf8") prod2 = ifcfile.createIfcBuildingElementProxy( ifcopenshell.guid.new(), history, @@ -625,8 +619,6 @@ def export(exportList, filename, colors=None, preferences=None): r2,p2,c2 = getRepresentation(ifcfile,context,o,subtraction=True,colors=colors,preferences=preferences) if preferences['DEBUG']: print(" subtracting ",c2," : ",o.Label) l = o.Label - if six.PY2: - l = l.encode("utf8") prod2 = ifcfile.createIfcOpeningElement( ifcopenshell.guid.new(), history, @@ -703,15 +695,8 @@ def export(exportList, filename, colors=None, preferences=None): val = sheet.get('D'+str(n)) else: val = '' - if six.PY2 and isinstance(key, six.text_type): - key = key.encode("utf8") - else: - key = str(key) - if six.PY2 and isinstance(tp, six.text_type): - tp = tp.encode("utf8") - else: - tp = str(tp) - #tp = tp.encode("utf8") + key = str(key) + tp = str(tp) if tp in ["IfcLabel","IfcText","IfcIdentifier",'IfcDescriptiveMeasure']: val = val.encode("utf8") elif tp == "IfcBoolean": @@ -782,8 +767,7 @@ def export(exportList, filename, colors=None, preferences=None): val = val.strip('"') #if preferences['DEBUG']: print(" property ",key," : ",val.encode("utf8"), " (", str(tp), ")") if tp in ["IfcLabel","IfcText","IfcIdentifier",'IfcDescriptiveMeasure']: - if six.PY2: - val = val.encode("utf8") + pass elif tp == "IfcBoolean": if val == ".T.": val = True @@ -1276,8 +1260,6 @@ def export(exportList, filename, colors=None, preferences=None): relobjs.append(subproducts[o.Name]) if relobjs: l = m.Label - if six.PY2: - l = l.encode("utf8") mat = ifcfile.createIfcMaterial(l) materials[m.Label] = mat rgb = None @@ -1349,8 +1331,6 @@ def export(exportList, filename, colors=None, preferences=None): pos = ifcbin.createIfcCartesianPoint((l.x,l.y,l.z)) tpl = ifcbin.createIfcAxis2Placement3D(pos,None,None) s = ";".join(anno.LabelText) - if six.PY2: - s = s.encode("utf8") txt = ifcfile.createIfcTextLiteral(s,tpl,"LEFT") reps = [txt] elif Draft.getType(anno) in ["DraftText","Text"]: @@ -1365,8 +1345,6 @@ def export(exportList, filename, colors=None, preferences=None): if anno.ViewObject.Justification == "Right": alg = "RIGHT" s = ";".join(anno.Text) - if six.PY2: - s = s.encode("utf8") txt = ifcfile.createIfcTextLiteral(s,tpl,alg) reps = [txt] elif Draft.getType(anno) in ["Dimension","LinearDimension","AngularDimension"]: @@ -1399,8 +1377,6 @@ def export(exportList, filename, colors=None, preferences=None): xdir = ifcbin.createIfcDirection(tuple(r.multVec(FreeCAD.Vector(1,0,0)))) pos = ifcbin.createIfcCartesianPoint((l.x,l.y,l.z)) tpl = ifcbin.createIfcAxis2Placement3D(pos,zdir,xdir) - if six.PY2: - s = s.encode("utf8") txt = ifcfile.createIfcTextLiteral(vp.string,tpl,"LEFT") reps.append(txt) else: @@ -1425,8 +1401,6 @@ def export(exportList, filename, colors=None, preferences=None): shp = ifcfile.createIfcShapeRepresentation(context,'Annotation','Annotation2D',reps) rep = ifcfile.createIfcProductDefinitionShape(None,None,[shp]) l = anno.Label - if six.PY2: - l = l.encode("utf8") ann = ifcfile.createIfcAnnotation( ifcopenshell.guid.new(), history,l, @@ -1468,8 +1442,6 @@ def export(exportList, filename, colors=None, preferences=None): swallowed.append(annos[o]) if children: name = FreeCAD.ActiveDocument.getObject(g[0]).Label - if six.PY2: - name = name.encode("utf8") grp = ifcfile.createIfcGroup( ifcopenshell.guid.new(), history, @@ -1626,8 +1598,6 @@ def export(exportList, filename, colors=None, preferences=None): if preferences['DEBUG']: print("writing ",filename,"...") - filename = decode(filename) - if filename.lower().endswith("json"): writeJson(filename,ifcfile) else: @@ -1682,8 +1652,7 @@ def getPropertyData(key,value,preferences): if pvalue == "": return pset, pname, ptype, None if ptype in ["IfcLabel","IfcText","IfcIdentifier",'IfcDescriptiveMeasure']: - if six.PY2: - pvalue = pvalue.encode("utf8") + pass elif ptype == "IfcBoolean": if pvalue == ".T.": pvalue = True @@ -1703,8 +1672,6 @@ def getPropertyData(key,value,preferences): try: pvalue = FreeCAD.Units.Quantity(pvalue).Value except Exception: - if six.PY2: - pvalue = pvalue.encode("utf8") if preferences['DEBUG']:print(" warning: unable to export property as numeric value:",pname,pvalue) # print('pset: {}, pname: {}, ptype: {}, pvalue: {}'.format(pset, pname, ptype, pvalue)) @@ -1804,17 +1771,6 @@ def buildAddress(obj,ifcfile): t = obj.City or None r = obj.Region or None c = obj.Country or None - if six.PY2: - if a: - a = a.encode("utf8") - if p: - p = p.encode("utf8") - if t: - t = t.encode("utf8") - if r: - r = r.encode("utf8") - if c: - c = c.encode("utf8") if a or p or t or r or c: addr = ifcfile.createIfcPostalAddress("SITE",'Site Address','',None,[a],None,t,r,p,c) else: @@ -2382,8 +2338,6 @@ def getRepresentation( if hasattr(obj,"Material"): if obj.Material: m = obj.Material.Label - if six.PY2: - m = m.encode("utf8") psa = ifcbin.createIfcPresentationStyleAssignment(m,rgbt[i][0],rgbt[i][1],rgbt[i][2],rgbt[i][3]) surfstyles[key] = psa isi = ifcfile.createIfcStyledItem(shape,[psa],None) @@ -2478,8 +2432,6 @@ def getText(field,obj): field = "Label" if hasattr(obj,field): result = getattr(obj,field) - if six.PY2: - result = result.encode("utf8") return result diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index c5fa69c735..bc08a07b1e 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -166,7 +166,6 @@ def open(filename, skip=[], only=[], root=None): Most of the work is done in the `insert` function. """ docname = os.path.splitext(os.path.basename(filename))[0] - docname = importIFCHelper.decode(docname, utf=True) doc = FreeCAD.newDocument(docname) doc.Label = docname doc = insert(filename, doc.Name, skip, only, root) @@ -251,7 +250,7 @@ def insert(srcfile, docname, skip=[], only=[], root=None, preferences=None): else: if preferences['DEBUG']: _msg("Opening '{}'... ".format(srcfile), end="") - filename = importIFCHelper.decode(srcfile, utf=True) + filename = srcfile filesize = os.path.getsize(filename) * 1E-6 # in megabytes ifcfile = ifcopenshell.open(filename) @@ -397,8 +396,6 @@ def insert(srcfile, docname, skip=[], only=[], root=None, preferences=None): name = str(ptype[3:]) if product.Name: name = product.Name - if six.PY2: - name = name.encode("utf8") if preferences['PREFIX_NUMBERS']: name = "ID" + str(pid) + " " + name obj = None @@ -837,9 +834,6 @@ def insert(srcfile, docname, skip=[], only=[], root=None, preferences=None): if l.is_a("IfcPropertySingleValue"): if preferences['DEBUG']: print("property name",l.Name,type(l.Name)) - if six.PY2: - catname = catname.encode("utf8") - lname = lname.encode("utf8") ifc_spreadsheet.set(str('A'+str(n)), catname) ifc_spreadsheet.set(str('B'+str(n)), lname) if l.NominalValue: @@ -849,10 +843,7 @@ def insert(srcfile, docname, skip=[], only=[], root=None, preferences=None): # print("l.NominalValue.Unit",l.NominalValue.Unit,type(l.NominalValue.Unit)) ifc_spreadsheet.set(str('C'+str(n)), l.NominalValue.is_a()) if l.NominalValue.is_a() in ['IfcLabel','IfcText','IfcIdentifier','IfcDescriptiveMeasure']: - if six.PY2: - ifc_spreadsheet.set(str('D'+str(n)), "'" + str(l.NominalValue.wrappedValue.encode("utf8"))) - else: - ifc_spreadsheet.set(str('D'+str(n)), "'" + str(l.NominalValue.wrappedValue)) + ifc_spreadsheet.set(str('D'+str(n)), "'" + str(l.NominalValue.wrappedValue)) else: ifc_spreadsheet.set(str('D'+str(n)), str(l.NominalValue.wrappedValue)) if hasattr(l.NominalValue,'Unit'): @@ -1016,8 +1007,6 @@ def insert(srcfile, docname, skip=[], only=[], root=None, preferences=None): else: if preferences['DEBUG']: print("no group name specified for entity: #", ifcfile[host].id(), ", entity type is used!") grp_name = ifcfile[host].is_a() + "_" + str(ifcfile[host].id()) - if six.PY2: - grp_name = grp_name.encode("utf8") grp = doc.addObject("App::DocumentObjectGroup",grp_name) grp.Label = grp_name objects[host] = grp @@ -1171,8 +1160,6 @@ def insert(srcfile, docname, skip=[], only=[], root=None, preferences=None): name = "Material" if material.Name: name = material.Name - if six.PY2: - name = name.encode("utf8") # mdict["Name"] = name on duplicate material names in IFC this could result in crash # https://forum.freecadweb.org/viewtopic.php?f=23&t=63260 # thus use "Description" diff --git a/src/Mod/Arch/importIFCHelper.py b/src/Mod/Arch/importIFCHelper.py index 6bcd4c8b6d..d08e26e0b8 100644 --- a/src/Mod/Arch/importIFCHelper.py +++ b/src/Mod/Arch/importIFCHelper.py @@ -43,16 +43,6 @@ DEBUG_prod_repr = False DEBUG_prod_colors = False -def decode(filename, utf=False): - """Turn unicode into strings, only for Python 2.""" - if six.PY2 and isinstance(filename, six.text_type): - # This is a workaround since ifcopenshell 0.6 currently - # can't handle unicode filenames - encoding = "utf8" if utf else sys.getfilesystemencoding() - filename = filename.encode(encoding) - return filename - - def dd2dms(dd): """Convert decimal degrees to degrees, minutes, seconds. @@ -630,20 +620,14 @@ def getIfcProperties(ifcfile, pid, psets, d): for pset in psets.keys(): # print("reading pset: ",pset) psetname = ifcfile[pset].Name - if six.PY2: - psetname = psetname.encode("utf8") for prop in psets[pset]: e = ifcfile[prop] pname = e.Name - if six.PY2: - pname = pname.encode("utf8") if e.is_a("IfcPropertySingleValue"): if e.NominalValue: ptype = e.NominalValue.is_a() if ptype in ['IfcLabel','IfcText','IfcIdentifier','IfcDescriptiveMeasure']: pvalue = e.NominalValue.wrappedValue - if six.PY2: - pvalue = pvalue.encode("utf8") else: pvalue = str(e.NominalValue.wrappedValue) if hasattr(e.NominalValue,'Unit'): @@ -1101,8 +1085,6 @@ def createAnnotation(annotation,doc,ifcscale,preferences): grid_placement = None if annotation.Name: name = annotation.Name - if six.PY2: - name = name.encode("utf8") if annotation.ObjectPlacement: # https://forum.freecadweb.org/viewtopic.php?f=39&t=40027 grid_placement = getPlacement(annotation.ObjectPlacement,scaling=1) @@ -1116,8 +1098,6 @@ def createAnnotation(annotation,doc,ifcscale,preferences): name = "Annotation" if annotation.Name: name = annotation.Name - if six.PY2: - name = name.encode("utf8") if "annotation" not in name.lower(): name = "Annotation " + name if preferences['PREFIX_NUMBERS']: name = "ID" + str(aid) + " " + name diff --git a/src/Mod/Arch/importJSON.py b/src/Mod/Arch/importJSON.py index 5ad1e800ea..7899f2f9e4 100644 --- a/src/Mod/Arch/importJSON.py +++ b/src/Mod/Arch/importJSON.py @@ -49,10 +49,7 @@ def export(exportList, filename): } # Write file - if six.PY2: - outfile = pythonopen(filename, "wb") - else: - outfile = pythonopen(filename, "w") + outfile = pythonopen(filename, "w") json.dump(data, outfile, separators = (',', ':')) outfile.close() diff --git a/src/Mod/Arch/importSHP.py b/src/Mod/Arch/importSHP.py index 4c7fea0252..fea08d4362 100644 --- a/src/Mod/Arch/importSHP.py +++ b/src/Mod/Arch/importSHP.py @@ -24,7 +24,6 @@ from __future__ import print_function import os import FreeCAD -import importIFCHelper translate = FreeCAD.Qt.translate if open.__module__ in ['__builtin__','io']: @@ -35,7 +34,6 @@ def open(filename): """opens a SHP/SHX/DBF file in a new FreeCAD document""" docname = os.path.splitext(os.path.basename(filename))[0] - docname = importIFCHelper.decode(docname,utf=True) doc = FreeCAD.newDocument(docname) doc.Label = docname doc = insert(filename,doc.Name) diff --git a/src/Mod/Arch/importWebGL.py b/src/Mod/Arch/importWebGL.py index 54336f7ea7..a4677592b7 100644 --- a/src/Mod/Arch/importWebGL.py +++ b/src/Mod/Arch/importWebGL.py @@ -864,10 +864,7 @@ def export( exportList, filename, colors = None, camera = None ): html = html.replace('$data', json.dumps(data, separators=(',', ':')) ) # Shape Data - if six.PY2: - outfile = pythonopen(filename, "wb") - else: - outfile = pythonopen(filename, "w") + outfile = pythonopen(filename, "w") outfile.write( html ) outfile.close() FreeCAD.Console.PrintMessage( translate("Arch", "Successfully written") + ' ' + filename + "\n" )