author | usveticic |
Wed, 05 Aug 2020 15:16:03 +0200 | |
branch | svghmi |
changeset 3013 | 0ea6b4f435de |
parent 2524 | c80b0d864475 |
child 2706 | 65f35ac97cd6 |
permissions | -rw-r--r-- |
814 | 1 |
#!/usr/bin/env python |
2 |
# -*- coding: utf-8 -*- |
|
3 |
||
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
4 |
# This file is part of Beremiz, a Integrated Development Environment for |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
5 |
# programming IEC 61131-3 automates supporting plcopen standard and CanFestival. |
814 | 6 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
7 |
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD |
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1629
diff
changeset
|
8 |
# Copyright (C) 2017: Andrey Skvortsov |
814 | 9 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
10 |
# See COPYING file for copyrights details. |
814 | 11 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
12 |
# This program is free software; you can redistribute it and/or |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
13 |
# modify it under the terms of the GNU General Public License |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
14 |
# as published by the Free Software Foundation; either version 2 |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
15 |
# of the License, or (at your option) any later version. |
814 | 16 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
17 |
# This program is distributed in the hope that it will be useful, |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
18 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
19 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
20 |
# GNU General Public License for more details. |
814 | 21 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
22 |
# You should have received a copy of the GNU General Public License |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
23 |
# along with this program; if not, write to the Free Software |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1556
diff
changeset
|
24 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
814 | 25 |
|
1881
091005ec69c4
fix pylint py3k conversion warning: "(no-absolute-import) import missing `from __future__ import absolute_import`"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1878
diff
changeset
|
26 |
|
091005ec69c4
fix pylint py3k conversion warning: "(no-absolute-import) import missing `from __future__ import absolute_import`"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1878
diff
changeset
|
27 |
from __future__ import absolute_import |
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
28 |
from __future__ import division |
1732
94ffe74e6895
clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
29 |
import re |
1832
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
30 |
from collections import OrderedDict |
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
31 |
|
2432
dbc065a2f7a5
python3 support: pylint, W1613 # (xrange-builtin) xrange built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2418
diff
changeset
|
32 |
from six.moves import xrange |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
33 |
from lxml import etree |
1832
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
34 |
|
0f1081928d65
fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1831
diff
changeset
|
35 |
from xmlclass import * |
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1629
diff
changeset
|
36 |
import util.paths as paths |
1331
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
37 |
|
1837
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
38 |
|
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
39 |
#: Dictionary that makes the relation between var names |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
40 |
#: in plcopen and displayed values |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
41 |
|
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
42 |
VarTypes = { |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
43 |
"Local": "localVars", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
44 |
"Temp": "tempVars", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
45 |
"Input": "inputVars", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
46 |
"Output": "outputVars", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
47 |
"InOut": "inOutVars", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
48 |
"External": "externalVars", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
49 |
"Global": "globalVars", |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
50 |
"Access": "accessVars" |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
51 |
} |
814 | 52 |
|
53 |
searchResultVarTypes = { |
|
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
54 |
"inputVars": "var_input", |
814 | 55 |
"outputVars": "var_output", |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
56 |
"inOutVars": "var_inout" |
814 | 57 |
} |
58 |
||
1837
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
59 |
|
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
60 |
#: Define in which order var types must be displayed |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
61 |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
62 |
VarOrder = ["Local", "Temp", "Input", "Output", "InOut", "External", "Global", "Access"] |
814 | 63 |
|
1837
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
64 |
|
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
65 |
#: Define which action qualifier must be associated with a duration |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
66 |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
67 |
QualifierList = OrderedDict([ |
1837
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
68 |
("N", False), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
69 |
("R", False), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
70 |
("S", False), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
71 |
("L", True), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
72 |
("D", True), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
73 |
("P", False), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
74 |
("P0", False), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
75 |
("P1", False), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
76 |
("SD", True), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
77 |
("DS", True), |
c507c363625e
fix pylint warning '(pointless-string-statement) String statement has no effect'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1832
diff
changeset
|
78 |
("SL", True)]) |
814 | 79 |
|
80 |
||
2439
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2437
diff
changeset
|
81 |
FILTER_ADDRESS_MODEL = r"(%%[IQM](?:[XBWDL])?)(%s)((?:\.[0-9]+)*)" |
814 | 82 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
83 |
|
814 | 84 |
def update_address(address, address_model, new_leading): |
85 |
result = address_model.match(address) |
|
86 |
if result is None: |
|
87 |
return address |
|
88 |
groups = result.groups() |
|
89 |
return groups[0] + new_leading + groups[2] |
|
90 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
91 |
|
814 | 92 |
def _init_and_compare(function, v1, v2): |
93 |
if v1 is None: |
|
94 |
return v2 |
|
95 |
if v2 is not None: |
|
96 |
return function(v1, v2) |
|
97 |
return v1 |
|
98 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
99 |
|
1831
56b48961cc68
fix (old-style-class) Old-style class defined error for most parts of
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
100 |
class rect(object): |
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
101 |
""" |
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
102 |
Helper class for bounding_box calculation |
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
103 |
""" |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
104 |
|
814 | 105 |
def __init__(self, x=None, y=None, width=None, height=None): |
106 |
self.x_min = x |
|
107 |
self.x_max = None |
|
108 |
self.y_min = y |
|
109 |
self.y_max = None |
|
110 |
if width is not None and x is not None: |
|
111 |
self.x_max = x + width |
|
112 |
if height is not None and y is not None: |
|
113 |
self.y_max = y + height |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
114 |
|
814 | 115 |
def update(self, x, y): |
116 |
self.x_min = _init_and_compare(min, self.x_min, x) |
|
117 |
self.x_max = _init_and_compare(max, self.x_max, x) |
|
118 |
self.y_min = _init_and_compare(min, self.y_min, y) |
|
119 |
self.y_max = _init_and_compare(max, self.y_max, y) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
120 |
|
814 | 121 |
def union(self, rect): |
122 |
self.x_min = _init_and_compare(min, self.x_min, rect.x_min) |
|
123 |
self.x_max = _init_and_compare(max, self.x_max, rect.x_max) |
|
124 |
self.y_min = _init_and_compare(min, self.y_min, rect.y_min) |
|
125 |
self.y_max = _init_and_compare(max, self.y_max, rect.y_max) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
126 |
|
814 | 127 |
def bounding_box(self): |
128 |
width = height = None |
|
129 |
if self.x_min is not None and self.x_max is not None: |
|
130 |
width = self.x_max - self.x_min |
|
131 |
if self.y_min is not None and self.y_max is not None: |
|
132 |
height = self.y_max - self.y_min |
|
133 |
return self.x_min, self.y_min, width, height |
|
134 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
135 |
|
814 | 136 |
def TextLenInRowColumn(text): |
137 |
if text == "": |
|
138 |
return (0, 0) |
|
139 |
lines = text.split("\n") |
|
140 |
return len(lines) - 1, len(lines[-1]) |
|
141 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
142 |
|
1556
32e9d0ef30dc
fix major bugs in Find and Search in Project functionality.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1534
diff
changeset
|
143 |
def CompilePattern(criteria): |
32e9d0ef30dc
fix major bugs in Find and Search in Project functionality.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1534
diff
changeset
|
144 |
flag = 0 if criteria["case_sensitive"] else re.IGNORECASE |
32e9d0ef30dc
fix major bugs in Find and Search in Project functionality.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1534
diff
changeset
|
145 |
find_pattern = criteria["find_pattern"] |
32e9d0ef30dc
fix major bugs in Find and Search in Project functionality.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1534
diff
changeset
|
146 |
if not criteria["regular_expression"]: |
32e9d0ef30dc
fix major bugs in Find and Search in Project functionality.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1534
diff
changeset
|
147 |
find_pattern = re.escape(find_pattern) |
32e9d0ef30dc
fix major bugs in Find and Search in Project functionality.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1534
diff
changeset
|
148 |
criteria["pattern"] = re.compile(find_pattern, flag) |
32e9d0ef30dc
fix major bugs in Find and Search in Project functionality.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1534
diff
changeset
|
149 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
150 |
|
814 | 151 |
def TestTextElement(text, criteria): |
152 |
lines = text.splitlines() |
|
153 |
test_result = [] |
|
154 |
result = criteria["pattern"].search(text) |
|
155 |
while result is not None: |
|
1967
92796bb8d4fe
fix search in TextViewer objects, search returns only first entry
Surkov Sergey <surkovsv93@gmail.com>
parents:
1881
diff
changeset
|
156 |
prev_pos = result.span()[1] |
814 | 157 |
start = TextLenInRowColumn(text[:result.start()]) |
158 |
end = TextLenInRowColumn(text[:result.end() - 1]) |
|
159 |
test_result.append((start, end, "\n".join(lines[start[0]:end[0] + 1]))) |
|
160 |
result = criteria["pattern"].search(text, result.end()) |
|
1967
92796bb8d4fe
fix search in TextViewer objects, search returns only first entry
Surkov Sergey <surkovsv93@gmail.com>
parents:
1881
diff
changeset
|
161 |
if result is not None and prev_pos == result.end(): |
1695
a63bb4025852
avoid infinite loop in search
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1693
diff
changeset
|
162 |
break |
814 | 163 |
return test_result |
164 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
165 |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
166 |
def TextMatched(str1, str2): |
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
167 |
return str1 and str2 and (str1.upper() == str2.upper()) |
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
168 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
169 |
|
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1629
diff
changeset
|
170 |
PLCOpenParser = GenerateParserFromXSD(paths.AbsNeighbourFile(__file__, "tc6_xml_v201.xsd")) |
1762
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
171 |
|
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
172 |
|
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
173 |
def PLCOpen_XPath(xpath): |
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
174 |
return etree.XPath(xpath, namespaces=PLCOpenParser.NSMAP) |
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
175 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
176 |
|
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
177 |
LOAD_POU_PROJECT_TEMPLATE = """ |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
178 |
<project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" |
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
179 |
xmlns:xhtml="http://www.w3.org/1999/xhtml" |
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
180 |
xmlns:xsd="http://www.w3.org/2001/XMLSchema" |
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
181 |
xmlns="http://www.plcopen.org/xml/tc6_0201"> |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
182 |
<fileHeader companyName="" productName="" productVersion="" |
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
183 |
creationDateTime="1970-01-01T00:00:00"/> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
184 |
<contentHeader name="paste_project"> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
185 |
<coordinateInfo> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
186 |
<fbd><scaling x="0" y="0"/></fbd> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
187 |
<ld><scaling x="0" y="0"/></ld> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
188 |
<sfc><scaling x="0" y="0"/></sfc> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
189 |
</coordinateInfo> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
190 |
</contentHeader> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
191 |
<types> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
192 |
<dataTypes/> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
193 |
<pous>%s</pous> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
194 |
</types> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
195 |
<instances> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
196 |
<configurations/> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
197 |
</instances> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
198 |
</project> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
199 |
""" |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
200 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
201 |
|
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
202 |
def LOAD_POU_INSTANCES_PROJECT_TEMPLATE(body_type): |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
203 |
return LOAD_POU_PROJECT_TEMPLATE % """ |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
204 |
<pou name="paste_pou" pouType="program"> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
205 |
<body> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
206 |
<%(body_type)s>%%s</%(body_type)s> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
207 |
</body> |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
208 |
</pou>""" % locals() |
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
209 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
210 |
|
1680
6db967480b7d
make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1629
diff
changeset
|
211 |
PLCOpen_v1_file = open(paths.AbsNeighbourFile(__file__, "TC6_XML_V10_B.xsd")) |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
212 |
PLCOpen_v1_xml = PLCOpen_v1_file.read() |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
213 |
PLCOpen_v1_file.close() |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
214 |
PLCOpen_v1_xml = PLCOpen_v1_xml.replace( |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1872
diff
changeset
|
215 |
"http://www.plcopen.org/xml/tc6.xsd", |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1872
diff
changeset
|
216 |
"http://www.plcopen.org/xml/tc6_0201") |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
217 |
PLCOpen_v1_xsd = etree.XMLSchema(etree.fromstring(PLCOpen_v1_xml)) |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
218 |
|
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
219 |
# XPath for file compatibility process |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
220 |
ProjectResourcesXPath = PLCOpen_XPath("ppx:instances/ppx:configurations/ppx:configuration/ppx:resource") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
221 |
ResourceInstancesXpath = PLCOpen_XPath("ppx:pouInstance | ppx:task/ppx:pouInstance") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
222 |
TransitionsConditionXPath = PLCOpen_XPath("ppx:types/ppx:pous/ppx:pou/ppx:body/*/ppx:transition/ppx:condition") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
223 |
ConditionConnectionsXPath = PLCOpen_XPath("ppx:connection") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
224 |
ActionBlocksXPath = PLCOpen_XPath("ppx:types/ppx:pous/ppx:pou/ppx:body/*/ppx:actionBlock") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
225 |
ActionBlocksConnectionPointOutXPath = PLCOpen_XPath("ppx:connectionPointOut") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
226 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
227 |
|
1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
228 |
def LoadProjectXML(project_xml): |
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
229 |
project_xml = project_xml.replace( |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
230 |
"http://www.plcopen.org/xml/tc6.xsd", |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
231 |
"http://www.plcopen.org/xml/tc6_0201") |
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
232 |
for cre, repl in [ |
2439
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2437
diff
changeset
|
233 |
(re.compile(r"(?<!<xhtml:p>)(?:<!\[CDATA\[)"), "<xhtml:p><![CDATA["), |
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2437
diff
changeset
|
234 |
(re.compile(r"(?:]]>)(?!</xhtml:p>)"), "]]></xhtml:p>")]: |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
235 |
project_xml = cre.sub(repl, project_xml) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
236 |
|
1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
237 |
try: |
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
238 |
tree, error = PLCOpenParser.LoadXMLString(project_xml) |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
239 |
if error is None: |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
240 |
return tree, None |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
241 |
|
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
242 |
if PLCOpen_v1_xsd.validate(tree): |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
243 |
# Make file compatible with PLCOpen v2 |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
244 |
|
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
245 |
# Update resource interval value |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
246 |
for resource in ProjectResourcesXPath(tree): |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
247 |
for task in resource.gettask(): |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
248 |
interval = task.get("interval") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
249 |
if interval is not None: |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
250 |
result = time_model.match(interval) |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
251 |
if result is not None: |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
252 |
values = result.groups() |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
253 |
time_values = [int(v) for v in values[:2]] |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
254 |
seconds = float(values[2]) |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
255 |
time_values.extend([int(seconds), int((seconds % 1) * 1000000)]) |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
256 |
text = "T#" |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
257 |
if time_values[0] != 0: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
258 |
text += "%dh" % time_values[0] |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
259 |
if time_values[1] != 0: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
260 |
text += "%dm" % time_values[1] |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
261 |
if time_values[2] != 0: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
262 |
text += "%ds" % time_values[2] |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
263 |
if time_values[3] != 0: |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
264 |
if time_values[3] % 1000 != 0: |
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
265 |
text += "%.3fms" % (time_values[3] / 1000) |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
266 |
else: |
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
267 |
text += "%dms" % (time_values[3] // 1000) |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
268 |
task.set("interval", text) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
269 |
|
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
270 |
# Update resources pou instance attributes |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
271 |
for pouInstance in ResourceInstancesXpath(resource): |
1339 | 272 |
type_name = pouInstance.attrib.pop("type") |
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
273 |
if type_name is not None: |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
274 |
pouInstance.set("typeName", type_name) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
275 |
|
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
276 |
# Update transitions condition |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
277 |
for transition_condition in TransitionsConditionXPath(tree): |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
278 |
connections = ConditionConnectionsXPath(transition_condition) |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
279 |
if len(connections) > 0: |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
280 |
connectionPointIn = PLCOpenParser.CreateElement("connectionPointIn", "condition") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
281 |
transition_condition.setcontent(connectionPointIn) |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
282 |
connectionPointIn.setrelPositionXY(0, 0) |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
283 |
for connection in connections: |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
284 |
connectionPointIn.append(connection) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
285 |
|
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
286 |
# Update actionBlocks |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
287 |
for actionBlock in ActionBlocksXPath(tree): |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
288 |
for connectionPointOut in ActionBlocksConnectionPointOutXPath(actionBlock): |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
289 |
actionBlock.remove(connectionPointOut) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
290 |
|
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
291 |
for action in actionBlock.getaction(): |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
292 |
action.set("localId", "0") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
293 |
relPosition = PLCOpenParser.CreateElement("relPosition", "action") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
294 |
relPosition.set("x", "0") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
295 |
relPosition.set("y", "0") |
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
296 |
action.setrelPosition(relPosition) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
297 |
|
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
298 |
return tree, None |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
299 |
|
1334
b0c2c4e1c1f1
Added support for loading PLCOpen v1 files and modify their content to be compatible with PLCOpen v2
Laurent Bessard
parents:
1331
diff
changeset
|
300 |
return tree, error |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
301 |
|
2418
5587c490a070
Use python 3 compatible exception syntax everywhere
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1972
diff
changeset
|
302 |
except Exception as e: |
2447
1c04a50dc7ff
python3 support: pylint, W1645 # (exception-message-attribute) Exception.message removed in Python 3
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2439
diff
changeset
|
303 |
return None, str(e) |
1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
304 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
305 |
|
1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
306 |
def LoadProject(filepath): |
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
307 |
project_file = open(filepath) |
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
308 |
project_xml = project_file.read() |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
309 |
project_file.close() |
1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
310 |
return LoadProjectXML(project_xml) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
311 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
312 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
313 |
project_pou_xpath = PLCOpen_XPath("/ppx:project/ppx:types/ppx:pous/ppx:pou") |
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
314 |
|
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
315 |
|
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
316 |
def LoadPou(xml_string): |
1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
317 |
root, error = LoadProjectXML(LOAD_POU_PROJECT_TEMPLATE % xml_string) |
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
318 |
return project_pou_xpath(root)[0], error |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
319 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
320 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
321 |
project_pou_instances_xpath = { |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
322 |
body_type: PLCOpen_XPath( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
323 |
"/ppx:project/ppx:types/ppx:pous/ppx:pou[@name='paste_pou']/ppx:body/ppx:%s/*" % body_type) |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
324 |
for body_type in ["FBD", "LD", "SFC"]} |
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
325 |
|
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
326 |
|
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
327 |
def LoadPouInstances(xml_string, body_type): |
1330
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
328 |
root, error = LoadProjectXML( |
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
329 |
LOAD_POU_INSTANCES_PROJECT_TEMPLATE(body_type) % xml_string) |
96b242e4c59d
Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents:
1322
diff
changeset
|
330 |
return project_pou_instances_xpath[body_type](root), error |
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
331 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
332 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
333 |
def SaveProject(project, filepath): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
334 |
project_file = open(filepath, 'w') |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
335 |
project_file.write(etree.tostring( |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
336 |
project, |
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
337 |
pretty_print=True, |
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
338 |
xml_declaration=True, |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
339 |
encoding='utf-8')) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
340 |
project_file.close() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
341 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
342 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
343 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
344 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
345 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
346 |
def _updateFormattedTextClass(cls): |
814 | 347 |
def updateElementName(self, old_name, new_name): |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
348 |
text = self.getanyText() |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
349 |
pattern = re.compile('\\b' + old_name + '\\b', re.IGNORECASE) |
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
350 |
text = pattern.sub(new_name, text) |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
351 |
self.setanyText(text) |
814 | 352 |
setattr(cls, "updateElementName", updateElementName) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
353 |
|
814 | 354 |
def updateElementAddress(self, address_model, new_leading): |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
355 |
text = self.getanyText() |
814 | 356 |
startpos = 0 |
357 |
result = address_model.search(text, startpos) |
|
358 |
while result is not None: |
|
359 |
groups = result.groups() |
|
360 |
new_address = groups[0] + new_leading + groups[2] |
|
361 |
text = text[:result.start()] + new_address + text[result.end():] |
|
362 |
startpos = result.start() + len(new_address) |
|
1322
0a9227f743b3
Fixed xmlclass for working with included files, adding support for SimpleType elements and solving ambiguity in extension class when different elements share the same name and parent name
Laurent Bessard
parents:
1318
diff
changeset
|
363 |
result = address_model.search(text, startpos) |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
364 |
self.setanyText(text) |
814 | 365 |
setattr(cls, "updateElementAddress", updateElementAddress) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
366 |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
367 |
def hasblock(self, block_type): |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
368 |
text = self.getanyText() |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
369 |
pattern = re.compile('\\b' + block_type + '\\b', re.IGNORECASE) |
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
370 |
return pattern.search(text) is not None |
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
371 |
setattr(cls, "hasblock", hasblock) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
372 |
|
814 | 373 |
def Search(self, criteria, parent_infos): |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
374 |
return [(tuple(parent_infos),) + result for result in TestTextElement(self.getanyText(), criteria)] |
814 | 375 |
setattr(cls, "Search", Search) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
376 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
377 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
378 |
cls = PLCOpenParser.GetElementClass("formattedText") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
379 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
380 |
_updateFormattedTextClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
381 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
382 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
383 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
384 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
385 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
386 |
def _updateProjectClass(cls): |
814 | 387 |
def setname(self, name): |
388 |
self.contentHeader.setname(name) |
|
389 |
setattr(cls, "setname", setname) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
390 |
|
814 | 391 |
def getname(self): |
392 |
return self.contentHeader.getname() |
|
393 |
setattr(cls, "getname", getname) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
394 |
|
814 | 395 |
def getfileHeader(self): |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
396 |
fileheader_obj = self.fileHeader |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
397 |
return { |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
398 |
attr: value if value is not None else "" |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
399 |
for attr, value in [ |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
400 |
("companyName", fileheader_obj.getcompanyName()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
401 |
("companyURL", fileheader_obj.getcompanyURL()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
402 |
("productName", fileheader_obj.getproductName()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
403 |
("productVersion", fileheader_obj.getproductVersion()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
404 |
("productRelease", fileheader_obj.getproductRelease()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
405 |
("creationDateTime", fileheader_obj.getcreationDateTime()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
406 |
("contentDescription", fileheader_obj.getcontentDescription())] |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
407 |
} |
814 | 408 |
setattr(cls, "getfileHeader", getfileHeader) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
409 |
|
814 | 410 |
def setfileHeader(self, fileheader): |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
411 |
fileheader_obj = self.fileHeader |
1309
85ce56758900
Fixed bug when modifying project properties
Laurent Bessard
parents:
1307
diff
changeset
|
412 |
for attr in ["companyName", "companyURL", "productName", |
85ce56758900
Fixed bug when modifying project properties
Laurent Bessard
parents:
1307
diff
changeset
|
413 |
"productVersion", "productRelease", "creationDateTime", |
85ce56758900
Fixed bug when modifying project properties
Laurent Bessard
parents:
1307
diff
changeset
|
414 |
"contentDescription"]: |
85ce56758900
Fixed bug when modifying project properties
Laurent Bessard
parents:
1307
diff
changeset
|
415 |
value = fileheader.get(attr) |
85ce56758900
Fixed bug when modifying project properties
Laurent Bessard
parents:
1307
diff
changeset
|
416 |
if value is not None: |
85ce56758900
Fixed bug when modifying project properties
Laurent Bessard
parents:
1307
diff
changeset
|
417 |
setattr(fileheader_obj, attr, value) |
814 | 418 |
setattr(cls, "setfileHeader", setfileHeader) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
419 |
|
814 | 420 |
def getcontentHeader(self): |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
421 |
contentheader_obj = self.contentHeader |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
422 |
contentheader = { |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
423 |
attr: value if value is not None else "" |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
424 |
for attr, value in [ |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
425 |
("projectName", contentheader_obj.getname()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
426 |
("projectVersion", contentheader_obj.getversion()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
427 |
("modificationDateTime", contentheader_obj.getmodificationDateTime()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
428 |
("organization", contentheader_obj.getorganization()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
429 |
("authorName", contentheader_obj.getauthor()), |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
430 |
("language", contentheader_obj.getlanguage())] |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
431 |
} |
814 | 432 |
contentheader["pageSize"] = self.contentHeader.getpageSize() |
433 |
contentheader["scaling"] = self.contentHeader.getscaling() |
|
434 |
return contentheader |
|
435 |
setattr(cls, "getcontentHeader", getcontentHeader) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
436 |
|
814 | 437 |
def setcontentHeader(self, contentheader): |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
438 |
contentheader_obj = self.contentHeader |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
439 |
for attr, value in contentheader.iteritems(): |
1313
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1310
diff
changeset
|
440 |
func = {"projectName": contentheader_obj.setname, |
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1310
diff
changeset
|
441 |
"projectVersion": contentheader_obj.setversion, |
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1310
diff
changeset
|
442 |
"authorName": contentheader_obj.setauthor, |
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1310
diff
changeset
|
443 |
"pageSize": lambda v: contentheader_obj.setpageSize(*v), |
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1310
diff
changeset
|
444 |
"scaling": contentheader_obj.setscaling}.get(attr) |
1972
38e912c8bd31
fix bug with indelible values in some 'optional' fields in project properties panel
Surkov Sergey <surkovsv93@gmail.com>
parents:
1967
diff
changeset
|
445 |
if func is not None and value is not None: |
1313
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1310
diff
changeset
|
446 |
func(value) |
1309
85ce56758900
Fixed bug when modifying project properties
Laurent Bessard
parents:
1307
diff
changeset
|
447 |
elif attr in ["modificationDateTime", "organization", "language"]: |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
448 |
setattr(contentheader_obj, attr, value) |
814 | 449 |
setattr(cls, "setcontentHeader", setcontentHeader) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
450 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
451 |
def gettypeElementFunc(element_type): |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
452 |
elements_xpath = PLCOpen_XPath( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
453 |
"ppx:types/ppx:%(element_type)ss/ppx:%(element_type)s[@name=$name]" % locals()) |
1750
acf02488f37f
clean-up: fix PEP8 E306 expected 1 blank line before a nested definition, found X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
454 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
455 |
def gettypeElement(self, name): |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
456 |
elements = elements_xpath(self, name=name) |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
457 |
if len(elements) == 1: |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
458 |
return elements[0] |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
459 |
return None |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
460 |
return gettypeElement |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
461 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
462 |
datatypes_xpath = PLCOpen_XPath("ppx:types/ppx:dataTypes/ppx:dataType") |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
463 |
filtered_datatypes_xpath = PLCOpen_XPath( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
464 |
"ppx:types/ppx:dataTypes/ppx:dataType[@name!=$exclude]") |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
465 |
|
1302
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
466 |
def getdataTypes(self, exclude=None): |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
467 |
if exclude is not None: |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
468 |
return filtered_datatypes_xpath(self, exclude=exclude) |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
469 |
return datatypes_xpath(self) |
814 | 470 |
setattr(cls, "getdataTypes", getdataTypes) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
471 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
472 |
setattr(cls, "getdataType", gettypeElementFunc("dataType")) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
473 |
|
814 | 474 |
def appenddataType(self, name): |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
475 |
if self.getdataType(name) is not None: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
476 |
raise ValueError("\"%s\" Data Type already exists !!!" % name) |
814 | 477 |
self.types.appenddataTypeElement(name) |
478 |
setattr(cls, "appenddataType", appenddataType) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
479 |
|
814 | 480 |
def insertdataType(self, index, datatype): |
481 |
self.types.insertdataTypeElement(index, datatype) |
|
482 |
setattr(cls, "insertdataType", insertdataType) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
483 |
|
814 | 484 |
def removedataType(self, name): |
485 |
self.types.removedataTypeElement(name) |
|
486 |
setattr(cls, "removedataType", removedataType) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
487 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
488 |
def getpous(self, exclude=None, filter=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
489 |
filter = [] if filter is None else filter |
1302
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
490 |
return self.xpath( |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
491 |
"ppx:types/ppx:pous/ppx:pou%s%s" % |
1777
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
492 |
(("[@name!='%s']" % exclude) if exclude is not None else '', |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
493 |
("[%s]" % " or ".join( |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
494 |
map(lambda x: "@pouType='%s'" % x, filter))) |
c46ec818bdd7
clean-up: fix PEP8 E131 continuation line unaligned for hanging indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1768
diff
changeset
|
495 |
if len(filter) > 0 else ""), |
1302
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
496 |
namespaces=PLCOpenParser.NSMAP) |
814 | 497 |
setattr(cls, "getpous", getpous) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
498 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
499 |
setattr(cls, "getpou", gettypeElementFunc("pou")) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
500 |
|
814 | 501 |
def appendpou(self, name, pou_type, body_type): |
502 |
self.types.appendpouElement(name, pou_type, body_type) |
|
503 |
setattr(cls, "appendpou", appendpou) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
504 |
|
814 | 505 |
def insertpou(self, index, pou): |
506 |
self.types.insertpouElement(index, pou) |
|
507 |
setattr(cls, "insertpou", insertpou) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
508 |
|
814 | 509 |
def removepou(self, name): |
510 |
self.types.removepouElement(name) |
|
511 |
setattr(cls, "removepou", removepou) |
|
512 |
||
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
513 |
configurations_xpath = PLCOpen_XPath( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
514 |
"ppx:instances/ppx:configurations/ppx:configuration") |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
515 |
|
814 | 516 |
def getconfigurations(self): |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
517 |
return configurations_xpath(self) |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
518 |
setattr(cls, "getconfigurations", getconfigurations) |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
519 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
520 |
configuration_xpath = PLCOpen_XPath( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
521 |
"ppx:instances/ppx:configurations/ppx:configuration[@name=$name]") |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
522 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
523 |
def getconfiguration(self, name): |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
524 |
configurations = configuration_xpath(self, name=name) |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
525 |
if len(configurations) == 1: |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
526 |
return configurations[0] |
814 | 527 |
return None |
528 |
setattr(cls, "getconfiguration", getconfiguration) |
|
529 |
||
530 |
def addconfiguration(self, name): |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
531 |
if self.getconfiguration(name) is not None: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
532 |
raise ValueError(_("\"%s\" configuration already exists !!!") % name) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
533 |
new_configuration = PLCOpenParser.CreateElement("configuration", "configurations") |
814 | 534 |
new_configuration.setname(name) |
535 |
self.instances.configurations.appendconfiguration(new_configuration) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
536 |
setattr(cls, "addconfiguration", addconfiguration) |
814 | 537 |
|
538 |
def removeconfiguration(self, name): |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
539 |
configuration = self.getconfiguration(name) |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
540 |
if configuration is None: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
541 |
raise ValueError(_("\"%s\" configuration doesn't exist !!!") % name) |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
542 |
self.instances.configurations.remove(configuration) |
814 | 543 |
setattr(cls, "removeconfiguration", removeconfiguration) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
544 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
545 |
resources_xpath = PLCOpen_XPath( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
546 |
"ppx:instances/ppx:configurations/ppx:configuration[@name=$configname]/ppx:resource[@name=$name]") |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
547 |
|
814 | 548 |
def getconfigurationResource(self, config_name, name): |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
549 |
resources = resources_xpath(self, configname=config_name, name=name) |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
550 |
if len(resources) == 1: |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
551 |
return resources[0] |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
552 |
return None |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
553 |
setattr(cls, "getconfigurationResource", getconfigurationResource) |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
554 |
|
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
555 |
def addconfigurationResource(self, config_name, name): |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
556 |
if self.getconfigurationResource(config_name, name) is not None: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
557 |
raise ValueError( |
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
558 |
_("\"{a1}\" resource already exists in \"{a2}\" configuration !!!"). |
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
559 |
format(a1=name, a2=config_name)) |
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
560 |
|
814 | 561 |
configuration = self.getconfiguration(config_name) |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
562 |
if configuration is not None: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
563 |
new_resource = PLCOpenParser.CreateElement("resource", "configuration") |
814 | 564 |
new_resource.setname(name) |
565 |
configuration.appendresource(new_resource) |
|
566 |
setattr(cls, "addconfigurationResource", addconfigurationResource) |
|
567 |
||
568 |
def removeconfigurationResource(self, config_name, name): |
|
569 |
configuration = self.getconfiguration(config_name) |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
570 |
found = False |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
571 |
if configuration is not None: |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
572 |
resource = self.getconfigurationResource(config_name, name) |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
573 |
if resource is not None: |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
574 |
configuration.remove(resource) |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
575 |
found = True |
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
576 |
if not found: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
577 |
raise ValueError( |
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
578 |
_("\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"). |
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
579 |
format(a1=name, a2=config_name)) |
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
580 |
|
814 | 581 |
setattr(cls, "removeconfigurationResource", removeconfigurationResource) |
582 |
||
583 |
def updateElementName(self, old_name, new_name): |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
584 |
for datatype in self.getdataTypes(): |
814 | 585 |
datatype.updateElementName(old_name, new_name) |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
586 |
for pou in self.getpous(): |
814 | 587 |
pou.updateElementName(old_name, new_name) |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
588 |
for configuration in self.getconfigurations(): |
814 | 589 |
configuration.updateElementName(old_name, new_name) |
590 |
setattr(cls, "updateElementName", updateElementName) |
|
591 |
||
592 |
def updateElementAddress(self, old_leading, new_leading): |
|
593 |
address_model = re.compile(FILTER_ADDRESS_MODEL % old_leading) |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
594 |
for pou in self.getpous(): |
814 | 595 |
pou.updateElementAddress(address_model, new_leading) |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
596 |
for configuration in self.getconfigurations(): |
814 | 597 |
configuration.updateElementAddress(address_model, new_leading) |
598 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
599 |
||
600 |
def removeVariableByAddress(self, address): |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
601 |
for pou in self.getpous(): |
814 | 602 |
pou.removeVariableByAddress(address) |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
603 |
for configuration in self.getconfigurations(): |
814 | 604 |
configuration.removeVariableByAddress(address) |
605 |
setattr(cls, "removeVariableByAddress", removeVariableByAddress) |
|
606 |
||
607 |
def removeVariableByFilter(self, leading): |
|
608 |
address_model = re.compile(FILTER_ADDRESS_MODEL % leading) |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
609 |
for pou in self.getpous(): |
814 | 610 |
pou.removeVariableByFilter(address_model) |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
611 |
for configuration in self.getconfigurations(): |
814 | 612 |
configuration.removeVariableByFilter(address_model) |
613 |
setattr(cls, "removeVariableByFilter", removeVariableByFilter) |
|
614 |
||
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
615 |
enumerated_values_xpath = PLCOpen_XPath( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
616 |
"ppx:types/ppx:dataTypes/ppx:dataType/ppx:baseType/ppx:enum/ppx:values/ppx:value") |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
617 |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
618 |
def GetEnumeratedDataTypeValues(self): |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
619 |
return [value.getname() for value in enumerated_values_xpath(self)] |
814 | 620 |
setattr(cls, "GetEnumeratedDataTypeValues", GetEnumeratedDataTypeValues) |
621 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
622 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
623 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 624 |
result = self.types.Search(criteria, parent_infos) |
625 |
for configuration in self.instances.configurations.getconfiguration(): |
|
626 |
result.extend(configuration.Search(criteria, parent_infos)) |
|
627 |
return result |
|
628 |
setattr(cls, "Search", Search) |
|
629 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
630 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
631 |
cls = PLCOpenParser.GetElementClass("project") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
632 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
633 |
_updateProjectClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
634 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
635 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
636 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
637 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
638 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
639 |
def _updateContentHeaderProjectClass(cls): |
814 | 640 |
def setpageSize(self, width, height): |
641 |
self.coordinateInfo.setpageSize(width, height) |
|
642 |
setattr(cls, "setpageSize", setpageSize) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
643 |
|
814 | 644 |
def getpageSize(self): |
645 |
return self.coordinateInfo.getpageSize() |
|
646 |
setattr(cls, "getpageSize", getpageSize) |
|
647 |
||
648 |
def setscaling(self, scaling): |
|
649 |
for language, (x, y) in scaling.items(): |
|
650 |
self.coordinateInfo.setscaling(language, x, y) |
|
651 |
setattr(cls, "setscaling", setscaling) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
652 |
|
814 | 653 |
def getscaling(self): |
654 |
scaling = {} |
|
655 |
scaling["FBD"] = self.coordinateInfo.getscaling("FBD") |
|
656 |
scaling["LD"] = self.coordinateInfo.getscaling("LD") |
|
657 |
scaling["SFC"] = self.coordinateInfo.getscaling("SFC") |
|
658 |
return scaling |
|
659 |
setattr(cls, "getscaling", getscaling) |
|
660 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
661 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
662 |
cls = PLCOpenParser.GetElementClass("contentHeader", "project") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
663 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
664 |
_updateContentHeaderProjectClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
665 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
666 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
667 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
668 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
669 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
670 |
def _updateCoordinateInfoContentHeaderClass(cls): |
814 | 671 |
def setpageSize(self, width, height): |
672 |
if width == 0 and height == 0: |
|
673 |
self.deletepageSize() |
|
674 |
else: |
|
675 |
if self.pageSize is None: |
|
676 |
self.addpageSize() |
|
677 |
self.pageSize.setx(width) |
|
678 |
self.pageSize.sety(height) |
|
679 |
setattr(cls, "setpageSize", setpageSize) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
680 |
|
814 | 681 |
def getpageSize(self): |
682 |
if self.pageSize is not None: |
|
683 |
return self.pageSize.getx(), self.pageSize.gety() |
|
684 |
return 0, 0 |
|
685 |
setattr(cls, "getpageSize", getpageSize) |
|
686 |
||
687 |
def setscaling(self, language, x, y): |
|
688 |
if language == "FBD": |
|
689 |
self.fbd.scaling.setx(x) |
|
690 |
self.fbd.scaling.sety(y) |
|
691 |
elif language == "LD": |
|
692 |
self.ld.scaling.setx(x) |
|
693 |
self.ld.scaling.sety(y) |
|
694 |
elif language == "SFC": |
|
695 |
self.sfc.scaling.setx(x) |
|
696 |
self.sfc.scaling.sety(y) |
|
697 |
setattr(cls, "setscaling", setscaling) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
698 |
|
814 | 699 |
def getscaling(self, language): |
700 |
if language == "FBD": |
|
701 |
return self.fbd.scaling.getx(), self.fbd.scaling.gety() |
|
702 |
elif language == "LD": |
|
703 |
return self.ld.scaling.getx(), self.ld.scaling.gety() |
|
704 |
elif language == "SFC": |
|
705 |
return self.sfc.scaling.getx(), self.sfc.scaling.gety() |
|
706 |
return 0, 0 |
|
707 |
setattr(cls, "getscaling", getscaling) |
|
708 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
709 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
710 |
cls = PLCOpenParser.GetElementClass("coordinateInfo", "contentHeader") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
711 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
712 |
_updateCoordinateInfoContentHeaderClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
713 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
714 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
715 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
716 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
717 |
|
814 | 718 |
def _Search(attributes, criteria, parent_infos): |
719 |
search_result = [] |
|
720 |
for attr, value in attributes: |
|
721 |
if value is not None: |
|
722 |
search_result.extend([(tuple(parent_infos + [attr]),) + result for result in TestTextElement(value, criteria)]) |
|
723 |
return search_result |
|
724 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
725 |
|
814 | 726 |
def _updateConfigurationResourceElementName(self, old_name, new_name): |
727 |
for varlist in self.getglobalVars(): |
|
728 |
for var in varlist.getvariable(): |
|
729 |
var_address = var.getaddress() |
|
730 |
if var_address is not None: |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
731 |
if TextMatched(var_address, old_name): |
814 | 732 |
var.setaddress(new_name) |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
733 |
if TextMatched(var.getname(), old_name): |
814 | 734 |
var.setname(new_name) |
735 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
736 |
|
814 | 737 |
def _updateConfigurationResourceElementAddress(self, address_model, new_leading): |
738 |
for varlist in self.getglobalVars(): |
|
739 |
for var in varlist.getvariable(): |
|
740 |
var_address = var.getaddress() |
|
741 |
if var_address is not None: |
|
742 |
var.setaddress(update_address(var_address, address_model, new_leading)) |
|
743 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
744 |
|
814 | 745 |
def _removeConfigurationResourceVariableByAddress(self, address): |
746 |
for varlist in self.getglobalVars(): |
|
747 |
variables = varlist.getvariable() |
|
748 |
for i in xrange(len(variables)-1, -1, -1): |
|
749 |
if variables[i].getaddress() == address: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
750 |
variables.remove(variables[i]) |
814 | 751 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
752 |
|
814 | 753 |
def _removeConfigurationResourceVariableByFilter(self, address_model): |
754 |
for varlist in self.getglobalVars(): |
|
755 |
variables = varlist.getvariable() |
|
756 |
for i in xrange(len(variables)-1, -1, -1): |
|
757 |
var_address = variables[i].getaddress() |
|
758 |
if var_address is not None: |
|
759 |
result = address_model.match(var_address) |
|
760 |
if result is not None: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
761 |
variables.remove(variables[i]) |
814 | 762 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
763 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
764 |
def _SearchInConfigurationResource(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
765 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 766 |
search_result = _Search([("name", self.getname())], criteria, parent_infos) |
767 |
var_number = 0 |
|
768 |
for varlist in self.getglobalVars(): |
|
769 |
variable_type = searchResultVarTypes.get("globalVars", "var_local") |
|
770 |
variables = varlist.getvariable() |
|
771 |
for modifier, has_modifier in [("constant", varlist.getconstant()), |
|
772 |
("retain", varlist.getretain()), |
|
773 |
("non_retain", varlist.getnonretain())]: |
|
774 |
if has_modifier: |
|
775 |
for result in TestTextElement(modifier, criteria): |
|
776 |
search_result.append((tuple(parent_infos + [variable_type, (var_number, var_number + len(variables)), modifier]),) + result) |
|
777 |
break |
|
778 |
for variable in variables: |
|
779 |
search_result.extend(variable.Search(criteria, parent_infos + [variable_type, var_number])) |
|
780 |
var_number += 1 |
|
781 |
return search_result |
|
782 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
783 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
784 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
785 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
786 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
787 |
def _updateConfigurationConfigurationsClass(cls): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
788 |
def addglobalVar(self, var_type, name, location="", description=""): |
1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
789 |
globalvars = self.getglobalVars() |
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
790 |
if len(globalvars) == 0: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
791 |
globalvars.append(PLCOpenParser.CreateElement("varList")) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
792 |
var = PLCOpenParser.CreateElement("variable", "varListPlain") |
1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
793 |
var.setname(name) |
1313
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1310
diff
changeset
|
794 |
var.settype(var_type) |
1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
795 |
if location != "": |
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
796 |
var.setaddress(location) |
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
797 |
if description != "": |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
798 |
ft = PLCOpenParser.CreateElement("documentation", "variable") |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
799 |
ft.setanyText(description) |
1171
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
800 |
var.setdocumentation(ft) |
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
801 |
globalvars[-1].appendvariable(var) |
a506e4de8f84
Add support for Drag'n dropping located variables to function block creating global located variable in configuration and external variable in function block
Laurent Bessard
parents:
1142
diff
changeset
|
802 |
setattr(cls, "addglobalVar", addglobalVar) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
803 |
|
814 | 804 |
def updateElementName(self, old_name, new_name): |
805 |
_updateConfigurationResourceElementName(self, old_name, new_name) |
|
806 |
for resource in self.getresource(): |
|
807 |
resource.updateElementName(old_name, new_name) |
|
808 |
setattr(cls, "updateElementName", updateElementName) |
|
809 |
||
810 |
def updateElementAddress(self, address_model, new_leading): |
|
811 |
_updateConfigurationResourceElementAddress(self, address_model, new_leading) |
|
812 |
for resource in self.getresource(): |
|
813 |
resource.updateElementAddress(address_model, new_leading) |
|
814 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
815 |
||
816 |
setattr(cls, "removeVariableByAddress", _removeConfigurationResourceVariableByAddress) |
|
817 |
setattr(cls, "removeVariableByFilter", _removeConfigurationResourceVariableByFilter) |
|
818 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
819 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
820 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 821 |
search_result = [] |
822 |
parent_infos = parent_infos + ["C::%s" % self.getname()] |
|
823 |
filter = criteria["filter"] |
|
824 |
if filter == "all" or "configuration" in filter: |
|
825 |
search_result = _SearchInConfigurationResource(self, criteria, parent_infos) |
|
826 |
for resource in self.getresource(): |
|
827 |
search_result.extend(resource.Search(criteria, parent_infos)) |
|
828 |
return search_result |
|
829 |
setattr(cls, "Search", Search) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
830 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
831 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
832 |
cls = PLCOpenParser.GetElementClass("configuration", "configurations") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
833 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
834 |
_updateConfigurationConfigurationsClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
835 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
836 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
837 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
838 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
839 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
840 |
def _updateResourceConfigurationClass(cls): |
814 | 841 |
def updateElementName(self, old_name, new_name): |
842 |
_updateConfigurationResourceElementName(self, old_name, new_name) |
|
843 |
for instance in self.getpouInstance(): |
|
844 |
instance.updateElementName(old_name, new_name) |
|
845 |
for task in self.gettask(): |
|
846 |
task.updateElementName(old_name, new_name) |
|
847 |
setattr(cls, "updateElementName", updateElementName) |
|
848 |
||
849 |
def updateElementAddress(self, address_model, new_leading): |
|
850 |
_updateConfigurationResourceElementAddress(self, address_model, new_leading) |
|
851 |
for task in self.gettask(): |
|
852 |
task.updateElementAddress(address_model, new_leading) |
|
853 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
854 |
||
855 |
setattr(cls, "removeVariableByAddress", _removeConfigurationResourceVariableByAddress) |
|
856 |
setattr(cls, "removeVariableByFilter", _removeConfigurationResourceVariableByFilter) |
|
857 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
858 |
def Search(self, criteria, parent_infos=None): |
2524
c80b0d864475
WIP adding searching capabilities in python files. was done :
Edouard Tisserant
parents:
2450
diff
changeset
|
859 |
# FIXME : two next lines are incompatible [][-1] raises exception ! |
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
860 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 861 |
parent_infos = parent_infos[:-1] + ["R::%s::%s" % (parent_infos[-1].split("::")[1], self.getname())] |
862 |
search_result = _SearchInConfigurationResource(self, criteria, parent_infos) |
|
863 |
task_number = 0 |
|
864 |
instance_number = 0 |
|
865 |
for task in self.gettask(): |
|
866 |
results = TestTextElement(task.getname(), criteria) |
|
867 |
for result in results: |
|
868 |
search_result.append((tuple(parent_infos + ["task", task_number, "name"]),) + result) |
|
869 |
search_result.extend(task.Search(criteria, parent_infos + ["task", task_number])) |
|
870 |
task_number += 1 |
|
871 |
for instance in task.getpouInstance(): |
|
872 |
search_result.extend(task.Search(criteria, parent_infos + ["instance", instance_number])) |
|
873 |
for result in results: |
|
874 |
search_result.append((tuple(parent_infos + ["instance", instance_number, "task"]),) + result) |
|
875 |
instance_number += 1 |
|
876 |
for instance in self.getpouInstance(): |
|
877 |
search_result.extend(instance.Search(criteria, parent_infos + ["instance", instance_number])) |
|
878 |
instance_number += 1 |
|
879 |
return search_result |
|
880 |
setattr(cls, "Search", Search) |
|
881 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
882 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
883 |
cls = PLCOpenParser.GetElementClass("resource", "configuration") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
884 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
885 |
_updateResourceConfigurationClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
886 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
887 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
888 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
889 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
890 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
891 |
def _updateTaskResourceClass(cls): |
814 | 892 |
def updateElementName(self, old_name, new_name): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
893 |
if TextMatched(self.single, old_name): |
814 | 894 |
self.single = new_name |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
895 |
if TextMatched(self.interval, old_name): |
814 | 896 |
self.interval = new_name |
897 |
for instance in self.getpouInstance(): |
|
898 |
instance.updateElementName(old_name, new_name) |
|
899 |
setattr(cls, "updateElementName", updateElementName) |
|
900 |
||
901 |
def updateElementAddress(self, address_model, new_leading): |
|
902 |
if self.single is not None: |
|
903 |
self.single = update_address(self.single, address_model, new_leading) |
|
904 |
if self.interval is not None: |
|
905 |
self.interval = update_address(self.interval, address_model, new_leading) |
|
906 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
907 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
908 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
909 |
parent_infos = [] if parent_infos is None else parent_infos |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
910 |
return _Search([("single", self.getsingle()), |
814 | 911 |
("interval", self.getinterval()), |
912 |
("priority", str(self.getpriority()))], |
|
913 |
criteria, parent_infos) |
|
914 |
setattr(cls, "Search", Search) |
|
915 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
916 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
917 |
cls = PLCOpenParser.GetElementClass("task", "resource") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
918 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
919 |
_updateTaskResourceClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
920 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
921 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
922 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
923 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
924 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
925 |
def _updatePouInstanceClass(cls): |
814 | 926 |
def updateElementName(self, old_name, new_name): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
927 |
if TextMatched(self.typeName, old_name): |
814 | 928 |
self.typeName = new_name |
929 |
setattr(cls, "updateElementName", updateElementName) |
|
930 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
931 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
932 |
parent_infos = [] if parent_infos is None else parent_infos |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
933 |
return _Search([("name", self.getname()), |
814 | 934 |
("type", self.gettypeName())], |
935 |
criteria, parent_infos) |
|
936 |
setattr(cls, "Search", Search) |
|
937 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
938 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
939 |
cls = PLCOpenParser.GetElementClass("pouInstance") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
940 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
941 |
_updatePouInstanceClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
942 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
943 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
944 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
945 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
946 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
947 |
def _updateVariableVarListPlain(cls): |
814 | 948 |
def gettypeAsText(self): |
949 |
vartype_content = self.gettype().getcontent() |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
950 |
vartype_content_name = vartype_content.getLocalTag() |
814 | 951 |
# Variable type is a user data type |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
952 |
if vartype_content_name == "derived": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
953 |
return vartype_content.getname() |
814 | 954 |
# Variable type is a string type |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
955 |
elif vartype_content_name in ["string", "wstring"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
956 |
return vartype_content_name.upper() |
814 | 957 |
# Variable type is an array |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
958 |
elif vartype_content_name == "array": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
959 |
base_type = vartype_content.baseType.getcontent() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
960 |
base_type_name = base_type.getLocalTag() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
961 |
# Array derived directly from a user defined type |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
962 |
if base_type_name == "derived": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
963 |
basetype_name = base_type.getname() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
964 |
# Array derived directly from a string type |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
965 |
elif base_type_name in ["string", "wstring"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
966 |
basetype_name = base_type_name.upper() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
967 |
# Array derived directly from an elementary type |
814 | 968 |
else: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
969 |
basetype_name = base_type_name |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
970 |
return "ARRAY [%s] OF %s" % (",".join(map(lambda x: "%s..%s" % (x.getlower(), x.getupper()), vartype_content.getdimension())), basetype_name) |
814 | 971 |
# Variable type is an elementary type |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
972 |
return vartype_content_name |
814 | 973 |
setattr(cls, "gettypeAsText", gettypeAsText) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
974 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
975 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
976 |
parent_infos = [] if parent_infos is None else parent_infos |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
977 |
search_result = _Search([("name", self.getname()), |
814 | 978 |
("type", self.gettypeAsText()), |
979 |
("location", self.getaddress())], |
|
980 |
criteria, parent_infos) |
|
981 |
initial = self.getinitialValue() |
|
982 |
if initial is not None: |
|
983 |
search_result.extend(_Search([("initial value", initial.getvalue())], criteria, parent_infos)) |
|
984 |
doc = self.getdocumentation() |
|
985 |
if doc is not None: |
|
986 |
search_result.extend(doc.Search(criteria, parent_infos + ["documentation"])) |
|
987 |
return search_result |
|
988 |
setattr(cls, "Search", Search) |
|
989 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
990 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
991 |
cls = PLCOpenParser.GetElementClass("variable", "varListPlain") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
992 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
993 |
_updateVariableVarListPlain(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
994 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
995 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
996 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
997 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
998 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
999 |
def _updateTypesProjectClass(cls): |
814 | 1000 |
def getdataTypeElements(self): |
1001 |
return self.dataTypes.getdataType() |
|
1002 |
setattr(cls, "getdataTypeElements", getdataTypeElements) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1003 |
|
814 | 1004 |
def getdataTypeElement(self, name): |
1005 |
elements = self.dataTypes.getdataType() |
|
1006 |
for element in elements: |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1007 |
if TextMatched(element.getname(), name): |
814 | 1008 |
return element |
1009 |
return None |
|
1010 |
setattr(cls, "getdataTypeElement", getdataTypeElement) |
|
1011 |
||
1012 |
def appenddataTypeElement(self, name): |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1013 |
new_datatype = PLCOpenParser.CreateElement("dataType", "dataTypes") |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1014 |
self.dataTypes.appenddataType(new_datatype) |
814 | 1015 |
new_datatype.setname(name) |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1016 |
new_datatype.baseType.setcontent(PLCOpenParser.CreateElement("BOOL", "dataType")) |
814 | 1017 |
setattr(cls, "appenddataTypeElement", appenddataTypeElement) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1018 |
|
814 | 1019 |
def insertdataTypeElement(self, index, dataType): |
1020 |
self.dataTypes.insertdataType(index, dataType) |
|
1021 |
setattr(cls, "insertdataTypeElement", insertdataTypeElement) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1022 |
|
814 | 1023 |
def removedataTypeElement(self, name): |
1024 |
found = False |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1025 |
for element in self.dataTypes.getdataType(): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1026 |
if TextMatched(element.getname(), name): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1027 |
self.dataTypes.remove(element) |
814 | 1028 |
found = True |
1029 |
break |
|
1030 |
if not found: |
|
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1031 |
raise ValueError(_("\"%s\" Data Type doesn't exist !!!") % name) |
814 | 1032 |
setattr(cls, "removedataTypeElement", removedataTypeElement) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1033 |
|
814 | 1034 |
def getpouElements(self): |
1035 |
return self.pous.getpou() |
|
1036 |
setattr(cls, "getpouElements", getpouElements) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1037 |
|
814 | 1038 |
def getpouElement(self, name): |
1039 |
elements = self.pous.getpou() |
|
1040 |
for element in elements: |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1041 |
if TextMatched(element.getname(), name): |
814 | 1042 |
return element |
1043 |
return None |
|
1044 |
setattr(cls, "getpouElement", getpouElement) |
|
1045 |
||
1046 |
def appendpouElement(self, name, pou_type, body_type): |
|
1047 |
for element in self.pous.getpou(): |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1048 |
if TextMatched(element.getname(), name): |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1049 |
raise ValueError(_("\"%s\" POU already exists !!!") % name) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1050 |
new_pou = PLCOpenParser.CreateElement("pou", "pous") |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1051 |
self.pous.appendpou(new_pou) |
814 | 1052 |
new_pou.setname(name) |
1053 |
new_pou.setpouType(pou_type) |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1054 |
new_pou.appendbody(PLCOpenParser.CreateElement("body", "pou")) |
814 | 1055 |
new_pou.setbodyType(body_type) |
1056 |
setattr(cls, "appendpouElement", appendpouElement) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1057 |
|
814 | 1058 |
def insertpouElement(self, index, pou): |
1059 |
self.pous.insertpou(index, pou) |
|
1060 |
setattr(cls, "insertpouElement", insertpouElement) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1061 |
|
814 | 1062 |
def removepouElement(self, name): |
1063 |
found = False |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1064 |
for element in self.pous.getpou(): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1065 |
if TextMatched(element.getname(), name): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1066 |
self.pous.remove(element) |
814 | 1067 |
found = True |
1068 |
break |
|
1069 |
if not found: |
|
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1070 |
raise ValueError(_("\"%s\" POU doesn't exist !!!") % name) |
814 | 1071 |
setattr(cls, "removepouElement", removepouElement) |
1072 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1073 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1074 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 1075 |
search_result = [] |
1076 |
for datatype in self.dataTypes.getdataType(): |
|
1077 |
search_result.extend(datatype.Search(criteria, parent_infos)) |
|
1078 |
for pou in self.pous.getpou(): |
|
1079 |
search_result.extend(pou.Search(criteria, parent_infos)) |
|
1080 |
return search_result |
|
1081 |
setattr(cls, "Search", Search) |
|
1082 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1083 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1084 |
cls = PLCOpenParser.GetElementClass("types", "project") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1085 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1086 |
_updateTypesProjectClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1087 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1088 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1089 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1090 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1091 |
|
814 | 1092 |
def _updateBaseTypeElementName(self, old_name, new_name): |
1093 |
self.baseType.updateElementName(old_name, new_name) |
|
1094 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
1095 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1096 |
def _updateDataTypeDataTypesClass(cls): |
814 | 1097 |
setattr(cls, "updateElementName", _updateBaseTypeElementName) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1098 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1099 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1100 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 1101 |
search_result = [] |
1102 |
filter = criteria["filter"] |
|
1103 |
if filter == "all" or "datatype" in filter: |
|
1104 |
parent_infos = parent_infos + ["D::%s" % self.getname()] |
|
1105 |
search_result.extend(_Search([("name", self.getname())], criteria, parent_infos)) |
|
1106 |
search_result.extend(self.baseType.Search(criteria, parent_infos)) |
|
1107 |
if self.initialValue is not None: |
|
1108 |
search_result.extend(_Search([("initial", self.initialValue.getvalue())], criteria, parent_infos)) |
|
1109 |
return search_result |
|
1110 |
setattr(cls, "Search", Search) |
|
1111 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1112 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1113 |
cls = PLCOpenParser.GetElementClass("dataType", "dataTypes") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1114 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1115 |
_updateDataTypeDataTypesClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1116 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1117 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1118 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1119 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1120 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1121 |
def _updateDataTypeClass(cls): |
814 | 1122 |
def updateElementName(self, old_name, new_name): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1123 |
content_name = self.content.getLocalTag() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1124 |
if content_name in ["derived", "array", "subrangeSigned", "subrangeUnsigned"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1125 |
self.content.updateElementName(old_name, new_name) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1126 |
elif content_name == "struct": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1127 |
for element in self.content.getvariable(): |
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1840
diff
changeset
|
1128 |
element.type.updateElementName(old_name, new_name) |
814 | 1129 |
setattr(cls, "updateElementName", updateElementName) |
1130 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1131 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1132 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 1133 |
search_result = [] |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1134 |
content_name = self.content.getLocalTag() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1135 |
if content_name in ["derived", "array", "enum", "subrangeSigned", "subrangeUnsigned"]: |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1136 |
search_result.extend(self.content.Search(criteria, parent_infos + ["base"])) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1137 |
elif content_name == "struct": |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1138 |
for i, element in enumerate(self.content.getvariable()): |
814 | 1139 |
search_result.extend(element.Search(criteria, parent_infos + ["struct", i])) |
1140 |
else: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1141 |
if content_name in ["string", "wstring"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1142 |
content_name = content_name.upper() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1143 |
search_result.extend(_Search([("base", content_name)], criteria, parent_infos)) |
814 | 1144 |
return search_result |
1145 |
setattr(cls, "Search", Search) |
|
1146 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1147 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1148 |
cls = PLCOpenParser.GetElementClass("dataType") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1149 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1150 |
_updateDataTypeClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1151 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1152 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1153 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1154 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1155 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1156 |
def _updateDerivedDataTypeClass(cls): |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1157 |
def updateElementName(self, old_name, new_name): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1158 |
if TextMatched(self.name, old_name): |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1159 |
self.name = new_name |
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1160 |
setattr(cls, "updateElementName", updateElementName) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1161 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1162 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1163 |
parent_infos = [] if parent_infos is None else parent_infos |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1164 |
return [(tuple(parent_infos),) + result for result in TestTextElement(self.name, criteria)] |
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1165 |
setattr(cls, "Search", Search) |
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1166 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1167 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1168 |
cls = PLCOpenParser.GetElementClass("derived", "dataType") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1169 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1170 |
_updateDerivedDataTypeClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1171 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1172 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1173 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1174 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1175 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1176 |
def _updateArrayDataTypeClass(cls): |
814 | 1177 |
setattr(cls, "updateElementName", _updateBaseTypeElementName) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1178 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1179 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1180 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 1181 |
search_result = self.baseType.Search(criteria, parent_infos) |
1182 |
for i, dimension in enumerate(self.getdimension()): |
|
1183 |
search_result.extend(_Search([("lower", dimension.getlower()), |
|
1184 |
("upper", dimension.getupper())], |
|
1185 |
criteria, parent_infos + ["range", i])) |
|
1186 |
return search_result |
|
1187 |
setattr(cls, "Search", Search) |
|
1188 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1189 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1190 |
cls = PLCOpenParser.GetElementClass("array", "dataType") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1191 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1192 |
_updateArrayDataTypeClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1193 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1194 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1195 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1196 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1197 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1198 |
def _SearchInSubrange(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1199 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 1200 |
search_result = self.baseType.Search(criteria, parent_infos) |
1201 |
search_result.extend(_Search([("lower", self.range.getlower()), |
|
1202 |
("upper", self.range.getupper())], |
|
1203 |
criteria, parent_infos)) |
|
1204 |
return search_result |
|
1205 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
1206 |
|
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
1207 |
cls = PLCOpenParser.GetElementClass("subrangeSigned", "dataType") |
814 | 1208 |
if cls: |
1209 |
setattr(cls, "updateElementName", _updateBaseTypeElementName) |
|
1210 |
setattr(cls, "Search", _SearchInSubrange) |
|
1211 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1212 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1213 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1214 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1215 |
|
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
1216 |
cls = PLCOpenParser.GetElementClass("subrangeUnsigned", "dataType") |
814 | 1217 |
if cls: |
1218 |
setattr(cls, "updateElementName", _updateBaseTypeElementName) |
|
1219 |
setattr(cls, "Search", _SearchInSubrange) |
|
1220 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1221 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1222 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1223 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1224 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1225 |
def _updateEnumDataTypeClass(cls): |
814 | 1226 |
def updateElementName(self, old_name, new_name): |
1227 |
pass |
|
1228 |
setattr(cls, "updateElementName", updateElementName) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1229 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1230 |
enumerated_datatype_values_xpath = PLCOpen_XPath("ppx:values/ppx:value") |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
1231 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1232 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1233 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 1234 |
search_result = [] |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1235 |
for i, value in enumerate(enumerated_datatype_values_xpath(self)): |
814 | 1236 |
for result in TestTextElement(value.getname(), criteria): |
1237 |
search_result.append((tuple(parent_infos + ["value", i]),) + result) |
|
1238 |
return search_result |
|
1239 |
setattr(cls, "Search", Search) |
|
1240 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1241 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1242 |
cls = PLCOpenParser.GetElementClass("enum", "dataType") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1243 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1244 |
_updateEnumDataTypeClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1245 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1246 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1247 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1248 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1249 |
|
1302
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1250 |
def _getvariableTypeinfos(variable_type): |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1251 |
type_content = variable_type.getcontent() |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1252 |
type_content_type = type_content.getLocalTag() |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1253 |
if type_content_type == "derived": |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1254 |
return type_content.getname() |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1255 |
return type_content_type.upper() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1256 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
1257 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1258 |
def _updatePouPousClass(cls): |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1259 |
def getblockInfos(self): |
1302
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1260 |
block_infos = { |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
1261 |
"name": self.getname(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
1262 |
"type": self.getpouType(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
1263 |
"extensible": False, |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
1264 |
"inputs": [], |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
1265 |
"outputs": [], |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
1266 |
"comment": self.getdescription()} |
1302
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1267 |
if self.interface is not None: |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1268 |
return_type = self.interface.getreturnType() |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1269 |
if return_type is not None: |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1270 |
block_infos["outputs"].append( |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1271 |
("OUT", _getvariableTypeinfos(return_type), "none")) |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1272 |
block_infos["inputs"].extend( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1273 |
[(var.getname(), _getvariableTypeinfos(var.type), "none") |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1274 |
for var in block_inputs_xpath(self)]) |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1275 |
block_infos["outputs"].extend( |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1276 |
[(var.getname(), _getvariableTypeinfos(var.type), "none") |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1277 |
for var in block_outputs_xpath(self)]) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1278 |
|
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1279 |
block_infos["usage"] = ("\n (%s) => (%s)" % |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
1280 |
(", ".join(["%s:%s" % (input[1], input[0]) |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
1281 |
for input in block_infos["inputs"]]), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
1282 |
", ".join(["%s:%s" % (output[1], output[0]) |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
1283 |
for output in block_infos["outputs"]]))) |
1302
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1284 |
return block_infos |
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
1285 |
setattr(cls, "getblockInfos", getblockInfos) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1286 |
|
814 | 1287 |
def setdescription(self, description): |
1288 |
doc = self.getdocumentation() |
|
1289 |
if doc is None: |
|
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1290 |
doc = PLCOpenParser.CreateElement("documentation", "pou") |
814 | 1291 |
self.setdocumentation(doc) |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
1292 |
doc.setanyText(description) |
814 | 1293 |
setattr(cls, "setdescription", setdescription) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1294 |
|
814 | 1295 |
def getdescription(self): |
1296 |
doc = self.getdocumentation() |
|
1297 |
if doc is not None: |
|
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
1298 |
return doc.getanyText() |
814 | 1299 |
return "" |
1300 |
setattr(cls, "getdescription", getdescription) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1301 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1302 |
def setbodyType(self, body_type): |
814 | 1303 |
if len(self.body) > 0: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1304 |
if body_type in ["IL", "ST", "LD", "FBD", "SFC"]: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1305 |
self.body[0].setcontent(PLCOpenParser.CreateElement(body_type, "body")) |
814 | 1306 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1307 |
raise ValueError("%s isn't a valid body type!" % type) |
814 | 1308 |
setattr(cls, "setbodyType", setbodyType) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1309 |
|
814 | 1310 |
def getbodyType(self): |
1311 |
if len(self.body) > 0: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1312 |
return self.body[0].getcontent().getLocalTag() |
814 | 1313 |
setattr(cls, "getbodyType", getbodyType) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1314 |
|
814 | 1315 |
def resetexecutionOrder(self): |
1316 |
if len(self.body) > 0: |
|
1317 |
self.body[0].resetexecutionOrder() |
|
1318 |
setattr(cls, "resetexecutionOrder", resetexecutionOrder) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1319 |
|
814 | 1320 |
def compileexecutionOrder(self): |
1321 |
if len(self.body) > 0: |
|
1322 |
self.body[0].compileexecutionOrder() |
|
1323 |
setattr(cls, "compileexecutionOrder", compileexecutionOrder) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1324 |
|
814 | 1325 |
def setelementExecutionOrder(self, instance, new_executionOrder): |
1326 |
if len(self.body) > 0: |
|
1327 |
self.body[0].setelementExecutionOrder(instance, new_executionOrder) |
|
1328 |
setattr(cls, "setelementExecutionOrder", setelementExecutionOrder) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1329 |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1330 |
def addinstance(self, instance): |
814 | 1331 |
if len(self.body) > 0: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1332 |
self.body[0].appendcontentInstance(instance) |
814 | 1333 |
setattr(cls, "addinstance", addinstance) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1334 |
|
814 | 1335 |
def getinstances(self): |
1336 |
if len(self.body) > 0: |
|
1337 |
return self.body[0].getcontentInstances() |
|
1338 |
return [] |
|
1339 |
setattr(cls, "getinstances", getinstances) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1340 |
|
814 | 1341 |
def getinstance(self, id): |
1342 |
if len(self.body) > 0: |
|
1343 |
return self.body[0].getcontentInstance(id) |
|
1344 |
return None |
|
1345 |
setattr(cls, "getinstance", getinstance) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1346 |
|
1331
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
1347 |
def getinstancesIds(self): |
814 | 1348 |
if len(self.body) > 0: |
1331
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
1349 |
return self.body[0].getcontentInstancesIds() |
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
1350 |
return [] |
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
1351 |
setattr(cls, "getinstancesIds", getinstancesIds) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1352 |
|
814 | 1353 |
def getinstanceByName(self, name): |
1354 |
if len(self.body) > 0: |
|
1355 |
return self.body[0].getcontentInstanceByName(name) |
|
1356 |
return None |
|
1357 |
setattr(cls, "getinstanceByName", getinstanceByName) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1358 |
|
814 | 1359 |
def removeinstance(self, id): |
1360 |
if len(self.body) > 0: |
|
1361 |
self.body[0].removecontentInstance(id) |
|
1362 |
setattr(cls, "removeinstance", removeinstance) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1363 |
|
814 | 1364 |
def settext(self, text): |
1365 |
if len(self.body) > 0: |
|
1366 |
self.body[0].settext(text) |
|
1367 |
setattr(cls, "settext", settext) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1368 |
|
814 | 1369 |
def gettext(self): |
1370 |
if len(self.body) > 0: |
|
1371 |
return self.body[0].gettext() |
|
1372 |
return "" |
|
1373 |
setattr(cls, "gettext", gettext) |
|
1374 |
||
1375 |
def getvars(self): |
|
1376 |
vars = [] |
|
1377 |
if self.interface is not None: |
|
1378 |
reverse_types = {} |
|
1379 |
for name, value in VarTypes.items(): |
|
1380 |
reverse_types[value] = name |
|
1381 |
for varlist in self.interface.getcontent(): |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1382 |
vars.append((reverse_types[varlist.getLocalTag()], varlist)) |
814 | 1383 |
return vars |
1384 |
setattr(cls, "getvars", getvars) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1385 |
|
814 | 1386 |
def setvars(self, vars): |
1387 |
if self.interface is None: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1388 |
self.interface = PLCOpenParser.CreateElement("interface", "pou") |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1389 |
self.interface.setcontent(vars) |
814 | 1390 |
setattr(cls, "setvars", setvars) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1391 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1392 |
def addpouExternalVar(self, var_type, name): |
1406
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1400
diff
changeset
|
1393 |
self.addpouVar(var_type, name, "externalVars") |
814 | 1394 |
setattr(cls, "addpouExternalVar", addpouExternalVar) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1395 |
|
1406
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1400
diff
changeset
|
1396 |
def addpouVar(self, var_type, name, var_class="localVars", location="", description="", initval=""): |
814 | 1397 |
if self.interface is None: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1398 |
self.interface = PLCOpenParser.CreateElement("interface", "pou") |
814 | 1399 |
content = self.interface.getcontent() |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1400 |
if len(content) == 0: |
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1401 |
varlist = PLCOpenParser.CreateElement(var_class, "interface") |
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1402 |
self.interface.setcontent([varlist]) |
1371
3c55c99b10ab
Fixed bug when adding and removing function block in graphic viewer. In some cases, the associated variable could stay in the variable panel.
Laurent Bessard
parents:
1355
diff
changeset
|
1403 |
elif content[-1].getLocalTag() != var_class: |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1404 |
varlist = PLCOpenParser.CreateElement(var_class, "interface") |
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1405 |
content[-1].addnext(varlist) |
814 | 1406 |
else: |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1407 |
varlist = content[-1] |
814 | 1408 |
variables = varlist.getvariable() |
1409 |
if varlist.getconstant() or varlist.getretain() or len(variables) > 0 and variables[0].getaddress(): |
|
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1410 |
varlist = PLCOpenParser.CreateElement(var_class, "interface") |
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1411 |
content[-1].addnext(varlist) |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1412 |
var = PLCOpenParser.CreateElement("variable", "varListPlain") |
814 | 1413 |
var.setname(name) |
1313
85c167bfff93
Replaced standard function blocks library definition from dictionary to plcopen xml files
Laurent Bessard
parents:
1310
diff
changeset
|
1414 |
var.settype(var_type) |
814 | 1415 |
if location != "": |
1416 |
var.setaddress(location) |
|
1417 |
if description != "": |
|
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1418 |
ft = PLCOpenParser.CreateElement("documentation", "variable") |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
1419 |
ft.setanyText(description) |
814 | 1420 |
var.setdocumentation(ft) |
1406
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1400
diff
changeset
|
1421 |
if initval != "": |
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1400
diff
changeset
|
1422 |
el = PLCOpenParser.CreateElement("initialValue", "variable") |
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1400
diff
changeset
|
1423 |
el.setvalue(initval) |
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1400
diff
changeset
|
1424 |
var.setinitialValue(el) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1425 |
|
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1426 |
varlist.appendvariable(var) |
814 | 1427 |
setattr(cls, "addpouVar", addpouVar) |
1406
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1400
diff
changeset
|
1428 |
setattr(cls, "addpouLocalVar", addpouVar) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1429 |
|
814 | 1430 |
def changepouVar(self, old_type, old_name, new_type, new_name): |
1431 |
if self.interface is not None: |
|
1432 |
content = self.interface.getcontent() |
|
1433 |
for varlist in content: |
|
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1434 |
variables = varlist.getvariable() |
814 | 1435 |
for var in variables: |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1436 |
if TextMatched(var.getname(), old_name): |
814 | 1437 |
vartype_content = var.gettype().getcontent() |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1438 |
if vartype_content.getLocalTag() == "derived" and TextMatched(vartype_content.getname(), old_type): |
814 | 1439 |
var.setname(new_name) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1440 |
vartype_content.setname(new_type) |
814 | 1441 |
return |
1442 |
setattr(cls, "changepouVar", changepouVar) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1443 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1444 |
def removepouVar(self, var_type, name): |
814 | 1445 |
if self.interface is not None: |
1446 |
content = self.interface.getcontent() |
|
1447 |
for varlist in content: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1448 |
for var in varlist.getvariable(): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1449 |
if TextMatched(var.getname(), name): |
814 | 1450 |
vartype_content = var.gettype().getcontent() |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1451 |
if vartype_content.getLocalTag() == "derived" and TextMatched(vartype_content.getname(), var_type): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1452 |
varlist.remove(var) |
1371
3c55c99b10ab
Fixed bug when adding and removing function block in graphic viewer. In some cases, the associated variable could stay in the variable panel.
Laurent Bessard
parents:
1355
diff
changeset
|
1453 |
if len(varlist.getvariable()) == 0: |
3c55c99b10ab
Fixed bug when adding and removing function block in graphic viewer. In some cases, the associated variable could stay in the variable panel.
Laurent Bessard
parents:
1355
diff
changeset
|
1454 |
self.interface.remove(varlist) |
814 | 1455 |
break |
1456 |
setattr(cls, "removepouVar", removepouVar) |
|
1626
0779c1b18c01
check before program generation whether SFC step, that is referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1619
diff
changeset
|
1457 |
|
0779c1b18c01
check before program generation whether SFC step, that is referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1619
diff
changeset
|
1458 |
def hasstep(self, name=None): |
0779c1b18c01
check before program generation whether SFC step, that is referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1619
diff
changeset
|
1459 |
if self.getbodyType() in ["SFC"]: |
0779c1b18c01
check before program generation whether SFC step, that is referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1619
diff
changeset
|
1460 |
for instance in self.getinstances(): |
0779c1b18c01
check before program generation whether SFC step, that is referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1619
diff
changeset
|
1461 |
if isinstance(instance, PLCOpenParser.GetElementClass("step", "sfcObjects")) and TextMatched(instance.getname(), name): |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1462 |
return True |
1626
0779c1b18c01
check before program generation whether SFC step, that is referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1619
diff
changeset
|
1463 |
return False |
0779c1b18c01
check before program generation whether SFC step, that is referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1619
diff
changeset
|
1464 |
setattr(cls, "hasstep", hasstep) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1465 |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1466 |
def hasblock(self, name=None, block_type=None): |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1467 |
if self.getbodyType() in ["FBD", "LD", "SFC"]: |
814 | 1468 |
for instance in self.getinstances(): |
1766
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1765
diff
changeset
|
1469 |
if isinstance(instance, PLCOpenParser.GetElementClass("block", "fbdObjects")) \ |
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1765
diff
changeset
|
1470 |
and (TextMatched(instance.getinstanceName(), name) or |
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1765
diff
changeset
|
1471 |
TextMatched(instance.gettypeName(), block_type)): |
814 | 1472 |
return True |
1473 |
if self.transitions: |
|
1474 |
for transition in self.transitions.gettransition(): |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1475 |
result = transition.hasblock(name, block_type) |
814 | 1476 |
if result: |
1477 |
return result |
|
1478 |
if self.actions: |
|
1479 |
for action in self.actions.getaction(): |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1480 |
result = action.hasblock(name, block_type) |
814 | 1481 |
if result: |
1482 |
return result |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1483 |
elif block_type is not None and len(self.body) > 0: |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1484 |
return self.body[0].hasblock(block_type) |
814 | 1485 |
return False |
1486 |
setattr(cls, "hasblock", hasblock) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1487 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1488 |
def addtransition(self, name, body_type): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1489 |
if self.transitions is None: |
814 | 1490 |
self.addtransitions() |
1491 |
self.transitions.settransition([]) |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1492 |
transition = PLCOpenParser.CreateElement("transition", "transitions") |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1493 |
self.transitions.appendtransition(transition) |
814 | 1494 |
transition.setname(name) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1495 |
transition.setbodyType(body_type) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1496 |
if body_type == "ST": |
1616
3638463d6e02
fix issue with creating SFC transitions using ST and IL
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
1497 |
transition.settext(":= ;") |
814 | 1498 |
setattr(cls, "addtransition", addtransition) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1499 |
|
814 | 1500 |
def gettransition(self, name): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1501 |
if self.transitions is not None: |
814 | 1502 |
for transition in self.transitions.gettransition(): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1503 |
if TextMatched(transition.getname(), name): |
814 | 1504 |
return transition |
1505 |
return None |
|
1506 |
setattr(cls, "gettransition", gettransition) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1507 |
|
814 | 1508 |
def gettransitionList(self): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1509 |
if self.transitions is not None: |
814 | 1510 |
return self.transitions.gettransition() |
1511 |
return [] |
|
1512 |
setattr(cls, "gettransitionList", gettransitionList) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1513 |
|
814 | 1514 |
def removetransition(self, name): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1515 |
if self.transitions is not None: |
814 | 1516 |
removed = False |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1517 |
for transition in self.transitions.gettransition(): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1518 |
if TextMatched(transition.getname(), name): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1519 |
if transition.getbodyType() in ["FBD", "LD", "SFC"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1520 |
for instance in transition.getinstances(): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1521 |
if isinstance(instance, PLCOpenParser.GetElementClass("block", "fbdObjects")): |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1522 |
self.removepouVar(instance.gettypeName(), |
824
be669f4c51c4
Fix bug in SFC function block declarations from transition and action not removed when transition or action is deleted
laurent
parents:
814
diff
changeset
|
1523 |
instance.getinstanceName()) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1524 |
self.transitions.remove(transition) |
814 | 1525 |
removed = True |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1526 |
break |
814 | 1527 |
if not removed: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1528 |
raise ValueError(_("Transition with name %s doesn't exist!") % name) |
814 | 1529 |
setattr(cls, "removetransition", removetransition) |
1530 |
||
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1531 |
def addaction(self, name, body_type): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1532 |
if self.actions is None: |
814 | 1533 |
self.addactions() |
1534 |
self.actions.setaction([]) |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1535 |
action = PLCOpenParser.CreateElement("action", "actions") |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1536 |
self.actions.appendaction(action) |
814 | 1537 |
action.setname(name) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1538 |
action.setbodyType(body_type) |
814 | 1539 |
setattr(cls, "addaction", addaction) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1540 |
|
814 | 1541 |
def getaction(self, name): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1542 |
if self.actions is not None: |
814 | 1543 |
for action in self.actions.getaction(): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1544 |
if TextMatched(action.getname(), name): |
814 | 1545 |
return action |
1546 |
return None |
|
1547 |
setattr(cls, "getaction", getaction) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1548 |
|
814 | 1549 |
def getactionList(self): |
1382
675a6229fc60
Fixed bugs in SFC when loading transition condition and referenced transition or action body
Laurent Bessard
parents:
1371
diff
changeset
|
1550 |
if self.actions is not None: |
814 | 1551 |
return self.actions.getaction() |
1552 |
return [] |
|
1553 |
setattr(cls, "getactionList", getactionList) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1554 |
|
814 | 1555 |
def removeaction(self, name): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1556 |
if self.actions is not None: |
814 | 1557 |
removed = False |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1558 |
for action in self.actions.getaction(): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1559 |
if TextMatched(action.getname(), name): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1560 |
if action.getbodyType() in ["FBD", "LD", "SFC"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1561 |
for instance in action.getinstances(): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1562 |
if isinstance(instance, PLCOpenParser.GetElementClass("block", "fbdObjects")): |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1563 |
self.removepouVar(instance.gettypeName(), |
824
be669f4c51c4
Fix bug in SFC function block declarations from transition and action not removed when transition or action is deleted
laurent
parents:
814
diff
changeset
|
1564 |
instance.getinstanceName()) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1565 |
self.actions.remove(action) |
814 | 1566 |
removed = True |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1567 |
break |
814 | 1568 |
if not removed: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1569 |
raise ValueError(_("Action with name %s doesn't exist!") % name) |
814 | 1570 |
setattr(cls, "removeaction", removeaction) |
1571 |
||
1572 |
def updateElementName(self, old_name, new_name): |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1573 |
if self.interface is not None: |
814 | 1574 |
for content in self.interface.getcontent(): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1575 |
for var in content.getvariable(): |
814 | 1576 |
var_address = var.getaddress() |
1577 |
if var_address is not None: |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1578 |
if TextMatched(var_address, old_name): |
814 | 1579 |
var.setaddress(new_name) |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1580 |
if TextMatched(var.getname(), old_name): |
814 | 1581 |
var.setname(new_name) |
1582 |
var_type_content = var.gettype().getcontent() |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1583 |
if var_type_content.getLocalTag() == "derived": |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1584 |
if TextMatched(var_type_content.getname(), old_name): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1585 |
var_type_content.setname(new_name) |
814 | 1586 |
self.body[0].updateElementName(old_name, new_name) |
1587 |
for action in self.getactionList(): |
|
1588 |
action.updateElementName(old_name, new_name) |
|
1589 |
for transition in self.gettransitionList(): |
|
1590 |
transition.updateElementName(old_name, new_name) |
|
1591 |
setattr(cls, "updateElementName", updateElementName) |
|
1592 |
||
1593 |
def updateElementAddress(self, address_model, new_leading): |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1594 |
if self.interface is not None: |
814 | 1595 |
for content in self.interface.getcontent(): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1596 |
for var in content.getvariable(): |
814 | 1597 |
var_address = var.getaddress() |
1598 |
if var_address is not None: |
|
1599 |
var.setaddress(update_address(var_address, address_model, new_leading)) |
|
1600 |
self.body[0].updateElementAddress(address_model, new_leading) |
|
1601 |
for action in self.getactionList(): |
|
1602 |
action.updateElementAddress(address_model, new_leading) |
|
1603 |
for transition in self.gettransitionList(): |
|
1604 |
transition.updateElementAddress(address_model, new_leading) |
|
1605 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
1606 |
||
1607 |
def removeVariableByAddress(self, address): |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1608 |
if self.interface is not None: |
814 | 1609 |
for content in self.interface.getcontent(): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1610 |
for variable in content.getvariable(): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
1611 |
if TextMatched(variable.getaddress(), address): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1612 |
content.remove(variable) |
814 | 1613 |
setattr(cls, "removeVariableByAddress", removeVariableByAddress) |
1614 |
||
1615 |
def removeVariableByFilter(self, address_model): |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1616 |
if self.interface is not None: |
814 | 1617 |
for content in self.interface.getcontent(): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1618 |
for variable in content.getvariable(): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1619 |
var_address = variable.getaddress() |
814 | 1620 |
if var_address is not None: |
1621 |
result = address_model.match(var_address) |
|
1622 |
if result is not None: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1623 |
content.remove(variable) |
814 | 1624 |
setattr(cls, "removeVariableByFilter", removeVariableByFilter) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1625 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1626 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1627 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 1628 |
search_result = [] |
1629 |
filter = criteria["filter"] |
|
1630 |
if filter == "all" or self.getpouType() in filter: |
|
1619
163d3a883575
fix local search in actions and transitions
Surkov Sergey <surkovsv93@gmail.com>
parents:
1616
diff
changeset
|
1631 |
if parent_infos == []: |
163d3a883575
fix local search in actions and transitions
Surkov Sergey <surkovsv93@gmail.com>
parents:
1616
diff
changeset
|
1632 |
parent_infos = parent_infos + ["P::%s" % self.getname()] |
814 | 1633 |
search_result.extend(_Search([("name", self.getname())], criteria, parent_infos)) |
1634 |
if self.interface is not None: |
|
1635 |
var_number = 0 |
|
1636 |
for content in self.interface.getcontent(): |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1637 |
variable_type = searchResultVarTypes.get(content, "var_local") |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1638 |
variables = content.getvariable() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1639 |
for modifier, has_modifier in [("constant", content.getconstant()), |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1640 |
("retain", content.getretain()), |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1641 |
("non_retain", content.getnonretain())]: |
814 | 1642 |
if has_modifier: |
1643 |
for result in TestTextElement(modifier, criteria): |
|
1644 |
search_result.append((tuple(parent_infos + [variable_type, (var_number, var_number + len(variables)), modifier]),) + result) |
|
1645 |
break |
|
1646 |
for variable in variables: |
|
1647 |
search_result.extend(variable.Search(criteria, parent_infos + [variable_type, var_number])) |
|
1648 |
var_number += 1 |
|
1649 |
if len(self.body) > 0: |
|
1650 |
search_result.extend(self.body[0].Search(criteria, parent_infos)) |
|
1651 |
for action in self.getactionList(): |
|
1652 |
search_result.extend(action.Search(criteria, parent_infos)) |
|
1653 |
for transition in self.gettransitionList(): |
|
1654 |
search_result.extend(transition.Search(criteria, parent_infos)) |
|
1655 |
return search_result |
|
1656 |
setattr(cls, "Search", Search) |
|
1657 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1658 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1659 |
cls = PLCOpenParser.GetElementClass("pou", "pous") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1660 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1661 |
block_inputs_xpath = PLCOpen_XPath( |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1662 |
"ppx:interface/*[self::ppx:inputVars or self::ppx:inOutVars]/ppx:variable") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1663 |
block_outputs_xpath = PLCOpen_XPath( |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1664 |
"ppx:interface/*[self::ppx:outputVars or self::ppx:inOutVars]/ppx:variable") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1665 |
_updatePouPousClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1666 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1667 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1668 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1669 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1670 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1671 |
def setbodyType(self, body_type): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1672 |
if body_type in ["IL", "ST", "LD", "FBD", "SFC"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1673 |
self.body.setcontent(PLCOpenParser.CreateElement(body_type, "body")) |
814 | 1674 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1675 |
raise ValueError("%s isn't a valid body type!" % type) |
814 | 1676 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1677 |
|
814 | 1678 |
def getbodyType(self): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1679 |
return self.body.getcontent().getLocalTag() |
814 | 1680 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1681 |
|
814 | 1682 |
def resetexecutionOrder(self): |
1683 |
self.body.resetexecutionOrder() |
|
1684 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1685 |
|
814 | 1686 |
def compileexecutionOrder(self): |
1687 |
self.body.compileexecutionOrder() |
|
1688 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1689 |
|
814 | 1690 |
def setelementExecutionOrder(self, instance, new_executionOrder): |
1691 |
self.body.setelementExecutionOrder(instance, new_executionOrder) |
|
1692 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1693 |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1694 |
def addinstance(self, instance): |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1695 |
self.body.appendcontentInstance(instance) |
814 | 1696 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1697 |
|
814 | 1698 |
def getinstances(self): |
1699 |
return self.body.getcontentInstances() |
|
1700 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1701 |
|
814 | 1702 |
def getinstance(self, id): |
1703 |
return self.body.getcontentInstance(id) |
|
1704 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1705 |
|
814 | 1706 |
def getrandomInstance(self, exclude): |
1707 |
return self.body.getcontentRandomInstance(exclude) |
|
1708 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1709 |
|
814 | 1710 |
def getinstanceByName(self, name): |
1711 |
return self.body.getcontentInstanceByName(name) |
|
1712 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1713 |
|
814 | 1714 |
def removeinstance(self, id): |
1715 |
self.body.removecontentInstance(id) |
|
1716 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1717 |
|
814 | 1718 |
def settext(self, text): |
1719 |
self.body.settext(text) |
|
1720 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1721 |
|
814 | 1722 |
def gettext(self): |
1723 |
return self.body.gettext() |
|
1724 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1725 |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1726 |
def hasblock(self, name=None, block_type=None): |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1727 |
if self.getbodyType() in ["FBD", "LD", "SFC"]: |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1728 |
for instance in self.getinstances(): |
1766
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1765
diff
changeset
|
1729 |
if isinstance(instance, PLCOpenParser.GetElementClass("block", "fbdObjects")) and \ |
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1765
diff
changeset
|
1730 |
(TextMatched(instance.getinstanceName(), name) or TextMatched(instance.gettypeName(), block_type)): |
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1731 |
return True |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1732 |
elif block_type is not None: |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1733 |
return self.body.hasblock(block_type) |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1734 |
return False |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1735 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1736 |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1737 |
def updateElementName(self, old_name, new_name): |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1738 |
self.body.updateElementName(old_name, new_name) |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1739 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
1740 |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1741 |
def updateElementAddress(self, address_model, new_leading): |
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1742 |
self.body.updateElementAddress(address_model, new_leading) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1743 |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1744 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1745 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1746 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1747 |
def _updateTransitionTransitionsClass(cls): |
814 | 1748 |
setattr(cls, "setbodyType", setbodyType) |
1749 |
setattr(cls, "getbodyType", getbodyType) |
|
1750 |
setattr(cls, "resetexecutionOrder", resetexecutionOrder) |
|
1751 |
setattr(cls, "compileexecutionOrder", compileexecutionOrder) |
|
1752 |
setattr(cls, "setelementExecutionOrder", setelementExecutionOrder) |
|
1753 |
setattr(cls, "addinstance", addinstance) |
|
1754 |
setattr(cls, "getinstances", getinstances) |
|
1755 |
setattr(cls, "getinstance", getinstance) |
|
1756 |
setattr(cls, "getrandomInstance", getrandomInstance) |
|
1757 |
setattr(cls, "getinstanceByName", getinstanceByName) |
|
1758 |
setattr(cls, "removeinstance", removeinstance) |
|
1759 |
setattr(cls, "settext", settext) |
|
1760 |
setattr(cls, "gettext", gettext) |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1761 |
setattr(cls, "hasblock", hasblock) |
814 | 1762 |
setattr(cls, "updateElementName", updateElementName) |
1763 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1764 |
|
814 | 1765 |
def Search(self, criteria, parent_infos): |
1766 |
search_result = [] |
|
1767 |
parent_infos = parent_infos[:-1] + ["T::%s::%s" % (parent_infos[-1].split("::")[1], self.getname())] |
|
1768 |
for result in TestTextElement(self.getname(), criteria): |
|
1769 |
search_result.append((tuple(parent_infos + ["name"]),) + result) |
|
1770 |
search_result.extend(self.body.Search(criteria, parent_infos)) |
|
1771 |
return search_result |
|
1772 |
setattr(cls, "Search", Search) |
|
1773 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1774 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1775 |
cls = PLCOpenParser.GetElementClass("transition", "transitions") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1776 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1777 |
_updateTransitionTransitionsClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1778 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1779 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1780 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1781 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1782 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1783 |
def _updateActionActionsClass(cls): |
814 | 1784 |
setattr(cls, "setbodyType", setbodyType) |
1785 |
setattr(cls, "getbodyType", getbodyType) |
|
1786 |
setattr(cls, "resetexecutionOrder", resetexecutionOrder) |
|
1787 |
setattr(cls, "compileexecutionOrder", compileexecutionOrder) |
|
1788 |
setattr(cls, "setelementExecutionOrder", setelementExecutionOrder) |
|
1789 |
setattr(cls, "addinstance", addinstance) |
|
1790 |
setattr(cls, "getinstances", getinstances) |
|
1791 |
setattr(cls, "getinstance", getinstance) |
|
1792 |
setattr(cls, "getrandomInstance", getrandomInstance) |
|
1793 |
setattr(cls, "getinstanceByName", getinstanceByName) |
|
1794 |
setattr(cls, "removeinstance", removeinstance) |
|
1795 |
setattr(cls, "settext", settext) |
|
1796 |
setattr(cls, "gettext", gettext) |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1797 |
setattr(cls, "hasblock", hasblock) |
814 | 1798 |
setattr(cls, "updateElementName", updateElementName) |
1799 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1800 |
|
814 | 1801 |
def Search(self, criteria, parent_infos): |
1802 |
search_result = [] |
|
1803 |
parent_infos = parent_infos[:-1] + ["A::%s::%s" % (parent_infos[-1].split("::")[1], self.getname())] |
|
1804 |
for result in TestTextElement(self.getname(), criteria): |
|
1805 |
search_result.append((tuple(parent_infos + ["name"]),) + result) |
|
1806 |
search_result.extend(self.body.Search(criteria, parent_infos)) |
|
1807 |
return search_result |
|
1808 |
setattr(cls, "Search", Search) |
|
1809 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1810 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1811 |
cls = PLCOpenParser.GetElementClass("action", "actions") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1812 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1813 |
_updateActionActionsClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1814 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1815 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1816 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1817 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1818 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
1819 |
def _updateBodyClass(cls): |
814 | 1820 |
cls.currentExecutionOrderId = 0 |
1629
80eee3c5a057
attach checkedBlockDict variable to the body object
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1626
diff
changeset
|
1821 |
cls.checkedBlocksDict = {} |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
1822 |
|
814 | 1823 |
def resetcurrentExecutionOrderId(self): |
1824 |
object.__setattr__(self, "currentExecutionOrderId", 0) |
|
1825 |
setattr(cls, "resetcurrentExecutionOrderId", resetcurrentExecutionOrderId) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1826 |
|
814 | 1827 |
def getnewExecutionOrderId(self): |
1828 |
object.__setattr__(self, "currentExecutionOrderId", self.currentExecutionOrderId + 1) |
|
1829 |
return self.currentExecutionOrderId |
|
1830 |
setattr(cls, "getnewExecutionOrderId", getnewExecutionOrderId) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1831 |
|
814 | 1832 |
def resetexecutionOrder(self): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1833 |
if self.content.getLocalTag() == "FBD": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1834 |
for element in self.content.getcontent(): |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1835 |
if not isinstance(element, (PLCOpenParser.GetElementClass("comment", "commonObjects"), |
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1836 |
PLCOpenParser.GetElementClass("connector", "commonObjects"), |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1837 |
PLCOpenParser.GetElementClass("continuation", "commonObjects"))): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1838 |
element.setexecutionOrderId(0) |
1629
80eee3c5a057
attach checkedBlockDict variable to the body object
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1626
diff
changeset
|
1839 |
self.checkedBlocksDict.clear() |
814 | 1840 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1841 |
raise TypeError(_("Can only generate execution order on FBD networks!")) |
814 | 1842 |
setattr(cls, "resetexecutionOrder", resetexecutionOrder) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1843 |
|
814 | 1844 |
def compileexecutionOrder(self): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1845 |
if self.content.getLocalTag() == "FBD": |
814 | 1846 |
self.resetexecutionOrder() |
1847 |
self.resetcurrentExecutionOrderId() |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1848 |
for element in self.content.getcontent(): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1849 |
if isinstance(element, PLCOpenParser.GetElementClass("outVariable", "fbdObjects")) and element.getexecutionOrderId() == 0: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1850 |
connections = element.connectionPointIn.getconnections() |
814 | 1851 |
if connections and len(connections) == 1: |
1852 |
self.compileelementExecutionOrder(connections[0]) |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1853 |
element.setexecutionOrderId(self.getnewExecutionOrderId()) |
814 | 1854 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1855 |
raise TypeError(_("Can only generate execution order on FBD networks!")) |
814 | 1856 |
setattr(cls, "compileexecutionOrder", compileexecutionOrder) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1857 |
|
814 | 1858 |
def compileelementExecutionOrder(self, link): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1859 |
if self.content.getLocalTag() == "FBD": |
814 | 1860 |
localid = link.getrefLocalId() |
1861 |
instance = self.getcontentInstance(localid) |
|
1629
80eee3c5a057
attach checkedBlockDict variable to the body object
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1626
diff
changeset
|
1862 |
self.checkedBlocksDict[localid] = True |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1863 |
if isinstance(instance, PLCOpenParser.GetElementClass("block", "fbdObjects")) and instance.getexecutionOrderId() == 0: |
814 | 1864 |
for variable in instance.inputVariables.getvariable(): |
1865 |
connections = variable.connectionPointIn.getconnections() |
|
1866 |
if connections and len(connections) == 1: |
|
1763
bcc07ff2362c
clean-up: fix PEP8 W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
1867 |
if not connections[0].getrefLocalId() in self.checkedBlocksDict: |
1534
d2abe4109467
fix infinite recursion in 'Reset Execution Order' functionality if FBD body contains feedback connections
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1406
diff
changeset
|
1868 |
self.compileelementExecutionOrder(connections[0]) |
d2abe4109467
fix infinite recursion in 'Reset Execution Order' functionality if FBD body contains feedback connections
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1406
diff
changeset
|
1869 |
if instance.getexecutionOrderId() == 0: |
d2abe4109467
fix infinite recursion in 'Reset Execution Order' functionality if FBD body contains feedback connections
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1406
diff
changeset
|
1870 |
instance.setexecutionOrderId(self.getnewExecutionOrderId()) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1871 |
elif isinstance(instance, PLCOpenParser.GetElementClass("continuation", "commonObjects")) and instance.getexecutionOrderId() == 0: |
814 | 1872 |
for tmp_instance in self.getcontentInstances(): |
1766
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1765
diff
changeset
|
1873 |
if isinstance(tmp_instance, PLCOpenParser.GetElementClass("connector", "commonObjects")) and \ |
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1765
diff
changeset
|
1874 |
TextMatched(tmp_instance.getname(), instance.getname()) and \ |
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1765
diff
changeset
|
1875 |
tmp_instance.getexecutionOrderId() == 0: |
814 | 1876 |
connections = tmp_instance.connectionPointIn.getconnections() |
1877 |
if connections and len(connections) == 1: |
|
1878 |
self.compileelementExecutionOrder(connections[0]) |
|
1879 |
else: |
|
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1880 |
raise TypeError(_("Can only generate execution order on FBD networks!")) |
814 | 1881 |
setattr(cls, "compileelementExecutionOrder", compileelementExecutionOrder) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1882 |
|
814 | 1883 |
def setelementExecutionOrder(self, instance, new_executionOrder): |
1294
f02ba5b83811
Fixed datatype and configuration editing in xmlclass refactoring
Laurent Bessard
parents:
1293
diff
changeset
|
1884 |
if self.content.getLocalTag() == "FBD": |
814 | 1885 |
old_executionOrder = instance.getexecutionOrderId() |
1886 |
if old_executionOrder is not None and old_executionOrder != 0 and new_executionOrder != 0: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1887 |
for element in self.content.getcontent(): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1888 |
if element != instance and not isinstance(element, PLCOpenParser.GetElementClass("comment", "commonObjects")): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1889 |
element_executionOrder = element.getexecutionOrderId() |
814 | 1890 |
if old_executionOrder <= element_executionOrder <= new_executionOrder: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1891 |
element.setexecutionOrderId(element_executionOrder - 1) |
814 | 1892 |
if new_executionOrder <= element_executionOrder <= old_executionOrder: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1893 |
element.setexecutionOrderId(element_executionOrder + 1) |
814 | 1894 |
instance.setexecutionOrderId(new_executionOrder) |
1895 |
else: |
|
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1896 |
raise TypeError(_("Can only generate execution order on FBD networks!")) |
814 | 1897 |
setattr(cls, "setelementExecutionOrder", setelementExecutionOrder) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1898 |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
1899 |
def appendcontentInstance(self, instance): |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1900 |
if self.content.getLocalTag() in ["LD", "FBD", "SFC"]: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1901 |
self.content.appendcontent(instance) |
814 | 1902 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1903 |
raise TypeError(_("%s body don't have instances!") % self.content.getLocalTag()) |
814 | 1904 |
setattr(cls, "appendcontentInstance", appendcontentInstance) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1905 |
|
814 | 1906 |
def getcontentInstances(self): |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1907 |
if self.content.getLocalTag() in ["LD", "FBD", "SFC"]: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1908 |
return self.content.getcontent() |
814 | 1909 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1910 |
raise TypeError(_("%s body don't have instances!") % self.content.getLocalTag()) |
814 | 1911 |
setattr(cls, "getcontentInstances", getcontentInstances) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1912 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1913 |
instance_by_id_xpath = PLCOpen_XPath("*[@localId=$localId]") |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1914 |
instance_by_name_xpath = PLCOpen_XPath("ppx:block[@instanceName=$name]") |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
1915 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1916 |
def getcontentInstance(self, local_id): |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1917 |
if self.content.getLocalTag() in ["LD", "FBD", "SFC"]: |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1918 |
instance = instance_by_id_xpath(self.content, localId=local_id) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1919 |
if len(instance) > 0: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1920 |
return instance[0] |
814 | 1921 |
return None |
1922 |
else: |
|
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1923 |
raise TypeError(_("%s body don't have instances!") % self.content.getLocalTag()) |
814 | 1924 |
setattr(cls, "getcontentInstance", getcontentInstance) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1925 |
|
1331
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
1926 |
def getcontentInstancesIds(self): |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1927 |
if self.content.getLocalTag() in ["LD", "FBD", "SFC"]: |
1331
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
1928 |
return OrderedDict([(instance.getlocalId(), True) |
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
1929 |
for instance in self.content]) |
814 | 1930 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1931 |
raise TypeError(_("%s body don't have instances!") % self.content.getLocalTag()) |
1331
38c5de794e62
Added support for speed-up loading of graphic POU tabs
Laurent Bessard
parents:
1330
diff
changeset
|
1932 |
setattr(cls, "getcontentInstancesIds", getcontentInstancesIds) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1933 |
|
814 | 1934 |
def getcontentInstanceByName(self, name): |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1935 |
if self.content.getLocalTag() in ["LD", "FBD", "SFC"]: |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
1936 |
instance = instance_by_name_xpath(self.content) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1937 |
if len(instance) > 0: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1938 |
return instance[0] |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1939 |
return None |
814 | 1940 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1941 |
raise TypeError(_("%s body don't have instances!") % self.content.getLocalTag()) |
814 | 1942 |
setattr(cls, "getcontentInstanceByName", getcontentInstanceByName) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1943 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1944 |
def removecontentInstance(self, local_id): |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1945 |
if self.content.getLocalTag() in ["LD", "FBD", "SFC"]: |
1318 | 1946 |
instance = instance_by_id_xpath(self.content, localId=local_id) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1947 |
if len(instance) > 0: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1948 |
self.content.remove(instance[0]) |
1232
b6894285d4cc
Added support for speed up loading graphic viewers
Laurent Bessard
parents:
1171
diff
changeset
|
1949 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1950 |
raise ValueError(_("Instance with id %d doesn't exist!") % id) |
814 | 1951 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1952 |
raise TypeError(_("%s body don't have instances!") % self.content.getLocalTag()) |
814 | 1953 |
setattr(cls, "removecontentInstance", removecontentInstance) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1954 |
|
814 | 1955 |
def settext(self, text): |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1956 |
if self.content.getLocalTag() in ["IL", "ST"]: |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
1957 |
self.content.setanyText(text) |
814 | 1958 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1959 |
raise TypeError(_("%s body don't have text!") % self.content.getLocalTag()) |
814 | 1960 |
setattr(cls, "settext", settext) |
1961 |
||
1962 |
def gettext(self): |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1963 |
if self.content.getLocalTag() in ["IL", "ST"]: |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
1964 |
return self.content.getanyText() |
814 | 1965 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1966 |
raise TypeError(_("%s body don't have text!") % self.content.getLocalTag()) |
814 | 1967 |
setattr(cls, "gettext", gettext) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1968 |
|
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1969 |
def hasblock(self, block_type): |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
1970 |
if self.content.getLocalTag() in ["IL", "ST"]: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1971 |
return self.content.hasblock(block_type) |
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1972 |
else: |
1765
ccf59c1f0b45
clean-up: fix PEP8 W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1763
diff
changeset
|
1973 |
raise TypeError(_("%s body don't have text!") % self.content.getLocalTag()) |
1142
8ded55ada6d6
Fixed functions used by one or more POU not showing question dialog when trying to delete
Laurent Bessard
parents:
990
diff
changeset
|
1974 |
setattr(cls, "hasblock", hasblock) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
1975 |
|
814 | 1976 |
def updateElementName(self, old_name, new_name): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1977 |
if self.content.getLocalTag() in ["IL", "ST"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1978 |
self.content.updateElementName(old_name, new_name) |
814 | 1979 |
else: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1980 |
for element in self.content.getcontent(): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1981 |
element.updateElementName(old_name, new_name) |
814 | 1982 |
setattr(cls, "updateElementName", updateElementName) |
1983 |
||
1984 |
def updateElementAddress(self, address_model, new_leading): |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1985 |
if self.content.getLocalTag() in ["IL", "ST"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1986 |
self.content.updateElementAddress(address_model, new_leading) |
814 | 1987 |
else: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1988 |
for element in self.content.getcontent(): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1989 |
element.updateElementAddress(address_model, new_leading) |
814 | 1990 |
setattr(cls, "updateElementAddress", updateElementAddress) |
1991 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1992 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
1993 |
parent_infos = [] if parent_infos is None else parent_infos |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1994 |
if self.content.getLocalTag() in ["IL", "ST"]: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1995 |
search_result = self.content.Search(criteria, parent_infos + ["body", 0]) |
814 | 1996 |
else: |
1997 |
search_result = [] |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1998 |
for element in self.content.getcontent(): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
1999 |
search_result.extend(element.Search(criteria, parent_infos)) |
814 | 2000 |
return search_result |
2001 |
setattr(cls, "Search", Search) |
|
2002 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2003 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2004 |
cls = PLCOpenParser.GetElementClass("body") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2005 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2006 |
_updateBodyClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2007 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2008 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2009 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2010 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2011 |
|
814 | 2012 |
def getx(self): |
2013 |
return self.position.getx() |
|
2014 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2015 |
|
814 | 2016 |
def gety(self): |
2017 |
return self.position.gety() |
|
2018 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2019 |
|
814 | 2020 |
def setx(self, x): |
2021 |
self.position.setx(x) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2022 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2023 |
|
814 | 2024 |
def sety(self, y): |
2025 |
self.position.sety(y) |
|
2026 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2027 |
|
814 | 2028 |
def _getBoundingBox(self): |
2029 |
return rect(self.getx(), self.gety(), self.getwidth(), self.getheight()) |
|
2030 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2031 |
|
814 | 2032 |
def _getConnectionsBoundingBox(connectionPointIn): |
2033 |
bbox = rect() |
|
2034 |
connections = connectionPointIn.getconnections() |
|
2035 |
if connections is not None: |
|
2036 |
for connection in connections: |
|
2037 |
for x, y in connection.getpoints(): |
|
2038 |
bbox.update(x, y) |
|
2039 |
return bbox |
|
2040 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2041 |
|
814 | 2042 |
def _getBoundingBoxSingle(self): |
2043 |
bbox = _getBoundingBox(self) |
|
2044 |
if self.connectionPointIn is not None: |
|
2045 |
bbox.union(_getConnectionsBoundingBox(self.connectionPointIn)) |
|
2046 |
return bbox |
|
2047 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2048 |
|
814 | 2049 |
def _getBoundingBoxMultiple(self): |
2050 |
bbox = _getBoundingBox(self) |
|
2051 |
for connectionPointIn in self.getconnectionPointIn(): |
|
2052 |
bbox.union(_getConnectionsBoundingBox(connectionPointIn)) |
|
2053 |
return bbox |
|
2054 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2055 |
|
814 | 2056 |
def _filterConnections(connectionPointIn, localId, connections): |
2057 |
in_connections = connectionPointIn.getconnections() |
|
2058 |
if in_connections is not None: |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2059 |
for connection in in_connections: |
814 | 2060 |
connected = connection.getrefLocalId() |
1763
bcc07ff2362c
clean-up: fix PEP8 W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
2061 |
if not (localId, connected) in connections and \ |
bcc07ff2362c
clean-up: fix PEP8 W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
2062 |
not (connected, localId) in connections: |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2063 |
connectionPointIn.remove(connection) |
814 | 2064 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2065 |
|
814 | 2066 |
def _filterConnectionsSingle(self, connections): |
2067 |
if self.connectionPointIn is not None: |
|
2068 |
_filterConnections(self.connectionPointIn, self.localId, connections) |
|
2069 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2070 |
|
814 | 2071 |
def _filterConnectionsMultiple(self, connections): |
2072 |
for connectionPointIn in self.getconnectionPointIn(): |
|
2073 |
_filterConnections(connectionPointIn, self.localId, connections) |
|
2074 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2075 |
|
814 | 2076 |
def _getconnectionsdefinition(instance, connections_end): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2077 |
local_id = instance.getlocalId() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2078 |
return dict([((local_id, end), True) for end in connections_end]) |
814 | 2079 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2080 |
|
814 | 2081 |
def _updateConnectionsId(connectionPointIn, translation): |
2082 |
connections_end = [] |
|
2083 |
connections = connectionPointIn.getconnections() |
|
2084 |
if connections is not None: |
|
2085 |
for connection in connections: |
|
2086 |
refLocalId = connection.getrefLocalId() |
|
2087 |
new_reflocalId = translation.get(refLocalId, refLocalId) |
|
2088 |
connection.setrefLocalId(new_reflocalId) |
|
2089 |
connections_end.append(new_reflocalId) |
|
2090 |
return connections_end |
|
2091 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2092 |
|
814 | 2093 |
def _updateConnectionsIdSingle(self, translation): |
2094 |
connections_end = [] |
|
2095 |
if self.connectionPointIn is not None: |
|
2096 |
connections_end = _updateConnectionsId(self.connectionPointIn, translation) |
|
2097 |
return _getconnectionsdefinition(self, connections_end) |
|
2098 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2099 |
|
814 | 2100 |
def _updateConnectionsIdMultiple(self, translation): |
2101 |
connections_end = [] |
|
2102 |
for connectionPointIn in self.getconnectionPointIn(): |
|
2103 |
connections_end.extend(_updateConnectionsId(connectionPointIn, translation)) |
|
2104 |
return _getconnectionsdefinition(self, connections_end) |
|
2105 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2106 |
|
814 | 2107 |
def _translate(self, dx, dy): |
2108 |
self.setx(self.getx() + dx) |
|
2109 |
self.sety(self.gety() + dy) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2110 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2111 |
|
814 | 2112 |
def _translateConnections(connectionPointIn, dx, dy): |
2113 |
connections = connectionPointIn.getconnections() |
|
2114 |
if connections is not None: |
|
2115 |
for connection in connections: |
|
2116 |
for position in connection.getposition(): |
|
2117 |
position.setx(position.getx() + dx) |
|
2118 |
position.sety(position.gety() + dy) |
|
2119 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2120 |
|
814 | 2121 |
def _translateSingle(self, dx, dy): |
2122 |
_translate(self, dx, dy) |
|
2123 |
if self.connectionPointIn is not None: |
|
2124 |
_translateConnections(self.connectionPointIn, dx, dy) |
|
2125 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2126 |
|
814 | 2127 |
def _translateMultiple(self, dx, dy): |
2128 |
_translate(self, dx, dy) |
|
2129 |
for connectionPointIn in self.getconnectionPointIn(): |
|
2130 |
_translateConnections(connectionPointIn, dx, dy) |
|
2131 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2132 |
|
814 | 2133 |
def _updateElementName(self, old_name, new_name): |
2134 |
pass |
|
2135 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2136 |
|
814 | 2137 |
def _updateElementAddress(self, address_model, new_leading): |
2138 |
pass |
|
2139 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2140 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2141 |
def _SearchInElement(self, criteria, parent_infos=None): |
814 | 2142 |
return [] |
2143 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
2144 |
|
814 | 2145 |
_connectionsFunctions = { |
2146 |
"bbox": {"none": _getBoundingBox, |
|
2147 |
"single": _getBoundingBoxSingle, |
|
2148 |
"multiple": _getBoundingBoxMultiple}, |
|
2149 |
"translate": {"none": _translate, |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
2150 |
"single": _translateSingle, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
2151 |
"multiple": _translateMultiple}, |
814 | 2152 |
"filter": {"none": lambda self, connections: None, |
2153 |
"single": _filterConnectionsSingle, |
|
2154 |
"multiple": _filterConnectionsMultiple}, |
|
2155 |
"update": {"none": lambda self, translation: {}, |
|
2156 |
"single": _updateConnectionsIdSingle, |
|
2157 |
"multiple": _updateConnectionsIdMultiple}, |
|
2158 |
} |
|
2159 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2160 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2161 |
def _initElementClass(name, parent, connectionPointInType="none"): |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2162 |
cls = PLCOpenParser.GetElementClass(name, parent) |
814 | 2163 |
if cls: |
2164 |
setattr(cls, "getx", getx) |
|
2165 |
setattr(cls, "gety", gety) |
|
2166 |
setattr(cls, "setx", setx) |
|
2167 |
setattr(cls, "sety", sety) |
|
2168 |
setattr(cls, "updateElementName", _updateElementName) |
|
2169 |
setattr(cls, "updateElementAddress", _updateElementAddress) |
|
2170 |
setattr(cls, "getBoundingBox", _connectionsFunctions["bbox"][connectionPointInType]) |
|
2171 |
setattr(cls, "translate", _connectionsFunctions["translate"][connectionPointInType]) |
|
2172 |
setattr(cls, "filterConnections", _connectionsFunctions["filter"][connectionPointInType]) |
|
2173 |
setattr(cls, "updateConnectionsId", _connectionsFunctions["update"][connectionPointInType]) |
|
2174 |
setattr(cls, "Search", _SearchInElement) |
|
2175 |
return cls |
|
2176 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
2177 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2178 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2179 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2180 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2181 |
def _updateCommentCommonObjectsClass(cls): |
814 | 2182 |
def setcontentText(self, text): |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2183 |
self.content.setanyText(text) |
814 | 2184 |
setattr(cls, "setcontentText", setcontentText) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2185 |
|
814 | 2186 |
def getcontentText(self): |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2187 |
return self.content.getanyText() |
814 | 2188 |
setattr(cls, "getcontentText", getcontentText) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2189 |
|
814 | 2190 |
def updateElementName(self, old_name, new_name): |
2191 |
self.content.updateElementName(old_name, new_name) |
|
2192 |
setattr(cls, "updateElementName", updateElementName) |
|
2193 |
||
2194 |
def updateElementAddress(self, address_model, new_leading): |
|
2195 |
self.content.updateElementAddress(address_model, new_leading) |
|
2196 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
2197 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2198 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2199 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 2200 |
return self.content.Search(criteria, parent_infos + ["comment", self.getlocalId(), "content"]) |
2201 |
setattr(cls, "Search", Search) |
|
2202 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2203 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2204 |
cls = _initElementClass("comment", "commonObjects") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2205 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2206 |
_updateCommentCommonObjectsClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2207 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2208 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2209 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2210 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2211 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2212 |
def _updateBlockFbdObjectsClass(cls): |
814 | 2213 |
def getBoundingBox(self): |
2214 |
bbox = _getBoundingBox(self) |
|
2215 |
for input in self.inputVariables.getvariable(): |
|
2216 |
bbox.union(_getConnectionsBoundingBox(input.connectionPointIn)) |
|
2217 |
return bbox |
|
2218 |
setattr(cls, "getBoundingBox", getBoundingBox) |
|
2219 |
||
2220 |
def updateElementName(self, old_name, new_name): |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
2221 |
if TextMatched(self.typeName, old_name): |
814 | 2222 |
self.typeName = new_name |
2223 |
setattr(cls, "updateElementName", updateElementName) |
|
2224 |
||
2225 |
def filterConnections(self, connections): |
|
2226 |
for input in self.inputVariables.getvariable(): |
|
2227 |
_filterConnections(input.connectionPointIn, self.localId, connections) |
|
2228 |
setattr(cls, "filterConnections", filterConnections) |
|
2229 |
||
2230 |
def updateConnectionsId(self, translation): |
|
2231 |
connections_end = [] |
|
2232 |
for input in self.inputVariables.getvariable(): |
|
2233 |
connections_end.extend(_updateConnectionsId(input.connectionPointIn, translation)) |
|
2234 |
return _getconnectionsdefinition(self, connections_end) |
|
2235 |
setattr(cls, "updateConnectionsId", updateConnectionsId) |
|
2236 |
||
2237 |
def translate(self, dx, dy): |
|
2238 |
_translate(self, dx, dy) |
|
2239 |
for input in self.inputVariables.getvariable(): |
|
2240 |
_translateConnections(input.connectionPointIn, dx, dy) |
|
2241 |
setattr(cls, "translate", translate) |
|
2242 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2243 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2244 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 2245 |
parent_infos = parent_infos + ["block", self.getlocalId()] |
2246 |
search_result = _Search([("name", self.getinstanceName()), |
|
2247 |
("type", self.gettypeName())], |
|
2248 |
criteria, parent_infos) |
|
2249 |
for i, variable in enumerate(self.inputVariables.getvariable()): |
|
2250 |
for result in TestTextElement(variable.getformalParameter(), criteria): |
|
2251 |
search_result.append((tuple(parent_infos + ["input", i]),) + result) |
|
2252 |
for i, variable in enumerate(self.outputVariables.getvariable()): |
|
2253 |
for result in TestTextElement(variable.getformalParameter(), criteria): |
|
2254 |
search_result.append((tuple(parent_infos + ["output", i]),) + result) |
|
2255 |
return search_result |
|
2256 |
setattr(cls, "Search", Search) |
|
2257 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2258 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2259 |
cls = _initElementClass("block", "fbdObjects") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2260 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2261 |
_updateBlockFbdObjectsClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2262 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2263 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2264 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2265 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2266 |
|
1355
9183fb765f16
Fixed bug when modifying power rail in LD Viewer
Laurent Bessard
parents:
1346
diff
changeset
|
2267 |
_initElementClass("leftPowerRail", "ldObjects") |
9183fb765f16
Fixed bug when modifying power rail in LD Viewer
Laurent Bessard
parents:
1346
diff
changeset
|
2268 |
_initElementClass("rightPowerRail", "ldObjects", "multiple") |
9183fb765f16
Fixed bug when modifying power rail in LD Viewer
Laurent Bessard
parents:
1346
diff
changeset
|
2269 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2270 |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2271 |
def _UpdateLDElementName(self, old_name, new_name): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
2272 |
if TextMatched(self.variable, old_name): |
1322
0a9227f743b3
Fixed xmlclass for working with included files, adding support for SimpleType elements and solving ambiguity in extension class when different elements share the same name and parent name
Laurent Bessard
parents:
1318
diff
changeset
|
2273 |
self.variable = new_name |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2274 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2275 |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2276 |
def _UpdateLDElementAddress(self, address_model, new_leading): |
1322
0a9227f743b3
Fixed xmlclass for working with included files, adding support for SimpleType elements and solving ambiguity in extension class when different elements share the same name and parent name
Laurent Bessard
parents:
1318
diff
changeset
|
2277 |
self.variable = update_address(self.variable, address_model, new_leading) |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2278 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2279 |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2280 |
def _getSearchInLDElement(ld_element_type): |
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2281 |
def SearchInLDElement(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2282 |
parent_infos = [] if parent_infos is None else parent_infos |
1322
0a9227f743b3
Fixed xmlclass for working with included files, adding support for SimpleType elements and solving ambiguity in extension class when different elements share the same name and parent name
Laurent Bessard
parents:
1318
diff
changeset
|
2283 |
return _Search([("reference", self.variable)], criteria, parent_infos + [ld_element_type, self.getlocalId()]) |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2284 |
return SearchInLDElement |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2285 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
2286 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2287 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2288 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2289 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2290 |
cls = _initElementClass("contact", "ldObjects", "single") |
814 | 2291 |
if cls: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2292 |
setattr(cls, "updateElementName", _UpdateLDElementName) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2293 |
setattr(cls, "updateElementAddress", _UpdateLDElementAddress) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2294 |
setattr(cls, "Search", _getSearchInLDElement("contact")) |
814 | 2295 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2296 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2297 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2298 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2299 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2300 |
cls = _initElementClass("coil", "ldObjects", "single") |
814 | 2301 |
if cls: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2302 |
setattr(cls, "updateElementName", _UpdateLDElementName) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2303 |
setattr(cls, "updateElementAddress", _UpdateLDElementAddress) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2304 |
setattr(cls, "Search", _getSearchInLDElement("coil")) |
814 | 2305 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2306 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2307 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2308 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2309 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2310 |
def _updateStepSfcObjectSingleClass(cls): |
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2311 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2312 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 2313 |
return _Search([("name", self.getname())], criteria, parent_infos + ["step", self.getlocalId()]) |
2314 |
setattr(cls, "Search", Search) |
|
2315 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2316 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2317 |
cls = _initElementClass("step", "sfcObjects", "single") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2318 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2319 |
_updateStepSfcObjectSingleClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2320 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2321 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2322 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2323 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2324 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2325 |
def _updateTransitionSfcObjectsClass(cls): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2326 |
def setconditionContent(self, condition_type, value): |
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2327 |
if self.condition is None: |
814 | 2328 |
self.addcondition() |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2329 |
if condition_type == "connection": |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2330 |
condition = PLCOpenParser.CreateElement("connectionPointIn", "condition") |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2331 |
else: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2332 |
condition = PLCOpenParser.CreateElement(condition_type, "condition") |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2333 |
self.condition.setcontent(condition) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2334 |
if condition_type == "reference": |
814 | 2335 |
condition.setname(value) |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2336 |
elif condition_type == "inline": |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2337 |
condition.setcontent(PLCOpenParser.CreateElement("ST", "inline")) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2338 |
condition.settext(value) |
814 | 2339 |
setattr(cls, "setconditionContent", setconditionContent) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2340 |
|
814 | 2341 |
def getconditionContent(self): |
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2342 |
if self.condition is not None: |
814 | 2343 |
content = self.condition.getcontent() |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2344 |
values = {"type": content.getLocalTag()} |
814 | 2345 |
if values["type"] == "reference": |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2346 |
values["value"] = content.getname() |
814 | 2347 |
elif values["type"] == "inline": |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2348 |
values["value"] = content.gettext() |
814 | 2349 |
elif values["type"] == "connectionPointIn": |
2350 |
values["type"] = "connection" |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2351 |
values["value"] = content |
814 | 2352 |
return values |
2353 |
return "" |
|
2354 |
setattr(cls, "getconditionContent", getconditionContent) |
|
2355 |
||
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2356 |
def getconditionConnection(self): |
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2357 |
if self.condition is not None: |
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2358 |
content = self.condition.getcontent() |
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
2359 |
if content.getLocalTag() == "connectionPointIn": |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2360 |
return content |
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2361 |
return None |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2362 |
setattr(cls, "getconditionConnection", getconditionConnection) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2363 |
|
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2364 |
def getBoundingBox(self): |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2365 |
bbox = _getBoundingBoxSingle(self) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2366 |
condition_connection = self.getconditionConnection() |
1302
7856cd7767d6
Removed dictionaries storing datatypes and pous defined in project and pou and datatype using tree from model
Laurent Bessard
parents:
1301
diff
changeset
|
2367 |
if condition_connection is not None: |
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2368 |
bbox.union(_getConnectionsBoundingBox(condition_connection)) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2369 |
return bbox |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2370 |
setattr(cls, "getBoundingBox", getBoundingBox) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2371 |
|
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2372 |
def translate(self, dx, dy): |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2373 |
_translateSingle(self, dx, dy) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2374 |
condition_connection = self.getconditionConnection() |
1299
9ffc49bfdf9d
Fixed copy/paste with xmlclass refactoring
Laurent Bessard
parents:
1298
diff
changeset
|
2375 |
if condition_connection is not None: |
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2376 |
_translateConnections(condition_connection, dx, dy) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2377 |
setattr(cls, "translate", translate) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2378 |
|
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2379 |
def filterConnections(self, connections): |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2380 |
_filterConnectionsSingle(self, connections) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2381 |
condition_connection = self.getconditionConnection() |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
2382 |
if condition_connection is not None: |
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2383 |
_filterConnections(condition_connection, self.localId, connections) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2384 |
setattr(cls, "filterConnections", filterConnections) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2385 |
|
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2386 |
def updateConnectionsId(self, translation): |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2387 |
connections_end = [] |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2388 |
if self.connectionPointIn is not None: |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2389 |
connections_end = _updateConnectionsId(self.connectionPointIn, translation) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2390 |
condition_connection = self.getconditionConnection() |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
2391 |
if condition_connection is not None: |
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2392 |
connections_end.extend(_updateConnectionsId(condition_connection, translation)) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2393 |
return _getconnectionsdefinition(self, connections_end) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2394 |
setattr(cls, "updateConnectionsId", updateConnectionsId) |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2395 |
|
814 | 2396 |
def updateElementName(self, old_name, new_name): |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
2397 |
if self.condition is not None: |
814 | 2398 |
content = self.condition.getcontent() |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2399 |
content_name = content.getLocalTag() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2400 |
if content_name == "reference": |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
2401 |
if TextMatched(content.getname(), old_name): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2402 |
content.setname(new_name) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2403 |
elif content_name == "inline": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2404 |
content.updateElementName(old_name, new_name) |
814 | 2405 |
setattr(cls, "updateElementName", updateElementName) |
2406 |
||
2407 |
def updateElementAddress(self, address_model, new_leading): |
|
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
2408 |
if self.condition is not None: |
814 | 2409 |
content = self.condition.getcontent() |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2410 |
content_name = content.getLocalTag() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2411 |
if content_name == "reference": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2412 |
content.setname(update_address(content.getname(), address_model, new_leading)) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2413 |
elif content_name == "inline": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2414 |
content.updateElementAddress(address_model, new_leading) |
814 | 2415 |
setattr(cls, "updateElementAddress", updateElementAddress) |
2416 |
||
2417 |
def getconnections(self): |
|
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2418 |
condition_connection = self.getconditionConnection() |
1301
fcca121a000f
Removed dictionaries storing enumerated datatypes values, subrange datatypes range and project datatype hierarchy from model
Laurent Bessard
parents:
1299
diff
changeset
|
2419 |
if condition_connection is not None: |
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2420 |
return condition_connection.getconnections() |
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
854
diff
changeset
|
2421 |
return None |
814 | 2422 |
setattr(cls, "getconnections", getconnections) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2423 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2424 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2425 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 2426 |
parent_infos = parent_infos + ["transition", self.getlocalId()] |
2427 |
search_result = [] |
|
2428 |
content = self.condition.getcontent() |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2429 |
content_name = content.getLocalTag() |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2430 |
if content_name == "reference": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2431 |
search_result.extend(_Search([("reference", content.getname())], criteria, parent_infos)) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2432 |
elif content_name == "inline": |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2433 |
search_result.extend(content.Search(criteria, parent_infos + ["inline"])) |
814 | 2434 |
return search_result |
2435 |
setattr(cls, "Search", Search) |
|
1346 | 2436 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2437 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2438 |
cls = _initElementClass("transition", "sfcObjects") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2439 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2440 |
_updateTransitionSfcObjectsClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2441 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2442 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2443 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2444 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2445 |
|
1346 | 2446 |
_initElementClass("selectionDivergence", "sfcObjects", "single") |
2447 |
_initElementClass("selectionConvergence", "sfcObjects", "multiple") |
|
2448 |
_initElementClass("simultaneousDivergence", "sfcObjects", "single") |
|
2449 |
_initElementClass("simultaneousConvergence", "sfcObjects", "multiple") |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2450 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2451 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2452 |
def _updateJumpStepSfcObjectSingleClass(cls): |
814 | 2453 |
def Search(self, criteria, parent_infos): |
2454 |
return _Search([("target", self.gettargetName())], criteria, parent_infos + ["jump", self.getlocalId()]) |
|
2455 |
setattr(cls, "Search", Search) |
|
2456 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2457 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2458 |
cls = _initElementClass("jumpStep", "sfcObjects", "single") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2459 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2460 |
_updateJumpStepSfcObjectSingleClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2461 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2462 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2463 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2464 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2465 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2466 |
def _updateActionActionBlockClass(cls): |
814 | 2467 |
def setreferenceName(self, name): |
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2468 |
if self.reference is not None: |
814 | 2469 |
self.reference.setname(name) |
2470 |
setattr(cls, "setreferenceName", setreferenceName) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2471 |
|
814 | 2472 |
def getreferenceName(self): |
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2473 |
if self.reference is not None: |
814 | 2474 |
return self.reference.getname() |
2475 |
return None |
|
2476 |
setattr(cls, "getreferenceName", getreferenceName) |
|
2477 |
||
2478 |
def setinlineContent(self, content): |
|
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2479 |
if self.inline is not None: |
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2480 |
self.inline.setcontent(PLCOpenParser.CreateElement("ST", "inline")) |
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2481 |
self.inline.settext(content) |
814 | 2482 |
setattr(cls, "setinlineContent", setinlineContent) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2483 |
|
814 | 2484 |
def getinlineContent(self): |
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2485 |
if self.inline is not None: |
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2486 |
return self.inline.gettext() |
814 | 2487 |
return None |
2488 |
setattr(cls, "getinlineContent", getinlineContent) |
|
2489 |
||
2490 |
def updateElementName(self, old_name, new_name): |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
2491 |
if self.reference is not None and TextMatched(self.reference.getname(), old_name): |
814 | 2492 |
self.reference.setname(new_name) |
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2493 |
if self.inline is not None: |
814 | 2494 |
self.inline.updateElementName(old_name, new_name) |
2495 |
setattr(cls, "updateElementName", updateElementName) |
|
2496 |
||
2497 |
def updateElementAddress(self, address_model, new_leading): |
|
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2498 |
if self.reference is not None: |
814 | 2499 |
self.reference.setname(update_address(self.reference.getname(), address_model, new_leading)) |
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2500 |
if self.inline is not None: |
814 | 2501 |
self.inline.updateElementAddress(address_model, new_leading) |
2502 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
2503 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2504 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2505 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 2506 |
qualifier = self.getqualifier() |
2507 |
if qualifier is None: |
|
2508 |
qualifier = "N" |
|
2509 |
return _Search([("inline", self.getinlineContent()), |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2510 |
("reference", self.getreferenceName()), |
814 | 2511 |
("qualifier", qualifier), |
2512 |
("duration", self.getduration()), |
|
2513 |
("indicator", self.getindicator())], |
|
2514 |
criteria, parent_infos) |
|
2515 |
setattr(cls, "Search", Search) |
|
2516 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2517 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2518 |
cls = PLCOpenParser.GetElementClass("action", "actionBlock") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2519 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2520 |
_updateActionActionBlockClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2521 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2522 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2523 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2524 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2525 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2526 |
def _updateActionBlockCommonObjectsSingleClass(cls): |
814 | 2527 |
def setactions(self, actions): |
2528 |
self.action = [] |
|
2529 |
for params in actions: |
|
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2530 |
action = PLCOpenParser.CreateElement("action", "actionBlock") |
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2531 |
self.appendaction(action) |
1339 | 2532 |
action.setqualifier(params.qualifier) |
2533 |
if params.type == "reference": |
|
814 | 2534 |
action.addreference() |
1339 | 2535 |
action.setreferenceName(params.value) |
814 | 2536 |
else: |
2537 |
action.addinline() |
|
1339 | 2538 |
action.setinlineContent(params.value) |
2539 |
if params.duration != "": |
|
2540 |
action.setduration(params.duration) |
|
2541 |
if params.indicator != "": |
|
2542 |
action.setindicator(params.indicator) |
|
814 | 2543 |
setattr(cls, "setactions", setactions) |
2544 |
||
2545 |
def getactions(self): |
|
2546 |
actions = [] |
|
2547 |
for action in self.action: |
|
2548 |
params = {} |
|
2549 |
params["qualifier"] = action.getqualifier() |
|
2550 |
if params["qualifier"] is None: |
|
2551 |
params["qualifier"] = "N" |
|
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2552 |
if action.getreference() is not None: |
814 | 2553 |
params["type"] = "reference" |
2554 |
params["value"] = action.getreferenceName() |
|
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2555 |
elif action.getinline() is not None: |
814 | 2556 |
params["type"] = "inline" |
2557 |
params["value"] = action.getinlineContent() |
|
2558 |
duration = action.getduration() |
|
2559 |
if duration: |
|
2560 |
params["duration"] = duration |
|
2561 |
indicator = action.getindicator() |
|
1298
f034fb2b1aab
Fixed SFC block edition and SFC to SFC_textual code generating
Laurent Bessard
parents:
1294
diff
changeset
|
2562 |
if indicator is not None: |
814 | 2563 |
params["indicator"] = indicator |
2564 |
actions.append(params) |
|
2565 |
return actions |
|
2566 |
setattr(cls, "getactions", getactions) |
|
2567 |
||
2568 |
def updateElementName(self, old_name, new_name): |
|
2569 |
for action in self.action: |
|
2570 |
action.updateElementName(old_name, new_name) |
|
2571 |
setattr(cls, "updateElementName", updateElementName) |
|
2572 |
||
2573 |
def updateElementAddress(self, address_model, new_leading): |
|
2574 |
for action in self.action: |
|
2575 |
action.updateElementAddress(address_model, new_leading) |
|
2576 |
setattr(cls, "updateElementAddress", updateElementAddress) |
|
2577 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2578 |
def Search(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2579 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 2580 |
parent_infos = parent_infos + ["action_block", self.getlocalId()] |
2581 |
search_result = [] |
|
2582 |
for idx, action in enumerate(self.action): |
|
2583 |
search_result.extend(action.Search(criteria, parent_infos + ["action", idx])) |
|
2584 |
return search_result |
|
2585 |
setattr(cls, "Search", Search) |
|
2586 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2587 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2588 |
cls = _initElementClass("actionBlock", "commonObjects", "single") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2589 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2590 |
_updateActionBlockCommonObjectsSingleClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2591 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2592 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2593 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2594 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2595 |
|
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2596 |
def _SearchInIOVariable(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2597 |
parent_infos = [] if parent_infos is None else parent_infos |
1322
0a9227f743b3
Fixed xmlclass for working with included files, adding support for SimpleType elements and solving ambiguity in extension class when different elements share the same name and parent name
Laurent Bessard
parents:
1318
diff
changeset
|
2598 |
return _Search([("expression", self.expression)], criteria, parent_infos + ["io_variable", self.getlocalId()]) |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2599 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2600 |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2601 |
def _UpdateIOElementName(self, old_name, new_name): |
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
2602 |
if TextMatched(self.expression, old_name): |
1322
0a9227f743b3
Fixed xmlclass for working with included files, adding support for SimpleType elements and solving ambiguity in extension class when different elements share the same name and parent name
Laurent Bessard
parents:
1318
diff
changeset
|
2603 |
self.expression = new_name |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2604 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2605 |
|
1400 | 2606 |
def _UpdateIOElementAddress(self, address_model, new_leading): |
1322
0a9227f743b3
Fixed xmlclass for working with included files, adding support for SimpleType elements and solving ambiguity in extension class when different elements share the same name and parent name
Laurent Bessard
parents:
1318
diff
changeset
|
2607 |
self.expression = update_address(self.expression, address_model, new_leading) |
814 | 2608 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
2609 |
|
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2610 |
cls = _initElementClass("inVariable", "fbdObjects") |
814 | 2611 |
if cls: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2612 |
setattr(cls, "updateElementName", _UpdateIOElementName) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2613 |
setattr(cls, "updateElementAddress", _UpdateIOElementAddress) |
814 | 2614 |
setattr(cls, "Search", _SearchInIOVariable) |
2615 |
||
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2616 |
cls = _initElementClass("outVariable", "fbdObjects", "single") |
814 | 2617 |
if cls: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2618 |
setattr(cls, "updateElementName", _UpdateIOElementName) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2619 |
setattr(cls, "updateElementAddress", _UpdateIOElementAddress) |
814 | 2620 |
setattr(cls, "Search", _SearchInIOVariable) |
2621 |
||
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2622 |
cls = _initElementClass("inOutVariable", "fbdObjects", "single") |
814 | 2623 |
if cls: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2624 |
setattr(cls, "updateElementName", _UpdateIOElementName) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2625 |
setattr(cls, "updateElementAddress", _UpdateIOElementAddress) |
814 | 2626 |
setattr(cls, "Search", _SearchInIOVariable) |
2627 |
||
2628 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2629 |
def _SearchInConnector(self, criteria, parent_infos=None): |
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
2630 |
parent_infos = [] if parent_infos is None else parent_infos |
814 | 2631 |
return _Search([("name", self.getname())], criteria, parent_infos + ["connector", self.getlocalId()]) |
2632 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
2633 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2634 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2635 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2636 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2637 |
def _updateContinuationCommonObjectsClass(cls): |
814 | 2638 |
setattr(cls, "Search", _SearchInConnector) |
2639 |
||
2640 |
def updateElementName(self, old_name, new_name): |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
2641 |
if TextMatched(self.name, old_name): |
814 | 2642 |
self.name = new_name |
2643 |
setattr(cls, "updateElementName", updateElementName) |
|
2644 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2645 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2646 |
cls = _initElementClass("continuation", "commonObjects") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2647 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2648 |
_updateContinuationCommonObjectsClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2649 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2650 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2651 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2652 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2653 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2654 |
def _updateConnectorCommonObjectsSingleClass(cls): |
814 | 2655 |
setattr(cls, "Search", _SearchInConnector) |
2656 |
||
2657 |
def updateElementName(self, old_name, new_name): |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1581
diff
changeset
|
2658 |
if TextMatched(self.name, old_name): |
814 | 2659 |
self.name = new_name |
2660 |
setattr(cls, "updateElementName", updateElementName) |
|
2661 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2662 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2663 |
cls = _initElementClass("connector", "commonObjects", "single") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2664 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2665 |
_updateConnectorCommonObjectsSingleClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2666 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2667 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2668 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2669 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2670 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2671 |
def _updateConnectionClass(cls): |
814 | 2672 |
def setpoints(self, points): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2673 |
positions = [] |
814 | 2674 |
for point in points: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2675 |
position = PLCOpenParser.CreateElement("position", "connection") |
814 | 2676 |
position.setx(point.x) |
2677 |
position.sety(point.y) |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2678 |
positions.append(position) |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2679 |
self.position = positions |
814 | 2680 |
setattr(cls, "setpoints", setpoints) |
2681 |
||
2682 |
def getpoints(self): |
|
2683 |
points = [] |
|
2684 |
for position in self.position: |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2685 |
points.append((position.getx(), position.gety())) |
814 | 2686 |
return points |
2687 |
setattr(cls, "getpoints", getpoints) |
|
2688 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2689 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2690 |
cls = PLCOpenParser.GetElementClass("connection") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2691 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2692 |
_updateConnectionClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2693 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2694 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2695 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2696 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2697 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2698 |
def _updateConnectionPointInClass(cls): |
814 | 2699 |
def setrelPositionXY(self, x, y): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2700 |
self.relPosition = PLCOpenParser.CreateElement("relPosition", "connectionPointIn") |
814 | 2701 |
self.relPosition.setx(x) |
2702 |
self.relPosition.sety(y) |
|
2703 |
setattr(cls, "setrelPositionXY", setrelPositionXY) |
|
2704 |
||
2705 |
def getrelPositionXY(self): |
|
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2706 |
if self.relPosition is not None: |
814 | 2707 |
return self.relPosition.getx(), self.relPosition.gety() |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2708 |
return self.relPosition |
814 | 2709 |
setattr(cls, "getrelPositionXY", getrelPositionXY) |
2710 |
||
2711 |
def addconnection(self): |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2712 |
self.append(PLCOpenParser.CreateElement("connection", "connectionPointIn")) |
814 | 2713 |
setattr(cls, "addconnection", addconnection) |
2714 |
||
2715 |
def removeconnection(self, idx): |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2716 |
if len(self.content) > idx: |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2717 |
self.remove(self.content[idx]) |
814 | 2718 |
setattr(cls, "removeconnection", removeconnection) |
2719 |
||
2720 |
def removeconnections(self): |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2721 |
self.content = None |
814 | 2722 |
setattr(cls, "removeconnections", removeconnections) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2723 |
|
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
2724 |
connection_xpath = PLCOpen_XPath("ppx:connection") |
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
2725 |
connection_by_position_xpath = PLCOpen_XPath("ppx:connection[position()=$pos]") |
1751
c28db6f7616b
clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
2726 |
|
814 | 2727 |
def getconnections(self): |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
2728 |
return connection_xpath(self) |
814 | 2729 |
setattr(cls, "getconnections", getconnections) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2730 |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2731 |
def getconnection(self, idx): |
1305
714f1381a09a
Fixed xmlclass and plcopen using precompile xpath where possible
Laurent Bessard
parents:
1302
diff
changeset
|
2732 |
connection = connection_by_position_xpath(self, pos=idx+1) |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2733 |
if len(connection) > 0: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2734 |
return connection[0] |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2735 |
return None |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2736 |
setattr(cls, "getconnection", getconnection) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2737 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2738 |
def setconnectionId(self, idx, local_id): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2739 |
connection = self.getconnection(idx) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2740 |
if connection is not None: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2741 |
connection.setrefLocalId(local_id) |
814 | 2742 |
setattr(cls, "setconnectionId", setconnectionId) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2743 |
|
814 | 2744 |
def getconnectionId(self, idx): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2745 |
connection = self.getconnection(idx) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2746 |
if connection is not None: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2747 |
return connection.getrefLocalId() |
814 | 2748 |
return None |
2749 |
setattr(cls, "getconnectionId", getconnectionId) |
|
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2750 |
|
814 | 2751 |
def setconnectionPoints(self, idx, points): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2752 |
connection = self.getconnection(idx) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2753 |
if connection is not None: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2754 |
connection.setpoints(points) |
814 | 2755 |
setattr(cls, "setconnectionPoints", setconnectionPoints) |
2756 |
||
2757 |
def getconnectionPoints(self, idx): |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2758 |
connection = self.getconnection(idx) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2759 |
if connection is not None: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2760 |
return connection.getpoints() |
1285
fa77f3b8f182
Fixed bug when no connection defined for connectionPointIn
Laurent Bessard
parents:
1283
diff
changeset
|
2761 |
return [] |
814 | 2762 |
setattr(cls, "getconnectionPoints", getconnectionPoints) |
2763 |
||
2764 |
def setconnectionParameter(self, idx, parameter): |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2765 |
connection = self.getconnection(idx) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2766 |
if connection is not None: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2767 |
connection.setformalParameter(parameter) |
814 | 2768 |
setattr(cls, "setconnectionParameter", setconnectionParameter) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2769 |
|
814 | 2770 |
def getconnectionParameter(self, idx): |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2771 |
connection = self.getconnection(idx) |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2772 |
if connection is not None: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2773 |
return connection.getformalParameter() |
814 | 2774 |
return None |
2775 |
setattr(cls, "getconnectionParameter", getconnectionParameter) |
|
2776 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2777 |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2778 |
cls = PLCOpenParser.GetElementClass("connectionPointOut") |
814 | 2779 |
if cls: |
2780 |
def setrelPositionXY(self, x, y): |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2781 |
self.relPosition = PLCOpenParser.CreateElement("relPosition", "connectionPointOut") |
814 | 2782 |
self.relPosition.setx(x) |
2783 |
self.relPosition.sety(y) |
|
2784 |
setattr(cls, "setrelPositionXY", setrelPositionXY) |
|
2785 |
||
2786 |
def getrelPositionXY(self): |
|
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2787 |
if self.relPosition is not None: |
814 | 2788 |
return self.relPosition.getx(), self.relPosition.gety() |
2789 |
return self.relPosition |
|
2790 |
setattr(cls, "getrelPositionXY", getrelPositionXY) |
|
2791 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2792 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2793 |
cls = PLCOpenParser.GetElementClass("connectionPointIn") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2794 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2795 |
_updateConnectionPointInClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2796 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2797 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2798 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2799 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2800 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2801 |
def _updateValueClass(cls): |
814 | 2802 |
def setvalue(self, value): |
2803 |
value = value.strip() |
|
2804 |
if value.startswith("[") and value.endswith("]"): |
|
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2805 |
content = PLCOpenParser.CreateElement("arrayValue", "value") |
814 | 2806 |
elif value.startswith("(") and value.endswith(")"): |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2807 |
content = PLCOpenParser.CreateElement("structValue", "value") |
814 | 2808 |
else: |
1291
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2809 |
content = PLCOpenParser.CreateElement("simpleValue", "value") |
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2810 |
content.setvalue(value) |
42ea51d083ce
Second stage of xmlclass refactoring using lxml , project are loaded and displayed successfully
Laurent Bessard
parents:
1290
diff
changeset
|
2811 |
self.setcontent(content) |
814 | 2812 |
setattr(cls, "setvalue", setvalue) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2813 |
|
814 | 2814 |
def getvalue(self): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2815 |
return self.content.getvalue() |
814 | 2816 |
setattr(cls, "getvalue", getvalue) |
2817 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
2818 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2819 |
cls = PLCOpenParser.GetElementClass("value") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2820 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2821 |
_updateValueClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2822 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2823 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2824 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2825 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2826 |
|
814 | 2827 |
def extractValues(values): |
2828 |
items = values.split(",") |
|
2829 |
i = 1 |
|
2830 |
while i < len(items): |
|
2831 |
opened = items[i - 1].count("(") + items[i - 1].count("[") |
|
2832 |
closed = items[i - 1].count(")") + items[i - 1].count("]") |
|
2833 |
if opened > closed: |
|
2834 |
items[i - 1] = ','.join([items[i - 1], items.pop(i)]) |
|
2835 |
elif opened == closed: |
|
2836 |
i += 1 |
|
2837 |
else: |
|
1872
866fb3ab8778
fix pylint error "(undefined-variable) Undefined variable 'X'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1852
diff
changeset
|
2838 |
raise ValueError(_("\"%s\" is an invalid value!") % values) |
814 | 2839 |
return items |
2840 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
2841 |
|
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2842 |
def _updateArrayValueValueClass(cls): |
814 | 2843 |
def setvalue(self, value): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2844 |
elements = [] |
814 | 2845 |
for item in extractValues(value[1:-1]): |
2846 |
item = item.strip() |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2847 |
element = PLCOpenParser.CreateElement("value", "arrayValue") |
814 | 2848 |
result = arrayValue_model.match(item) |
2849 |
if result is not None: |
|
2850 |
groups = result.groups() |
|
2851 |
element.setrepetitionValue(groups[0]) |
|
2852 |
element.setvalue(groups[1].strip()) |
|
2853 |
else: |
|
2854 |
element.setvalue(item) |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2855 |
elements.append(element) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2856 |
self.value = elements |
814 | 2857 |
setattr(cls, "setvalue", setvalue) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2858 |
|
814 | 2859 |
def getvalue(self): |
2860 |
values = [] |
|
2861 |
for element in self.value: |
|
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2862 |
try: |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2863 |
repetition = int(element.getrepetitionValue()) |
1780
c52d1460cea8
clean-up: fix PEP8 E722 do not use bare except'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1777
diff
changeset
|
2864 |
except Exception: |
1293
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2865 |
repetition = 1 |
40117d02601b
Fixed diagram editing in xmlclass refactoring
Laurent Bessard
parents:
1291
diff
changeset
|
2866 |
if repetition > 1: |
814 | 2867 |
value = element.getvalue() |
2868 |
if value is None: |
|
2869 |
value = "" |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
2870 |
values.append("%s(%s)" % (repetition, value)) |
814 | 2871 |
else: |
2872 |
values.append(element.getvalue()) |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
2873 |
return "[%s]" % ", ".join(values) |
814 | 2874 |
setattr(cls, "getvalue", getvalue) |
2875 |
||
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2876 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2877 |
cls = PLCOpenParser.GetElementClass("arrayValue", "value") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2878 |
if cls: |
2439
f0a040f1de1b
Fix pep8 warning: W605 invalid escape sequence ?x?
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2437
diff
changeset
|
2879 |
arrayValue_model = re.compile(r"([0-9]+)\((.*)\)$") |
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2880 |
_updateArrayValueValueClass(cls) |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2881 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2882 |
# ---------------------------------------------------------------------- |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2883 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2884 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2885 |
def _updateStructValueValueClass(cls): |
814 | 2886 |
def setvalue(self, value): |
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2887 |
elements = [] |
814 | 2888 |
for item in extractValues(value[1:-1]): |
2889 |
result = structValue_model.match(item) |
|
2890 |
if result is not None: |
|
2891 |
groups = result.groups() |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2892 |
element = PLCOpenParser.CreateElement("value", "structValue") |
814 | 2893 |
element.setmember(groups[0].strip()) |
2894 |
element.setvalue(groups[1].strip()) |
|
1290
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2895 |
elements.append(element) |
13ee5f4ab612
First stage of xmlclass refactoring using lxml
Laurent Bessard
parents:
1285
diff
changeset
|
2896 |
self.value = elements |
814 | 2897 |
setattr(cls, "setvalue", setvalue) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1695
diff
changeset
|
2898 |
|
814 | 2899 |
def getvalue(self): |
2900 |
values = [] |
|
2901 |
for element in self.value: |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
2902 |
values.append("%s := %s" % (element.getmember(), element.getvalue())) |
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1732
diff
changeset
|
2903 |
return "(%s)" % ", ".join(values) |
814 | 2904 |
setattr(cls, "getvalue", getvalue) |
1840
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2905 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2906 |
|
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2907 |
cls = PLCOpenParser.GetElementClass("structValue", "value") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2908 |
if cls: |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2909 |
structValue_model = re.compile("(.*):=(.*)") |
cf5ef4c0deff
fix pylint error '(function-redefined) method already defined'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1837
diff
changeset
|
2910 |
_updateStructValueValueClass(cls) |