codesys-tools 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. codesys_api/__init__.py +2 -0
  2. codesys_api/action_layer.py +493 -0
  3. codesys_api/api_key_store.py +45 -0
  4. codesys_api/app_runtime.py +65 -0
  5. codesys_api/assets/PERSISTENT_SESSION.py +487 -0
  6. codesys_api/assets/ScriptLib/Stubs/scriptengine/AxisScaleMode.pyi +31 -0
  7. codesys_api/assets/ScriptLib/Stubs/scriptengine/GraphType.pyi +80 -0
  8. codesys_api/assets/ScriptLib/Stubs/scriptengine/IScriptTraceObjectMarker.pyi +15 -0
  9. codesys_api/assets/ScriptLib/Stubs/scriptengine/PacketState.pyi +37 -0
  10. codesys_api/assets/ScriptLib/Stubs/scriptengine/README.txt +6 -0
  11. codesys_api/assets/ScriptLib/Stubs/scriptengine/Resolution.pyi +18 -0
  12. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptApplication.pyi +166 -0
  13. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptApplicationComposer.pyi +1938 -0
  14. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptAxisSettings.pyi +131 -0
  15. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceDescription.pyi +311 -0
  16. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceObject.pyi +973 -0
  17. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceParameters.pyi +1039 -0
  18. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceRepository.pyi +616 -0
  19. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceUserManagement.pyi +469 -0
  20. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDriverInfo.pyi +202 -0
  21. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDriverTraceImpl.pyi +17 -0
  22. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptExplicitConnectorObjects.pyi +153 -0
  23. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptExternalFileObject.pyi +211 -0
  24. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptFontDesc.pyi +23 -0
  25. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptIecLanguageObjectContainer.pyi +439 -0
  26. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptImagePoolObject.pyi +311 -0
  27. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptLibManObject.pyi +826 -0
  28. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptLiveDeviceUserManagement.pyi +360 -0
  29. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptObject.pyi +760 -0
  30. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptOnline.pyi +1758 -0
  31. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptProject.pyi +960 -0
  32. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptProjects.pyi +559 -0
  33. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptSymbolConfigObject.pyi +712 -0
  34. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptSystem.pyi +1340 -0
  35. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTaskConfigObject.pyi +365 -0
  36. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTextListObject.pyi +307 -0
  37. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTextualObject.pyi +300 -0
  38. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceDiagram.pyi +78 -0
  39. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceDiagramCollection.pyi +102 -0
  40. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceDiagramVariable.pyi +16 -0
  41. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceDiagramVariableCollection.pyi +103 -0
  42. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceEditorObject.pyi +159 -0
  43. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceObject.pyi +167 -0
  44. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceVariable.pyi +87 -0
  45. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceVariableList.pyi +101 -0
  46. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTreeObject.pyi +69 -0
  47. codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptUserManagement.pyi +779 -0
  48. codesys_api/assets/ScriptLib/Stubs/scriptengine/TriggerEdge.pyi +32 -0
  49. codesys_api/assets/ScriptLib/Stubs/scriptengine/TriggerState.pyi +32 -0
  50. codesys_api/assets/ScriptLib/Stubs/scriptengine/__init__-extension.py +2 -0
  51. codesys_api/assets/ScriptLib/Stubs/scriptengine/__init__.py +63 -0
  52. codesys_api/assets/ScriptLib/Stubs/scriptengine/dotNETs.pyi +166 -0
  53. codesys_api/assets/ScriptLib/Stubs/scriptengine/init-extender.bat +33 -0
  54. codesys_api/assets/ScriptLib/example_scripts/BaseHTTPServer.py +614 -0
  55. codesys_api/assets/ScriptLib/example_scripts/Bastion.py +180 -0
  56. codesys_api/assets/ScriptLib/example_scripts/CGIHTTPServer.py +378 -0
  57. codesys_api/assets/ScriptLib/example_scripts/ConfigParser.py +753 -0
  58. codesys_api/assets/ScriptLib/example_scripts/Cookie.py +773 -0
  59. codesys_api/assets/ScriptLib/example_scripts/DocXMLRPCServer.py +290 -0
  60. codesys_api/assets/ScriptLib/example_scripts/HTMLParser.py +476 -0
  61. codesys_api/assets/ScriptLib/example_scripts/MimeWriter.py +186 -0
  62. codesys_api/assets/ScriptLib/example_scripts/Queue.py +244 -0
  63. codesys_api/assets/ScriptLib/example_scripts/SimpleHTTPServer.py +235 -0
  64. codesys_api/assets/ScriptLib/example_scripts/SimpleXMLRPCServer.py +708 -0
  65. codesys_api/assets/ScriptLib/example_scripts/SocketServer.py +734 -0
  66. codesys_api/assets/ScriptLib/example_scripts/StringIO.py +324 -0
  67. codesys_api/assets/ScriptLib/example_scripts/UserDict.py +213 -0
  68. codesys_api/assets/ScriptLib/example_scripts/UserList.py +88 -0
  69. codesys_api/assets/ScriptLib/example_scripts/UserString.py +228 -0
  70. codesys_api/assets/ScriptLib/example_scripts/_LWPCookieJar.py +170 -0
  71. codesys_api/assets/ScriptLib/example_scripts/_MozillaCookieJar.py +149 -0
  72. codesys_api/assets/ScriptLib/example_scripts/__future__.py +128 -0
  73. codesys_api/assets/ScriptLib/example_scripts/__phello__.foo.py +1 -0
  74. codesys_api/assets/ScriptLib/example_scripts/_abcoll.py +695 -0
  75. codesys_api/assets/ScriptLib/example_scripts/_osx_support.py +502 -0
  76. codesys_api/assets/ScriptLib/example_scripts/_pyio.py +2038 -0
  77. codesys_api/assets/ScriptLib/example_scripts/_strptime.py +478 -0
  78. codesys_api/assets/ScriptLib/example_scripts/_threading_local.py +247 -0
  79. codesys_api/assets/ScriptLib/example_scripts/_weakrefset.py +205 -0
  80. codesys_api/assets/ScriptLib/example_scripts/abc.py +185 -0
  81. codesys_api/assets/ScriptLib/example_scripts/aifc.py +1000 -0
  82. codesys_api/assets/ScriptLib/example_scripts/antigravity.py +4 -0
  83. codesys_api/assets/ScriptLib/example_scripts/anydbm.py +85 -0
  84. codesys_api/assets/ScriptLib/example_scripts/argparse.py +2378 -0
  85. codesys_api/assets/ScriptLib/example_scripts/ast.py +311 -0
  86. codesys_api/assets/ScriptLib/example_scripts/asynchat.py +321 -0
  87. codesys_api/assets/ScriptLib/example_scripts/asyncore.py +663 -0
  88. codesys_api/assets/ScriptLib/example_scripts/atexit.py +65 -0
  89. codesys_api/assets/ScriptLib/example_scripts/audiodev.py +260 -0
  90. codesys_api/assets/ScriptLib/example_scripts/base64.py +367 -0
  91. codesys_api/assets/ScriptLib/example_scripts/bdb.py +645 -0
  92. codesys_api/assets/ScriptLib/example_scripts/binhex.py +518 -0
  93. codesys_api/assets/ScriptLib/example_scripts/bisect.py +92 -0
  94. codesys_api/assets/ScriptLib/example_scripts/calendar.py +714 -0
  95. codesys_api/assets/ScriptLib/example_scripts/cgi.py +1083 -0
  96. codesys_api/assets/ScriptLib/example_scripts/cgitb.py +323 -0
  97. codesys_api/assets/ScriptLib/example_scripts/chunk.py +169 -0
  98. codesys_api/assets/ScriptLib/example_scripts/clrtype.py +630 -0
  99. codesys_api/assets/ScriptLib/example_scripts/cmd.py +404 -0
  100. codesys_api/assets/ScriptLib/example_scripts/code.py +310 -0
  101. codesys_api/assets/ScriptLib/example_scripts/codecs.py +1115 -0
  102. codesys_api/assets/ScriptLib/example_scripts/codeop.py +168 -0
  103. codesys_api/assets/ScriptLib/example_scripts/collections.py +742 -0
  104. codesys_api/assets/ScriptLib/example_scripts/colorsys.py +156 -0
  105. codesys_api/assets/ScriptLib/example_scripts/commands.py +90 -0
  106. codesys_api/assets/ScriptLib/example_scripts/compileall.py +227 -0
  107. codesys_api/assets/ScriptLib/example_scripts/contextlib.py +154 -0
  108. codesys_api/assets/ScriptLib/example_scripts/cookielib.py +1829 -0
  109. codesys_api/assets/ScriptLib/example_scripts/copy.py +433 -0
  110. codesys_api/assets/ScriptLib/example_scripts/csv.py +456 -0
  111. codesys_api/assets/ScriptLib/example_scripts/ctypes/__init__.py +558 -0
  112. codesys_api/assets/ScriptLib/example_scripts/ctypes/_endian.py +61 -0
  113. codesys_api/assets/ScriptLib/example_scripts/ctypes/macholib/__init__.py +9 -0
  114. codesys_api/assets/ScriptLib/example_scripts/ctypes/macholib/dyld.py +166 -0
  115. codesys_api/assets/ScriptLib/example_scripts/ctypes/macholib/dylib.py +63 -0
  116. codesys_api/assets/ScriptLib/example_scripts/ctypes/macholib/framework.py +65 -0
  117. codesys_api/assets/ScriptLib/example_scripts/ctypes/util.py +308 -0
  118. codesys_api/assets/ScriptLib/example_scripts/ctypes/wintypes.py +181 -0
  119. codesys_api/assets/ScriptLib/example_scripts/decimal.py +6233 -0
  120. codesys_api/assets/ScriptLib/example_scripts/difflib.py +2057 -0
  121. codesys_api/assets/ScriptLib/example_scripts/dircache.py +41 -0
  122. codesys_api/assets/ScriptLib/example_scripts/dis.py +224 -0
  123. codesys_api/assets/ScriptLib/example_scripts/distutils/__init__.py +13 -0
  124. codesys_api/assets/ScriptLib/example_scripts/distutils/archive_util.py +251 -0
  125. codesys_api/assets/ScriptLib/example_scripts/distutils/bcppcompiler.py +394 -0
  126. codesys_api/assets/ScriptLib/example_scripts/distutils/ccompiler.py +1097 -0
  127. codesys_api/assets/ScriptLib/example_scripts/distutils/cmd.py +457 -0
  128. codesys_api/assets/ScriptLib/example_scripts/distutils/command/__init__.py +33 -0
  129. codesys_api/assets/ScriptLib/example_scripts/distutils/command/bdist.py +146 -0
  130. codesys_api/assets/ScriptLib/example_scripts/distutils/command/bdist_dumb.py +133 -0
  131. codesys_api/assets/ScriptLib/example_scripts/distutils/command/bdist_rpm.py +588 -0
  132. codesys_api/assets/ScriptLib/example_scripts/distutils/command/bdist_wininst.py +368 -0
  133. codesys_api/assets/ScriptLib/example_scripts/distutils/command/build.py +147 -0
  134. codesys_api/assets/ScriptLib/example_scripts/distutils/command/build_clib.py +209 -0
  135. codesys_api/assets/ScriptLib/example_scripts/distutils/command/build_ext.py +769 -0
  136. codesys_api/assets/ScriptLib/example_scripts/distutils/command/build_py.py +394 -0
  137. codesys_api/assets/ScriptLib/example_scripts/distutils/command/build_scripts.py +131 -0
  138. codesys_api/assets/ScriptLib/example_scripts/distutils/command/check.py +150 -0
  139. codesys_api/assets/ScriptLib/example_scripts/distutils/command/clean.py +80 -0
  140. codesys_api/assets/ScriptLib/example_scripts/distutils/command/config.py +357 -0
  141. codesys_api/assets/ScriptLib/example_scripts/distutils/command/install.py +672 -0
  142. codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_data.py +81 -0
  143. codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_egg_info.py +78 -0
  144. codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_headers.py +51 -0
  145. codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_lib.py +219 -0
  146. codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_scripts.py +64 -0
  147. codesys_api/assets/ScriptLib/example_scripts/distutils/command/register.py +315 -0
  148. codesys_api/assets/ScriptLib/example_scripts/distutils/command/sdist.py +477 -0
  149. codesys_api/assets/ScriptLib/example_scripts/distutils/command/upload.py +194 -0
  150. codesys_api/assets/ScriptLib/example_scripts/distutils/config.py +116 -0
  151. codesys_api/assets/ScriptLib/example_scripts/distutils/core.py +239 -0
  152. codesys_api/assets/ScriptLib/example_scripts/distutils/cygwinccompiler.py +463 -0
  153. codesys_api/assets/ScriptLib/example_scripts/distutils/debug.py +7 -0
  154. codesys_api/assets/ScriptLib/example_scripts/distutils/dep_util.py +89 -0
  155. codesys_api/assets/ScriptLib/example_scripts/distutils/dir_util.py +214 -0
  156. codesys_api/assets/ScriptLib/example_scripts/distutils/dist.py +1249 -0
  157. codesys_api/assets/ScriptLib/example_scripts/distutils/emxccompiler.py +319 -0
  158. codesys_api/assets/ScriptLib/example_scripts/distutils/errors.py +88 -0
  159. codesys_api/assets/ScriptLib/example_scripts/distutils/extension.py +255 -0
  160. codesys_api/assets/ScriptLib/example_scripts/distutils/fancy_getopt.py +484 -0
  161. codesys_api/assets/ScriptLib/example_scripts/distutils/file_util.py +239 -0
  162. codesys_api/assets/ScriptLib/example_scripts/distutils/filelist.py +343 -0
  163. codesys_api/assets/ScriptLib/example_scripts/distutils/log.py +71 -0
  164. codesys_api/assets/ScriptLib/example_scripts/distutils/msvccompiler.py +659 -0
  165. codesys_api/assets/ScriptLib/example_scripts/distutils/spawn.py +227 -0
  166. codesys_api/assets/ScriptLib/example_scripts/distutils/sysconfig.py +493 -0
  167. codesys_api/assets/ScriptLib/example_scripts/distutils/text_file.py +304 -0
  168. codesys_api/assets/ScriptLib/example_scripts/distutils/unixccompiler.py +312 -0
  169. codesys_api/assets/ScriptLib/example_scripts/distutils/util.py +482 -0
  170. codesys_api/assets/ScriptLib/example_scripts/distutils/version.py +299 -0
  171. codesys_api/assets/ScriptLib/example_scripts/distutils/versionpredicate.py +164 -0
  172. codesys_api/assets/ScriptLib/example_scripts/doctest.py +2815 -0
  173. codesys_api/assets/ScriptLib/example_scripts/dumbdbm.py +253 -0
  174. codesys_api/assets/ScriptLib/example_scripts/dummy_thread.py +145 -0
  175. codesys_api/assets/ScriptLib/example_scripts/dummy_threading.py +78 -0
  176. codesys_api/assets/ScriptLib/example_scripts/email/__init__.py +123 -0
  177. codesys_api/assets/ScriptLib/example_scripts/email/_parseaddr.py +506 -0
  178. codesys_api/assets/ScriptLib/example_scripts/email/base64mime.py +183 -0
  179. codesys_api/assets/ScriptLib/example_scripts/email/charset.py +397 -0
  180. codesys_api/assets/ScriptLib/example_scripts/email/encoders.py +82 -0
  181. codesys_api/assets/ScriptLib/example_scripts/email/errors.py +57 -0
  182. codesys_api/assets/ScriptLib/example_scripts/email/feedparser.py +485 -0
  183. codesys_api/assets/ScriptLib/example_scripts/email/generator.py +371 -0
  184. codesys_api/assets/ScriptLib/example_scripts/email/header.py +514 -0
  185. codesys_api/assets/ScriptLib/example_scripts/email/iterators.py +73 -0
  186. codesys_api/assets/ScriptLib/example_scripts/email/message.py +797 -0
  187. codesys_api/assets/ScriptLib/example_scripts/email/mime/__init__.py +0 -0
  188. codesys_api/assets/ScriptLib/example_scripts/email/mime/application.py +36 -0
  189. codesys_api/assets/ScriptLib/example_scripts/email/mime/audio.py +73 -0
  190. codesys_api/assets/ScriptLib/example_scripts/email/mime/base.py +26 -0
  191. codesys_api/assets/ScriptLib/example_scripts/email/mime/image.py +46 -0
  192. codesys_api/assets/ScriptLib/example_scripts/email/mime/message.py +34 -0
  193. codesys_api/assets/ScriptLib/example_scripts/email/mime/multipart.py +47 -0
  194. codesys_api/assets/ScriptLib/example_scripts/email/mime/nonmultipart.py +22 -0
  195. codesys_api/assets/ScriptLib/example_scripts/email/mime/text.py +30 -0
  196. codesys_api/assets/ScriptLib/example_scripts/email/parser.py +91 -0
  197. codesys_api/assets/ScriptLib/example_scripts/email/quoprimime.py +336 -0
  198. codesys_api/assets/ScriptLib/example_scripts/email/utils.py +329 -0
  199. codesys_api/assets/ScriptLib/example_scripts/encodings/__init__.py +157 -0
  200. codesys_api/assets/ScriptLib/example_scripts/encodings/aliases.py +527 -0
  201. codesys_api/assets/ScriptLib/example_scripts/encodings/ascii.py +50 -0
  202. codesys_api/assets/ScriptLib/example_scripts/encodings/base64_codec.py +80 -0
  203. codesys_api/assets/ScriptLib/example_scripts/encodings/bz2_codec.py +103 -0
  204. codesys_api/assets/ScriptLib/example_scripts/encodings/charmap.py +69 -0
  205. codesys_api/assets/ScriptLib/example_scripts/encodings/cp037.py +307 -0
  206. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1006.py +307 -0
  207. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1026.py +307 -0
  208. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1140.py +307 -0
  209. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1250.py +307 -0
  210. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1251.py +307 -0
  211. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1252.py +307 -0
  212. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1253.py +307 -0
  213. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1254.py +307 -0
  214. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1255.py +307 -0
  215. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1256.py +307 -0
  216. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1257.py +307 -0
  217. codesys_api/assets/ScriptLib/example_scripts/encodings/cp1258.py +307 -0
  218. codesys_api/assets/ScriptLib/example_scripts/encodings/cp424.py +307 -0
  219. codesys_api/assets/ScriptLib/example_scripts/encodings/cp437.py +698 -0
  220. codesys_api/assets/ScriptLib/example_scripts/encodings/cp500.py +307 -0
  221. codesys_api/assets/ScriptLib/example_scripts/encodings/cp720.py +309 -0
  222. codesys_api/assets/ScriptLib/example_scripts/encodings/cp737.py +698 -0
  223. codesys_api/assets/ScriptLib/example_scripts/encodings/cp775.py +697 -0
  224. codesys_api/assets/ScriptLib/example_scripts/encodings/cp850.py +698 -0
  225. codesys_api/assets/ScriptLib/example_scripts/encodings/cp852.py +698 -0
  226. codesys_api/assets/ScriptLib/example_scripts/encodings/cp855.py +698 -0
  227. codesys_api/assets/ScriptLib/example_scripts/encodings/cp856.py +307 -0
  228. codesys_api/assets/ScriptLib/example_scripts/encodings/cp857.py +694 -0
  229. codesys_api/assets/ScriptLib/example_scripts/encodings/cp858.py +698 -0
  230. codesys_api/assets/ScriptLib/example_scripts/encodings/cp860.py +698 -0
  231. codesys_api/assets/ScriptLib/example_scripts/encodings/cp861.py +698 -0
  232. codesys_api/assets/ScriptLib/example_scripts/encodings/cp862.py +698 -0
  233. codesys_api/assets/ScriptLib/example_scripts/encodings/cp863.py +698 -0
  234. codesys_api/assets/ScriptLib/example_scripts/encodings/cp864.py +690 -0
  235. codesys_api/assets/ScriptLib/example_scripts/encodings/cp865.py +698 -0
  236. codesys_api/assets/ScriptLib/example_scripts/encodings/cp866.py +698 -0
  237. codesys_api/assets/ScriptLib/example_scripts/encodings/cp869.py +689 -0
  238. codesys_api/assets/ScriptLib/example_scripts/encodings/cp874.py +307 -0
  239. codesys_api/assets/ScriptLib/example_scripts/encodings/cp875.py +307 -0
  240. codesys_api/assets/ScriptLib/example_scripts/encodings/hex_codec.py +80 -0
  241. codesys_api/assets/ScriptLib/example_scripts/encodings/hp_roman8.py +152 -0
  242. codesys_api/assets/ScriptLib/example_scripts/encodings/idna.py +288 -0
  243. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_1.py +307 -0
  244. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_10.py +307 -0
  245. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_11.py +307 -0
  246. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_13.py +307 -0
  247. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_14.py +307 -0
  248. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_15.py +307 -0
  249. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_16.py +307 -0
  250. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_2.py +307 -0
  251. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_3.py +307 -0
  252. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_4.py +307 -0
  253. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_5.py +307 -0
  254. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_6.py +307 -0
  255. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_7.py +307 -0
  256. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_8.py +307 -0
  257. codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_9.py +307 -0
  258. codesys_api/assets/ScriptLib/example_scripts/encodings/koi8_r.py +307 -0
  259. codesys_api/assets/ScriptLib/example_scripts/encodings/koi8_u.py +307 -0
  260. codesys_api/assets/ScriptLib/example_scripts/encodings/latin_1.py +50 -0
  261. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_arabic.py +698 -0
  262. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_centeuro.py +307 -0
  263. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_croatian.py +307 -0
  264. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_cyrillic.py +307 -0
  265. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_farsi.py +307 -0
  266. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_greek.py +307 -0
  267. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_iceland.py +307 -0
  268. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_latin2.py +183 -0
  269. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_roman.py +307 -0
  270. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_romanian.py +307 -0
  271. codesys_api/assets/ScriptLib/example_scripts/encodings/mac_turkish.py +307 -0
  272. codesys_api/assets/ScriptLib/example_scripts/encodings/mbcs.py +47 -0
  273. codesys_api/assets/ScriptLib/example_scripts/encodings/palmos.py +83 -0
  274. codesys_api/assets/ScriptLib/example_scripts/encodings/ptcp154.py +175 -0
  275. codesys_api/assets/ScriptLib/example_scripts/encodings/punycode.py +238 -0
  276. codesys_api/assets/ScriptLib/example_scripts/encodings/quopri_codec.py +76 -0
  277. codesys_api/assets/ScriptLib/example_scripts/encodings/raw_unicode_escape.py +45 -0
  278. codesys_api/assets/ScriptLib/example_scripts/encodings/rot_13.py +119 -0
  279. codesys_api/assets/ScriptLib/example_scripts/encodings/string_escape.py +38 -0
  280. codesys_api/assets/ScriptLib/example_scripts/encodings/tis_620.py +307 -0
  281. codesys_api/assets/ScriptLib/example_scripts/encodings/undefined.py +49 -0
  282. codesys_api/assets/ScriptLib/example_scripts/encodings/unicode_escape.py +45 -0
  283. codesys_api/assets/ScriptLib/example_scripts/encodings/unicode_internal.py +45 -0
  284. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_16.py +126 -0
  285. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_16_be.py +42 -0
  286. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_16_le.py +42 -0
  287. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_32.py +150 -0
  288. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_32_be.py +37 -0
  289. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_32_le.py +37 -0
  290. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_7.py +38 -0
  291. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_8.py +42 -0
  292. codesys_api/assets/ScriptLib/example_scripts/encodings/utf_8_sig.py +117 -0
  293. codesys_api/assets/ScriptLib/example_scripts/encodings/uu_codec.py +134 -0
  294. codesys_api/assets/ScriptLib/example_scripts/encodings/zlib_codec.py +103 -0
  295. codesys_api/assets/ScriptLib/example_scripts/filecmp.py +296 -0
  296. codesys_api/assets/ScriptLib/example_scripts/fileinput.py +405 -0
  297. codesys_api/assets/ScriptLib/example_scripts/fnmatch.py +120 -0
  298. codesys_api/assets/ScriptLib/example_scripts/formatter.py +445 -0
  299. codesys_api/assets/ScriptLib/example_scripts/fpformat.py +146 -0
  300. codesys_api/assets/ScriptLib/example_scripts/fractions.py +605 -0
  301. codesys_api/assets/ScriptLib/example_scripts/ftplib.py +1090 -0
  302. codesys_api/assets/ScriptLib/example_scripts/functools.py +105 -0
  303. codesys_api/assets/ScriptLib/example_scripts/genericpath.py +113 -0
  304. codesys_api/assets/ScriptLib/example_scripts/getopt.py +210 -0
  305. codesys_api/assets/ScriptLib/example_scripts/getpass.py +179 -0
  306. codesys_api/assets/ScriptLib/example_scripts/gettext.py +667 -0
  307. codesys_api/assets/ScriptLib/example_scripts/glob.py +100 -0
  308. codesys_api/assets/ScriptLib/example_scripts/gzip.py +526 -0
  309. codesys_api/assets/ScriptLib/example_scripts/hashlib.py +221 -0
  310. codesys_api/assets/ScriptLib/example_scripts/heapq.py +485 -0
  311. codesys_api/assets/ScriptLib/example_scripts/hmac.py +136 -0
  312. codesys_api/assets/ScriptLib/example_scripts/htmlentitydefs.py +273 -0
  313. codesys_api/assets/ScriptLib/example_scripts/htmllib.py +491 -0
  314. codesys_api/assets/ScriptLib/example_scripts/httplib.py +1470 -0
  315. codesys_api/assets/ScriptLib/example_scripts/ihooks.py +554 -0
  316. codesys_api/assets/ScriptLib/example_scripts/imaplib.py +1529 -0
  317. codesys_api/assets/ScriptLib/example_scripts/imghdr.py +159 -0
  318. codesys_api/assets/ScriptLib/example_scripts/importlib/__init__.py +38 -0
  319. codesys_api/assets/ScriptLib/example_scripts/imputil.py +725 -0
  320. codesys_api/assets/ScriptLib/example_scripts/inspect.py +1073 -0
  321. codesys_api/assets/ScriptLib/example_scripts/io.py +90 -0
  322. codesys_api/assets/ScriptLib/example_scripts/json/__init__.py +352 -0
  323. codesys_api/assets/ScriptLib/example_scripts/json/decoder.py +383 -0
  324. codesys_api/assets/ScriptLib/example_scripts/json/encoder.py +448 -0
  325. codesys_api/assets/ScriptLib/example_scripts/json/scanner.py +67 -0
  326. codesys_api/assets/ScriptLib/example_scripts/json/tool.py +40 -0
  327. codesys_api/assets/ScriptLib/example_scripts/keyword.py +93 -0
  328. codesys_api/assets/ScriptLib/example_scripts/lib2to3/__init__.py +1 -0
  329. codesys_api/assets/ScriptLib/example_scripts/lib2to3/__main__.py +4 -0
  330. codesys_api/assets/ScriptLib/example_scripts/lib2to3/btm_matcher.py +168 -0
  331. codesys_api/assets/ScriptLib/example_scripts/lib2to3/btm_utils.py +283 -0
  332. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixer_base.py +187 -0
  333. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixer_util.py +432 -0
  334. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/__init__.py +1 -0
  335. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_apply.py +70 -0
  336. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_asserts.py +34 -0
  337. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_basestring.py +14 -0
  338. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_buffer.py +22 -0
  339. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_dict.py +107 -0
  340. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_except.py +93 -0
  341. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_exec.py +40 -0
  342. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_execfile.py +53 -0
  343. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_exitfunc.py +72 -0
  344. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_filter.py +76 -0
  345. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_funcattrs.py +21 -0
  346. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_future.py +22 -0
  347. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_getcwdu.py +19 -0
  348. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_has_key.py +110 -0
  349. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_idioms.py +152 -0
  350. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_import.py +99 -0
  351. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_imports.py +145 -0
  352. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_imports2.py +16 -0
  353. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_input.py +26 -0
  354. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_intern.py +56 -0
  355. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_isinstance.py +52 -0
  356. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_itertools.py +43 -0
  357. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_itertools_imports.py +57 -0
  358. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_long.py +19 -0
  359. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_map.py +91 -0
  360. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_metaclass.py +228 -0
  361. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_methodattrs.py +24 -0
  362. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_ne.py +23 -0
  363. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_next.py +103 -0
  364. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_nonzero.py +21 -0
  365. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_numliterals.py +28 -0
  366. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_operator.py +96 -0
  367. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_paren.py +44 -0
  368. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_print.py +87 -0
  369. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_raise.py +90 -0
  370. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_raw_input.py +17 -0
  371. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_reduce.py +35 -0
  372. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_renames.py +70 -0
  373. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_repr.py +23 -0
  374. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_set_literal.py +53 -0
  375. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_standarderror.py +18 -0
  376. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_sys_exc.py +30 -0
  377. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_throw.py +56 -0
  378. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_tuple_params.py +175 -0
  379. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_types.py +62 -0
  380. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_unicode.py +42 -0
  381. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_urllib.py +197 -0
  382. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_ws_comma.py +39 -0
  383. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_xrange.py +73 -0
  384. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_xreadlines.py +25 -0
  385. codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_zip.py +35 -0
  386. codesys_api/assets/ScriptLib/example_scripts/lib2to3/main.py +269 -0
  387. codesys_api/assets/ScriptLib/example_scripts/lib2to3/patcomp.py +204 -0
  388. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/__init__.py +4 -0
  389. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/conv.py +257 -0
  390. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/driver.py +181 -0
  391. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/grammar.py +212 -0
  392. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/literals.py +60 -0
  393. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/parse.py +201 -0
  394. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/pgen.py +386 -0
  395. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/token.py +83 -0
  396. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/tokenize.py +502 -0
  397. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pygram.py +40 -0
  398. codesys_api/assets/ScriptLib/example_scripts/lib2to3/pytree.py +887 -0
  399. codesys_api/assets/ScriptLib/example_scripts/lib2to3/refactor.py +747 -0
  400. codesys_api/assets/ScriptLib/example_scripts/linecache.py +139 -0
  401. codesys_api/assets/ScriptLib/example_scripts/locale.py +2125 -0
  402. codesys_api/assets/ScriptLib/example_scripts/logging/__init__.py +1751 -0
  403. codesys_api/assets/ScriptLib/example_scripts/logging/config.py +919 -0
  404. codesys_api/assets/ScriptLib/example_scripts/logging/handlers.py +1242 -0
  405. codesys_api/assets/ScriptLib/example_scripts/macpath.py +216 -0
  406. codesys_api/assets/ScriptLib/example_scripts/macurl2path.py +77 -0
  407. codesys_api/assets/ScriptLib/example_scripts/mailbox.py +2240 -0
  408. codesys_api/assets/ScriptLib/example_scripts/mailcap.py +255 -0
  409. codesys_api/assets/ScriptLib/example_scripts/markupbase.py +396 -0
  410. codesys_api/assets/ScriptLib/example_scripts/md5.py +14 -0
  411. codesys_api/assets/ScriptLib/example_scripts/mhlib.py +1005 -0
  412. codesys_api/assets/ScriptLib/example_scripts/mimetools.py +250 -0
  413. codesys_api/assets/ScriptLib/example_scripts/mimetypes.py +602 -0
  414. codesys_api/assets/ScriptLib/example_scripts/mimify.py +468 -0
  415. codesys_api/assets/ScriptLib/example_scripts/modulefinder.py +716 -0
  416. codesys_api/assets/ScriptLib/example_scripts/multifile.py +162 -0
  417. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/__init__.py +281 -0
  418. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/connection.py +477 -0
  419. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/dummy/__init__.py +153 -0
  420. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/dummy/connection.py +87 -0
  421. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/forking.py +527 -0
  422. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/heap.py +254 -0
  423. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/managers.py +1120 -0
  424. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/pool.py +749 -0
  425. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/process.py +332 -0
  426. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/queues.py +393 -0
  427. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/reduction.py +215 -0
  428. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/sharedctypes.py +271 -0
  429. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/synchronize.py +344 -0
  430. codesys_api/assets/ScriptLib/example_scripts/multiprocessing/util.py +353 -0
  431. codesys_api/assets/ScriptLib/example_scripts/mutex.py +55 -0
  432. codesys_api/assets/ScriptLib/example_scripts/netrc.py +145 -0
  433. codesys_api/assets/ScriptLib/example_scripts/new.py +17 -0
  434. codesys_api/assets/ScriptLib/example_scripts/nntplib.py +636 -0
  435. codesys_api/assets/ScriptLib/example_scripts/ntpath.py +550 -0
  436. codesys_api/assets/ScriptLib/example_scripts/nturl2path.py +68 -0
  437. codesys_api/assets/ScriptLib/example_scripts/numbers.py +391 -0
  438. codesys_api/assets/ScriptLib/example_scripts/opcode.py +192 -0
  439. codesys_api/assets/ScriptLib/example_scripts/optparse.py +1704 -0
  440. codesys_api/assets/ScriptLib/example_scripts/os.py +742 -0
  441. codesys_api/assets/ScriptLib/example_scripts/os2emxpath.py +160 -0
  442. codesys_api/assets/ScriptLib/example_scripts/pdb.py +1341 -0
  443. codesys_api/assets/ScriptLib/example_scripts/pickle.py +1397 -0
  444. codesys_api/assets/ScriptLib/example_scripts/pickletools.py +2270 -0
  445. codesys_api/assets/ScriptLib/example_scripts/pipes.py +278 -0
  446. codesys_api/assets/ScriptLib/example_scripts/pkgutil.py +589 -0
  447. codesys_api/assets/ScriptLib/example_scripts/platform.py +1658 -0
  448. codesys_api/assets/ScriptLib/example_scripts/plistlib.py +474 -0
  449. codesys_api/assets/ScriptLib/example_scripts/popen2.py +201 -0
  450. codesys_api/assets/ScriptLib/example_scripts/poplib.py +427 -0
  451. codesys_api/assets/ScriptLib/example_scripts/posixfile.py +237 -0
  452. codesys_api/assets/ScriptLib/example_scripts/posixpath.py +446 -0
  453. codesys_api/assets/ScriptLib/example_scripts/pprint.py +346 -0
  454. codesys_api/assets/ScriptLib/example_scripts/profile.py +610 -0
  455. codesys_api/assets/ScriptLib/example_scripts/pstats.py +705 -0
  456. codesys_api/assets/ScriptLib/example_scripts/py_compile.py +118 -0
  457. codesys_api/assets/ScriptLib/example_scripts/pyclbr.py +344 -0
  458. codesys_api/assets/ScriptLib/example_scripts/pydoc.py +2416 -0
  459. codesys_api/assets/ScriptLib/example_scripts/pydoc_data/__init__.py +0 -0
  460. codesys_api/assets/ScriptLib/example_scripts/pydoc_data/topics.py +13578 -0
  461. codesys_api/assets/ScriptLib/example_scripts/quopri.py +237 -0
  462. codesys_api/assets/ScriptLib/example_scripts/random.py +912 -0
  463. codesys_api/assets/ScriptLib/example_scripts/repr.py +132 -0
  464. codesys_api/assets/ScriptLib/example_scripts/rexec.py +588 -0
  465. codesys_api/assets/ScriptLib/example_scripts/rfc822.py +1016 -0
  466. codesys_api/assets/ScriptLib/example_scripts/rlcompleter.py +172 -0
  467. codesys_api/assets/ScriptLib/example_scripts/robotparser.py +236 -0
  468. codesys_api/assets/ScriptLib/example_scripts/runpy.py +290 -0
  469. codesys_api/assets/ScriptLib/example_scripts/sched.py +134 -0
  470. codesys_api/assets/ScriptLib/example_scripts/sets.py +557 -0
  471. codesys_api/assets/ScriptLib/example_scripts/sgmllib.py +553 -0
  472. codesys_api/assets/ScriptLib/example_scripts/sha.py +15 -0
  473. codesys_api/assets/ScriptLib/example_scripts/shelve.py +243 -0
  474. codesys_api/assets/ScriptLib/example_scripts/shlex.py +292 -0
  475. codesys_api/assets/ScriptLib/example_scripts/shutil.py +602 -0
  476. codesys_api/assets/ScriptLib/example_scripts/site-packages/README.txt +2 -0
  477. codesys_api/assets/ScriptLib/example_scripts/site.py +595 -0
  478. codesys_api/assets/ScriptLib/example_scripts/smtpd.py +555 -0
  479. codesys_api/assets/ScriptLib/example_scripts/smtplib.py +884 -0
  480. codesys_api/assets/ScriptLib/example_scripts/sndhdr.py +228 -0
  481. codesys_api/assets/ScriptLib/example_scripts/socket.py +577 -0
  482. codesys_api/assets/ScriptLib/example_scripts/sqlite3/__init__.py +35 -0
  483. codesys_api/assets/ScriptLib/example_scripts/sqlite3/dbapi2.py +90 -0
  484. codesys_api/assets/ScriptLib/example_scripts/sqlite3/dump.py +70 -0
  485. codesys_api/assets/ScriptLib/example_scripts/sre_constants.py +263 -0
  486. codesys_api/assets/ScriptLib/example_scripts/sre_parse.py +862 -0
  487. codesys_api/assets/ScriptLib/example_scripts/ssl.py +1035 -0
  488. codesys_api/assets/ScriptLib/example_scripts/stat.py +96 -0
  489. codesys_api/assets/ScriptLib/example_scripts/statvfs.py +18 -0
  490. codesys_api/assets/ScriptLib/example_scripts/string.py +656 -0
  491. codesys_api/assets/ScriptLib/example_scripts/stringold.py +432 -0
  492. codesys_api/assets/ScriptLib/example_scripts/stringprep.py +272 -0
  493. codesys_api/assets/ScriptLib/example_scripts/struct.py +3 -0
  494. codesys_api/assets/ScriptLib/example_scripts/subprocess.py +1504 -0
  495. codesys_api/assets/ScriptLib/example_scripts/sunau.py +493 -0
  496. codesys_api/assets/ScriptLib/example_scripts/sunaudio.py +49 -0
  497. codesys_api/assets/ScriptLib/example_scripts/symbol.py +114 -0
  498. codesys_api/assets/ScriptLib/example_scripts/sysconfig.py +647 -0
  499. codesys_api/assets/ScriptLib/example_scripts/tabnanny.py +329 -0
  500. codesys_api/assets/ScriptLib/example_scripts/tarfile.py +2630 -0
  501. codesys_api/assets/ScriptLib/example_scripts/telnetlib.py +791 -0
  502. codesys_api/assets/ScriptLib/example_scripts/tempfile.py +640 -0
  503. codesys_api/assets/ScriptLib/example_scripts/textwrap.py +431 -0
  504. codesys_api/assets/ScriptLib/example_scripts/this.py +28 -0
  505. codesys_api/assets/ScriptLib/example_scripts/threading.py +1321 -0
  506. codesys_api/assets/ScriptLib/example_scripts/timeit.py +343 -0
  507. codesys_api/assets/ScriptLib/example_scripts/toaiff.py +110 -0
  508. codesys_api/assets/ScriptLib/example_scripts/token.py +140 -0
  509. codesys_api/assets/ScriptLib/example_scripts/tokenize.py +449 -0
  510. codesys_api/assets/ScriptLib/example_scripts/trace.py +819 -0
  511. codesys_api/assets/ScriptLib/example_scripts/traceback.py +320 -0
  512. codesys_api/assets/ScriptLib/example_scripts/types.py +86 -0
  513. codesys_api/assets/ScriptLib/example_scripts/unittest/__init__.py +69 -0
  514. codesys_api/assets/ScriptLib/example_scripts/unittest/__main__.py +12 -0
  515. codesys_api/assets/ScriptLib/example_scripts/unittest/case.py +1083 -0
  516. codesys_api/assets/ScriptLib/example_scripts/unittest/loader.py +316 -0
  517. codesys_api/assets/ScriptLib/example_scripts/unittest/main.py +236 -0
  518. codesys_api/assets/ScriptLib/example_scripts/unittest/result.py +193 -0
  519. codesys_api/assets/ScriptLib/example_scripts/unittest/runner.py +196 -0
  520. codesys_api/assets/ScriptLib/example_scripts/unittest/signals.py +71 -0
  521. codesys_api/assets/ScriptLib/example_scripts/unittest/suite.py +303 -0
  522. codesys_api/assets/ScriptLib/example_scripts/unittest/util.py +156 -0
  523. codesys_api/assets/ScriptLib/example_scripts/urllib.py +1677 -0
  524. codesys_api/assets/ScriptLib/example_scripts/urllib2.py +1489 -0
  525. codesys_api/assets/ScriptLib/example_scripts/urlparse.py +464 -0
  526. codesys_api/assets/ScriptLib/example_scripts/user.py +48 -0
  527. codesys_api/assets/ScriptLib/example_scripts/uu.py +203 -0
  528. codesys_api/assets/ScriptLib/example_scripts/uuid.py +620 -0
  529. codesys_api/assets/ScriptLib/example_scripts/warnings.py +425 -0
  530. codesys_api/assets/ScriptLib/example_scripts/wave.py +517 -0
  531. codesys_api/assets/ScriptLib/example_scripts/weakref.py +491 -0
  532. codesys_api/assets/ScriptLib/example_scripts/webbrowser.py +704 -0
  533. codesys_api/assets/ScriptLib/example_scripts/whichdb.py +117 -0
  534. codesys_api/assets/ScriptLib/example_scripts/wpf.py +14 -0
  535. codesys_api/assets/ScriptLib/example_scripts/wsgiref/__init__.py +23 -0
  536. codesys_api/assets/ScriptLib/example_scripts/wsgiref/handlers.py +450 -0
  537. codesys_api/assets/ScriptLib/example_scripts/wsgiref/headers.py +169 -0
  538. codesys_api/assets/ScriptLib/example_scripts/wsgiref/simple_server.py +163 -0
  539. codesys_api/assets/ScriptLib/example_scripts/wsgiref/util.py +165 -0
  540. codesys_api/assets/ScriptLib/example_scripts/wsgiref/validate.py +432 -0
  541. codesys_api/assets/ScriptLib/example_scripts/xdrlib.py +248 -0
  542. codesys_api/assets/ScriptLib/example_scripts/xml/__init__.py +41 -0
  543. codesys_api/assets/ScriptLib/example_scripts/xml/dom/NodeFilter.py +27 -0
  544. codesys_api/assets/ScriptLib/example_scripts/xml/dom/__init__.py +139 -0
  545. codesys_api/assets/ScriptLib/example_scripts/xml/dom/domreg.py +101 -0
  546. codesys_api/assets/ScriptLib/example_scripts/xml/dom/expatbuilder.py +983 -0
  547. codesys_api/assets/ScriptLib/example_scripts/xml/dom/minicompat.py +110 -0
  548. codesys_api/assets/ScriptLib/example_scripts/xml/dom/minidom.py +1941 -0
  549. codesys_api/assets/ScriptLib/example_scripts/xml/dom/pulldom.py +351 -0
  550. codesys_api/assets/ScriptLib/example_scripts/xml/dom/xmlbuilder.py +386 -0
  551. codesys_api/assets/ScriptLib/example_scripts/xml/etree/ElementInclude.py +142 -0
  552. codesys_api/assets/ScriptLib/example_scripts/xml/etree/ElementPath.py +303 -0
  553. codesys_api/assets/ScriptLib/example_scripts/xml/etree/ElementTree.py +1684 -0
  554. codesys_api/assets/ScriptLib/example_scripts/xml/etree/SimpleXMLTreeBuilder.py +143 -0
  555. codesys_api/assets/ScriptLib/example_scripts/xml/etree/__init__.py +33 -0
  556. codesys_api/assets/ScriptLib/example_scripts/xml/etree/cElementTree.py +3 -0
  557. codesys_api/assets/ScriptLib/example_scripts/xml/parsers/__init__.py +8 -0
  558. codesys_api/assets/ScriptLib/example_scripts/xml/parsers/expat.py +4 -0
  559. codesys_api/assets/ScriptLib/example_scripts/xml/sax/__init__.py +108 -0
  560. codesys_api/assets/ScriptLib/example_scripts/xml/sax/_exceptions.py +131 -0
  561. codesys_api/assets/ScriptLib/example_scripts/xml/sax/expatreader.py +449 -0
  562. codesys_api/assets/ScriptLib/example_scripts/xml/sax/handler.py +342 -0
  563. codesys_api/assets/ScriptLib/example_scripts/xml/sax/saxutils.py +353 -0
  564. codesys_api/assets/ScriptLib/example_scripts/xml/sax/xmlreader.py +381 -0
  565. codesys_api/assets/ScriptLib/example_scripts/xmllib.py +930 -0
  566. codesys_api/assets/ScriptLib/example_scripts/xmlrpclib.py +1656 -0
  567. codesys_api/assets/ScriptLib/example_scripts/zipfile.py +1565 -0
  568. codesys_api/cli_entry.py +372 -0
  569. codesys_api/codesys_e2e_policy.py +15 -0
  570. codesys_api/codesys_process.py +395 -0
  571. codesys_api/engine_adapter.py +37 -0
  572. codesys_api/http_server.py +511 -0
  573. codesys_api/ironpython_script_engine.py +1018 -0
  574. codesys_api/named_pipe_transport.py +355 -0
  575. codesys_api/py.typed +1 -0
  576. codesys_api/runtime_paths.py +32 -0
  577. codesys_api/runtime_transport.py +24 -0
  578. codesys_api/script_executor.py +42 -0
  579. codesys_api/server_config.py +147 -0
  580. codesys_api/server_entry.py +23 -0
  581. codesys_api/server_logic.py +127 -0
  582. codesys_api/session_transport.py +31 -0
  583. codesys_api/transport_result.py +195 -0
  584. codesys_tools-0.2.0.dist-info/METADATA +149 -0
  585. codesys_tools-0.2.0.dist-info/RECORD +589 -0
  586. codesys_tools-0.2.0.dist-info/WHEEL +5 -0
  587. codesys_tools-0.2.0.dist-info/entry_points.txt +3 -0
  588. codesys_tools-0.2.0.dist-info/licenses/LICENSE +21 -0
  589. codesys_tools-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,2 @@
1
+ """Structured package for the host-side CODESYS API implementation."""
2
+
@@ -0,0 +1,493 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ import time
5
+ from dataclasses import dataclass, field
6
+ from enum import Enum
7
+ from pathlib import Path
8
+ from typing import Callable, Protocol
9
+
10
+ from .engine_adapter import EngineAdapter
11
+ from .server_logic import (
12
+ build_status_payload,
13
+ normalize_project_create_params,
14
+ validate_pou_code_params,
15
+ validate_required_params,
16
+ )
17
+
18
+
19
+ NowFn = Callable[[], float]
20
+ TimestampFn = Callable[[], str]
21
+
22
+
23
+ class ProcessManagerLike(Protocol):
24
+ def is_running(self) -> bool: ...
25
+
26
+ def start(self) -> bool: ...
27
+
28
+ def stop(self) -> bool: ...
29
+
30
+ def get_status(self) -> dict[str, object]: ...
31
+
32
+ def is_no_ui_mode(self) -> bool: ...
33
+
34
+ def set_no_ui_mode(self, no_ui: bool) -> None: ...
35
+
36
+ def reset_runtime_mode(self) -> None: ...
37
+
38
+
39
+ class ScriptExecutorLike(Protocol):
40
+ def execute_script(self, script: str, timeout: int = 60) -> dict[str, object]: ...
41
+
42
+
43
+ class ActionType(str, Enum):
44
+ SESSION_START = "session.start"
45
+ SESSION_STOP = "session.stop"
46
+ SESSION_RESTART = "session.restart"
47
+ SESSION_STATUS = "session.status"
48
+ SCRIPT_EXECUTE = "script.execute"
49
+ PROJECT_CREATE = "project.create"
50
+ PROJECT_OPEN = "project.open"
51
+ PROJECT_SAVE = "project.save"
52
+ PROJECT_CLOSE = "project.close"
53
+ PROJECT_LIST = "project.list"
54
+ PROJECT_COMPILE = "project.compile"
55
+ POU_CREATE = "pou.create"
56
+ POU_CODE = "pou.code"
57
+ POU_LIST = "pou.list"
58
+
59
+
60
+ @dataclass(frozen=True)
61
+ class ActionRequest:
62
+ action: ActionType
63
+ params: dict[str, object]
64
+ timeout: int | None = None
65
+ request_id: str | None = None
66
+
67
+
68
+ @dataclass(frozen=True)
69
+ class ActionResult:
70
+ body: dict[str, object]
71
+ status_code: int = 200
72
+ request_id: str | None = field(default=None, repr=False)
73
+
74
+
75
+ class ActionService:
76
+ def __init__(
77
+ self,
78
+ *,
79
+ process_manager: ProcessManagerLike,
80
+ script_executor: ScriptExecutorLike,
81
+ engine_adapter: EngineAdapter,
82
+ logger: logging.Logger,
83
+ now_fn: NowFn,
84
+ script_dir: Path,
85
+ timestamp_fn: TimestampFn = lambda: time.strftime("%Y%m%d_%H%M%S"),
86
+ sleep_fn: Callable[[float], None] = time.sleep,
87
+ ) -> None:
88
+ self.process_manager = process_manager
89
+ self.script_executor = script_executor
90
+ self.engine_adapter = engine_adapter
91
+ self.logger = logger
92
+ self.now_fn = now_fn
93
+ self.script_dir = script_dir
94
+ self.timestamp_fn = timestamp_fn
95
+ self.sleep_fn = sleep_fn
96
+
97
+ def execute(self, request: ActionRequest) -> ActionResult:
98
+ if request.action == ActionType.SESSION_START:
99
+ return self._session_start(request)
100
+ if request.action == ActionType.SESSION_STOP:
101
+ return self._session_stop(request)
102
+ if request.action == ActionType.SESSION_RESTART:
103
+ return self._session_restart(request)
104
+ if request.action == ActionType.SESSION_STATUS:
105
+ return self._session_status(request)
106
+ if request.action == ActionType.SCRIPT_EXECUTE:
107
+ return self._script_execute(request)
108
+ if request.action == ActionType.PROJECT_CREATE:
109
+ return self._project_create(request)
110
+ if request.action == ActionType.PROJECT_OPEN:
111
+ return self._project_open(request)
112
+ if request.action == ActionType.PROJECT_SAVE:
113
+ return self._project_save(request)
114
+ if request.action == ActionType.PROJECT_CLOSE:
115
+ return self._project_close(request)
116
+ if request.action == ActionType.PROJECT_LIST:
117
+ return self._project_list(request)
118
+ if request.action == ActionType.PROJECT_COMPILE:
119
+ return self._project_compile(request)
120
+ if request.action == ActionType.POU_CREATE:
121
+ return self._pou_create(request)
122
+ if request.action == ActionType.POU_CODE:
123
+ return self._pou_code(request)
124
+ if request.action == ActionType.POU_LIST:
125
+ return self._pou_list(request)
126
+
127
+ return ActionResult(body={"success": False, "error": "Unsupported action"}, status_code=400)
128
+
129
+ def _unsupported_action(self, action: ActionType, request_id: str | None) -> ActionResult:
130
+ return ActionResult(
131
+ body={
132
+ "success": False,
133
+ "error": f"Action not supported by engine: {action.value}",
134
+ "engine": self.engine_adapter.engine_name,
135
+ },
136
+ status_code=501,
137
+ request_id=request_id,
138
+ )
139
+
140
+ def _execute_engine_action(
141
+ self,
142
+ *,
143
+ action: ActionType,
144
+ params: dict[str, object],
145
+ timeout_override: int | None,
146
+ ) -> dict[str, object]:
147
+ execution = self.engine_adapter.build_execution(action.value, params)
148
+ raw_result = self.script_executor.execute_script(
149
+ execution.script,
150
+ timeout=timeout_override or execution.timeout,
151
+ )
152
+ return self.engine_adapter.normalize_result(action.value, raw_result)
153
+
154
+ def _session_start(self, request: ActionRequest) -> ActionResult:
155
+ if not self.engine_adapter.capabilities().session_start:
156
+ return self._unsupported_action(request.action, request.request_id)
157
+
158
+ self.logger.info("Session start requested - checking CODESYS process")
159
+
160
+ if not self.process_manager.is_running():
161
+ self.logger.info("CODESYS process not running, attempting to start")
162
+ if not self.process_manager.start():
163
+ return ActionResult(
164
+ body={"success": False, "error": "Failed to start CODESYS process"},
165
+ status_code=500,
166
+ request_id=request.request_id,
167
+ )
168
+
169
+ result = self._execute_engine_action(
170
+ action=request.action,
171
+ params={},
172
+ timeout_override=request.timeout,
173
+ )
174
+ return ActionResult(body=result, request_id=request.request_id)
175
+
176
+ def _session_stop(self, request: ActionRequest) -> ActionResult:
177
+ if not self.process_manager.stop():
178
+ return ActionResult(
179
+ body={"success": False, "error": "Failed to stop CODESYS session"},
180
+ status_code=500,
181
+ request_id=request.request_id,
182
+ )
183
+
184
+ self.process_manager.reset_runtime_mode()
185
+
186
+ return ActionResult(
187
+ body={"success": True, "message": "Session stopped"},
188
+ request_id=request.request_id,
189
+ )
190
+
191
+ def _session_restart(self, request: ActionRequest) -> ActionResult:
192
+ if not self.engine_adapter.capabilities().session_start:
193
+ return self._unsupported_action(request.action, request.request_id)
194
+
195
+ if not self.process_manager.stop():
196
+ return ActionResult(
197
+ body={"success": False, "error": "Failed to stop CODESYS session"},
198
+ status_code=500,
199
+ request_id=request.request_id,
200
+ )
201
+
202
+ self.process_manager.reset_runtime_mode()
203
+ self.sleep_fn(2.0)
204
+
205
+ if not self.process_manager.start():
206
+ return ActionResult(
207
+ body={"success": False, "error": "Failed to restart CODESYS session"},
208
+ status_code=500,
209
+ request_id=request.request_id,
210
+ )
211
+
212
+ result = self._execute_engine_action(
213
+ action=ActionType.SESSION_START,
214
+ params={},
215
+ timeout_override=request.timeout,
216
+ )
217
+ status_code = 200 if result.get("success", False) else 500
218
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
219
+
220
+ def _session_status(self, request: ActionRequest) -> ActionResult:
221
+ process_running = self.process_manager.is_running()
222
+ process_status = self.process_manager.get_status()
223
+
224
+ if process_running:
225
+ if not self.engine_adapter.capabilities().session_status:
226
+ return self._unsupported_action(request.action, request.request_id)
227
+ self.logger.info("Executing session status script in CODESYS")
228
+ status_result = self._execute_engine_action(
229
+ action=request.action,
230
+ params={},
231
+ timeout_override=request.timeout,
232
+ )
233
+ else:
234
+ status_result = None
235
+
236
+ status = build_status_payload(
237
+ process_running=process_running,
238
+ process_status=process_status,
239
+ session_status_result=status_result,
240
+ now=self.now_fn(),
241
+ )
242
+ return ActionResult(
243
+ body={"success": True, "status": status},
244
+ request_id=request.request_id,
245
+ )
246
+
247
+ def _script_execute(self, request: ActionRequest) -> ActionResult:
248
+ if not self.engine_adapter.capabilities().script_execute:
249
+ return self._unsupported_action(request.action, request.request_id)
250
+
251
+ script = request.params.get("script")
252
+ if not isinstance(script, str) or not script:
253
+ return ActionResult(
254
+ body={"success": False, "error": "Missing required parameter: script"},
255
+ status_code=400,
256
+ request_id=request.request_id,
257
+ )
258
+
259
+ first_line = script.split("\n")[0]
260
+ self.logger.info(
261
+ "Script execute request: %s",
262
+ first_line[:50] + "..." if len(first_line) > 50 else first_line,
263
+ )
264
+ result = self._execute_engine_action(
265
+ action=request.action,
266
+ params=request.params,
267
+ timeout_override=request.timeout,
268
+ )
269
+ return ActionResult(body=result, request_id=request.request_id)
270
+
271
+ def _project_create(self, request: ActionRequest) -> ActionResult:
272
+ if not self.engine_adapter.capabilities().project_create:
273
+ return self._unsupported_action(request.action, request.request_id)
274
+
275
+ params = normalize_project_create_params(request.params, str(self.script_dir), self.timestamp_fn())
276
+
277
+ if not self.process_manager.is_running():
278
+ self.logger.warning("CODESYS not running, attempting to start it")
279
+ if not self.process_manager.start():
280
+ return ActionResult(
281
+ body={"success": False, "error": "Failed to start CODESYS process"},
282
+ status_code=500,
283
+ request_id=request.request_id,
284
+ )
285
+
286
+ result = self._execute_engine_action(
287
+ action=request.action,
288
+ params=params,
289
+ timeout_override=request.timeout,
290
+ )
291
+ status_code = 200 if result.get("success", False) else 500
292
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
293
+
294
+ def _project_open(self, request: ActionRequest) -> ActionResult:
295
+ if not self.engine_adapter.capabilities().project_open:
296
+ return self._unsupported_action(request.action, request.request_id)
297
+
298
+ error = validate_required_params(request.params, ["path"])
299
+ if error is not None:
300
+ return ActionResult(
301
+ body={"success": False, "error": error},
302
+ status_code=400,
303
+ request_id=request.request_id,
304
+ )
305
+
306
+ result = self._execute_engine_action(
307
+ action=request.action,
308
+ params=request.params,
309
+ timeout_override=request.timeout,
310
+ )
311
+ status_code = 200 if result.get("success", False) else 500
312
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
313
+
314
+ def _project_save(self, request: ActionRequest) -> ActionResult:
315
+ if not self.engine_adapter.capabilities().project_save:
316
+ return self._unsupported_action(request.action, request.request_id)
317
+
318
+ result = self._execute_engine_action(
319
+ action=request.action,
320
+ params={},
321
+ timeout_override=request.timeout,
322
+ )
323
+ status_code = 200 if result.get("success", False) else 500
324
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
325
+
326
+ def _project_close(self, request: ActionRequest) -> ActionResult:
327
+ if not self.engine_adapter.capabilities().project_close:
328
+ return self._unsupported_action(request.action, request.request_id)
329
+
330
+ result = self._execute_engine_action(
331
+ action=request.action,
332
+ params={},
333
+ timeout_override=request.timeout,
334
+ )
335
+ status_code = 200 if result.get("success", False) else 500
336
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
337
+
338
+ def _project_list(self, request: ActionRequest) -> ActionResult:
339
+ if not self.engine_adapter.capabilities().project_list:
340
+ return self._unsupported_action(request.action, request.request_id)
341
+
342
+ result = self._execute_engine_action(
343
+ action=request.action,
344
+ params={},
345
+ timeout_override=request.timeout,
346
+ )
347
+ status_code = 200 if result.get("success", False) else 500
348
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
349
+
350
+ def _project_compile(self, request: ActionRequest) -> ActionResult:
351
+ if not self.engine_adapter.capabilities().project_compile:
352
+ return self._unsupported_action(request.action, request.request_id)
353
+
354
+ if self.process_manager.is_running() and self.process_manager.is_no_ui_mode():
355
+ return self._project_compile_with_ui_fallback(request)
356
+
357
+ result = self._execute_engine_action(
358
+ action=request.action,
359
+ params=request.params,
360
+ timeout_override=request.timeout,
361
+ )
362
+ status_code = 200 if result.get("success", False) else 500
363
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
364
+
365
+ def _project_compile_with_ui_fallback(self, request: ActionRequest) -> ActionResult:
366
+ session_status = self._execute_engine_action(
367
+ action=ActionType.SESSION_STATUS,
368
+ params={},
369
+ timeout_override=request.timeout,
370
+ )
371
+ status_payload = session_status.get("status")
372
+ project_path = None
373
+ if isinstance(status_payload, dict):
374
+ project = status_payload.get("project")
375
+ if isinstance(project, dict):
376
+ raw_path = project.get("path")
377
+ if isinstance(raw_path, str) and raw_path:
378
+ project_path = raw_path
379
+
380
+ if not project_path:
381
+ return ActionResult(
382
+ body={"success": False, "error": "Cannot recover active project path for noUI compile fallback"},
383
+ status_code=500,
384
+ request_id=request.request_id,
385
+ )
386
+
387
+ save_result = self._execute_engine_action(
388
+ action=ActionType.PROJECT_SAVE,
389
+ params={},
390
+ timeout_override=request.timeout,
391
+ )
392
+ if not save_result.get("success", False):
393
+ return ActionResult(body=save_result, status_code=500, request_id=request.request_id)
394
+
395
+ close_result = self._execute_engine_action(
396
+ action=ActionType.PROJECT_CLOSE,
397
+ params={},
398
+ timeout_override=request.timeout,
399
+ )
400
+ if not close_result.get("success", False):
401
+ return ActionResult(body=close_result, status_code=500, request_id=request.request_id)
402
+
403
+ if not self.process_manager.stop():
404
+ return ActionResult(
405
+ body={"success": False, "error": "Failed to stop CODESYS session for noUI compile fallback"},
406
+ status_code=500,
407
+ request_id=request.request_id,
408
+ )
409
+
410
+ self.process_manager.set_no_ui_mode(False)
411
+
412
+ if not self.process_manager.start():
413
+ return ActionResult(
414
+ body={"success": False, "error": "Failed to restart CODESYS in UI mode for compile"},
415
+ status_code=500,
416
+ request_id=request.request_id,
417
+ )
418
+
419
+ start_result = self._execute_engine_action(
420
+ action=ActionType.SESSION_START,
421
+ params={},
422
+ timeout_override=request.timeout,
423
+ )
424
+ if not start_result.get("success", False):
425
+ return ActionResult(body=start_result, status_code=500, request_id=request.request_id)
426
+
427
+ open_result = self._execute_engine_action(
428
+ action=ActionType.PROJECT_OPEN,
429
+ params={"path": project_path},
430
+ timeout_override=request.timeout,
431
+ )
432
+ if not open_result.get("success", False):
433
+ return ActionResult(body=open_result, status_code=500, request_id=request.request_id)
434
+
435
+ result = self._execute_engine_action(
436
+ action=request.action,
437
+ params=request.params,
438
+ timeout_override=request.timeout,
439
+ )
440
+ status_code = 200 if result.get("success", False) else 500
441
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
442
+
443
+ def _pou_create(self, request: ActionRequest) -> ActionResult:
444
+ if not self.engine_adapter.capabilities().pou_create:
445
+ return self._unsupported_action(request.action, request.request_id)
446
+
447
+ error = validate_required_params(request.params, ["name", "type", "language"])
448
+ if error is not None:
449
+ return ActionResult(
450
+ body={"success": False, "error": error},
451
+ status_code=400,
452
+ request_id=request.request_id,
453
+ )
454
+
455
+ result = self._execute_engine_action(
456
+ action=request.action,
457
+ params=request.params,
458
+ timeout_override=request.timeout,
459
+ )
460
+ status_code = 200 if result.get("success", False) else 500
461
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
462
+
463
+ def _pou_code(self, request: ActionRequest) -> ActionResult:
464
+ if not self.engine_adapter.capabilities().pou_code:
465
+ return self._unsupported_action(request.action, request.request_id)
466
+
467
+ error = validate_pou_code_params(request.params)
468
+ if error is not None:
469
+ return ActionResult(
470
+ body={"success": False, "error": error},
471
+ status_code=400,
472
+ request_id=request.request_id,
473
+ )
474
+
475
+ result = self._execute_engine_action(
476
+ action=request.action,
477
+ params=request.params,
478
+ timeout_override=request.timeout,
479
+ )
480
+ status_code = 200 if result.get("success", False) else 500
481
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
482
+
483
+ def _pou_list(self, request: ActionRequest) -> ActionResult:
484
+ if not self.engine_adapter.capabilities().pou_list:
485
+ return self._unsupported_action(request.action, request.request_id)
486
+
487
+ result = self._execute_engine_action(
488
+ action=request.action,
489
+ params=request.params,
490
+ timeout_override=request.timeout,
491
+ )
492
+ status_code = 200 if result.get("success", False) else 500
493
+ return ActionResult(body=result, status_code=status_code, request_id=request.request_id)
@@ -0,0 +1,45 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import time
5
+ from pathlib import Path
6
+ from typing import Callable, TypedDict, cast
7
+
8
+
9
+ NowFn = Callable[[], float]
10
+
11
+
12
+ class ApiKeyMetadata(TypedDict):
13
+ name: str
14
+ created: float
15
+
16
+
17
+ class ApiKeyManager:
18
+ def __init__(self, key_file_path: Path | str, now_fn: NowFn = time.time) -> None:
19
+ self.key_file_path = Path(key_file_path)
20
+ self.now_fn = now_fn
21
+ self.keys = self._load_keys()
22
+
23
+ def _load_keys(self) -> dict[str, ApiKeyMetadata]:
24
+ if not self.key_file_path.exists():
25
+ keys: dict[str, ApiKeyMetadata] = {
26
+ "admin": {"name": "Admin", "created": self.now_fn()}
27
+ }
28
+ self._save_keys(keys)
29
+ return keys
30
+
31
+ try:
32
+ payload = json.loads(self.key_file_path.read_text(encoding="utf-8"))
33
+ if isinstance(payload, dict):
34
+ return cast(dict[str, ApiKeyMetadata], payload)
35
+ except Exception:
36
+ return {}
37
+
38
+ return {}
39
+
40
+ def _save_keys(self, keys: dict[str, ApiKeyMetadata]) -> None:
41
+ self.key_file_path.parent.mkdir(parents=True, exist_ok=True)
42
+ self.key_file_path.write_text(json.dumps(keys), encoding="utf-8")
43
+
44
+ def validate_key(self, key: str) -> bool:
45
+ return key in self.keys
@@ -0,0 +1,65 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ import time
5
+ from dataclasses import dataclass
6
+ from typing import Any, Callable
7
+
8
+ from .action_layer import ActionService
9
+ from .codesys_process import CodesysProcessManager, ProcessManagerConfig
10
+ from .ironpython_script_engine import IronPythonScriptEngineAdapter
11
+ from .runtime_transport import build_runtime_transport
12
+ from .script_executor import ScriptExecutor
13
+ from .server_config import ServerConfig
14
+
15
+
16
+ NowFn = Callable[[], float]
17
+
18
+
19
+ @dataclass(frozen=True)
20
+ class AppRuntime:
21
+ process_manager: Any
22
+ script_executor: Any
23
+ engine_adapter: Any
24
+ actions_service: Any
25
+
26
+
27
+ def build_app_runtime(
28
+ config: ServerConfig,
29
+ *,
30
+ logger: logging.Logger,
31
+ now_fn: NowFn = time.time,
32
+ process_manager_cls: Any = CodesysProcessManager,
33
+ transport_builder: Callable[[ServerConfig], Any] = build_runtime_transport,
34
+ script_executor_cls: Any = ScriptExecutor,
35
+ engine_adapter_cls: Any = IronPythonScriptEngineAdapter,
36
+ action_service_cls: Any = ActionService,
37
+ ) -> AppRuntime:
38
+ process_config = ProcessManagerConfig(
39
+ codesys_path=config.codesys_path,
40
+ script_path=config.persistent_script,
41
+ script_lib_dir=config.script_lib_dir,
42
+ profile_name=config.codesys_profile_name,
43
+ profile_path=config.codesys_profile_path,
44
+ no_ui=config.codesys_no_ui,
45
+ transport_name=config.transport_name,
46
+ pipe_name=config.pipe_name,
47
+ )
48
+ process_manager = process_manager_cls(process_config, logger=logger)
49
+ transport = transport_builder(config)
50
+ script_executor = script_executor_cls(transport, logger=logger)
51
+ engine_adapter = engine_adapter_cls(codesys_path=config.codesys_path, logger=logger)
52
+ actions_service = action_service_cls(
53
+ process_manager=process_manager,
54
+ script_executor=script_executor,
55
+ engine_adapter=engine_adapter,
56
+ logger=logger,
57
+ now_fn=now_fn,
58
+ script_dir=config.script_dir,
59
+ )
60
+ return AppRuntime(
61
+ process_manager=process_manager,
62
+ script_executor=script_executor,
63
+ engine_adapter=engine_adapter,
64
+ actions_service=actions_service,
65
+ )