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.
- codesys_api/__init__.py +2 -0
- codesys_api/action_layer.py +493 -0
- codesys_api/api_key_store.py +45 -0
- codesys_api/app_runtime.py +65 -0
- codesys_api/assets/PERSISTENT_SESSION.py +487 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/AxisScaleMode.pyi +31 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/GraphType.pyi +80 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/IScriptTraceObjectMarker.pyi +15 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/PacketState.pyi +37 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/README.txt +6 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/Resolution.pyi +18 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptApplication.pyi +166 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptApplicationComposer.pyi +1938 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptAxisSettings.pyi +131 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceDescription.pyi +311 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceObject.pyi +973 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceParameters.pyi +1039 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceRepository.pyi +616 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDeviceUserManagement.pyi +469 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDriverInfo.pyi +202 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptDriverTraceImpl.pyi +17 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptExplicitConnectorObjects.pyi +153 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptExternalFileObject.pyi +211 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptFontDesc.pyi +23 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptIecLanguageObjectContainer.pyi +439 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptImagePoolObject.pyi +311 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptLibManObject.pyi +826 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptLiveDeviceUserManagement.pyi +360 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptObject.pyi +760 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptOnline.pyi +1758 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptProject.pyi +960 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptProjects.pyi +559 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptSymbolConfigObject.pyi +712 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptSystem.pyi +1340 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTaskConfigObject.pyi +365 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTextListObject.pyi +307 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTextualObject.pyi +300 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceDiagram.pyi +78 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceDiagramCollection.pyi +102 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceDiagramVariable.pyi +16 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceDiagramVariableCollection.pyi +103 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceEditorObject.pyi +159 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceObject.pyi +167 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceVariable.pyi +87 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTraceVariableList.pyi +101 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptTreeObject.pyi +69 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/ScriptUserManagement.pyi +779 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/TriggerEdge.pyi +32 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/TriggerState.pyi +32 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/__init__-extension.py +2 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/__init__.py +63 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/dotNETs.pyi +166 -0
- codesys_api/assets/ScriptLib/Stubs/scriptengine/init-extender.bat +33 -0
- codesys_api/assets/ScriptLib/example_scripts/BaseHTTPServer.py +614 -0
- codesys_api/assets/ScriptLib/example_scripts/Bastion.py +180 -0
- codesys_api/assets/ScriptLib/example_scripts/CGIHTTPServer.py +378 -0
- codesys_api/assets/ScriptLib/example_scripts/ConfigParser.py +753 -0
- codesys_api/assets/ScriptLib/example_scripts/Cookie.py +773 -0
- codesys_api/assets/ScriptLib/example_scripts/DocXMLRPCServer.py +290 -0
- codesys_api/assets/ScriptLib/example_scripts/HTMLParser.py +476 -0
- codesys_api/assets/ScriptLib/example_scripts/MimeWriter.py +186 -0
- codesys_api/assets/ScriptLib/example_scripts/Queue.py +244 -0
- codesys_api/assets/ScriptLib/example_scripts/SimpleHTTPServer.py +235 -0
- codesys_api/assets/ScriptLib/example_scripts/SimpleXMLRPCServer.py +708 -0
- codesys_api/assets/ScriptLib/example_scripts/SocketServer.py +734 -0
- codesys_api/assets/ScriptLib/example_scripts/StringIO.py +324 -0
- codesys_api/assets/ScriptLib/example_scripts/UserDict.py +213 -0
- codesys_api/assets/ScriptLib/example_scripts/UserList.py +88 -0
- codesys_api/assets/ScriptLib/example_scripts/UserString.py +228 -0
- codesys_api/assets/ScriptLib/example_scripts/_LWPCookieJar.py +170 -0
- codesys_api/assets/ScriptLib/example_scripts/_MozillaCookieJar.py +149 -0
- codesys_api/assets/ScriptLib/example_scripts/__future__.py +128 -0
- codesys_api/assets/ScriptLib/example_scripts/__phello__.foo.py +1 -0
- codesys_api/assets/ScriptLib/example_scripts/_abcoll.py +695 -0
- codesys_api/assets/ScriptLib/example_scripts/_osx_support.py +502 -0
- codesys_api/assets/ScriptLib/example_scripts/_pyio.py +2038 -0
- codesys_api/assets/ScriptLib/example_scripts/_strptime.py +478 -0
- codesys_api/assets/ScriptLib/example_scripts/_threading_local.py +247 -0
- codesys_api/assets/ScriptLib/example_scripts/_weakrefset.py +205 -0
- codesys_api/assets/ScriptLib/example_scripts/abc.py +185 -0
- codesys_api/assets/ScriptLib/example_scripts/aifc.py +1000 -0
- codesys_api/assets/ScriptLib/example_scripts/antigravity.py +4 -0
- codesys_api/assets/ScriptLib/example_scripts/anydbm.py +85 -0
- codesys_api/assets/ScriptLib/example_scripts/argparse.py +2378 -0
- codesys_api/assets/ScriptLib/example_scripts/ast.py +311 -0
- codesys_api/assets/ScriptLib/example_scripts/asynchat.py +321 -0
- codesys_api/assets/ScriptLib/example_scripts/asyncore.py +663 -0
- codesys_api/assets/ScriptLib/example_scripts/atexit.py +65 -0
- codesys_api/assets/ScriptLib/example_scripts/audiodev.py +260 -0
- codesys_api/assets/ScriptLib/example_scripts/base64.py +367 -0
- codesys_api/assets/ScriptLib/example_scripts/bdb.py +645 -0
- codesys_api/assets/ScriptLib/example_scripts/binhex.py +518 -0
- codesys_api/assets/ScriptLib/example_scripts/bisect.py +92 -0
- codesys_api/assets/ScriptLib/example_scripts/calendar.py +714 -0
- codesys_api/assets/ScriptLib/example_scripts/cgi.py +1083 -0
- codesys_api/assets/ScriptLib/example_scripts/cgitb.py +323 -0
- codesys_api/assets/ScriptLib/example_scripts/chunk.py +169 -0
- codesys_api/assets/ScriptLib/example_scripts/clrtype.py +630 -0
- codesys_api/assets/ScriptLib/example_scripts/cmd.py +404 -0
- codesys_api/assets/ScriptLib/example_scripts/code.py +310 -0
- codesys_api/assets/ScriptLib/example_scripts/codecs.py +1115 -0
- codesys_api/assets/ScriptLib/example_scripts/codeop.py +168 -0
- codesys_api/assets/ScriptLib/example_scripts/collections.py +742 -0
- codesys_api/assets/ScriptLib/example_scripts/colorsys.py +156 -0
- codesys_api/assets/ScriptLib/example_scripts/commands.py +90 -0
- codesys_api/assets/ScriptLib/example_scripts/compileall.py +227 -0
- codesys_api/assets/ScriptLib/example_scripts/contextlib.py +154 -0
- codesys_api/assets/ScriptLib/example_scripts/cookielib.py +1829 -0
- codesys_api/assets/ScriptLib/example_scripts/copy.py +433 -0
- codesys_api/assets/ScriptLib/example_scripts/csv.py +456 -0
- codesys_api/assets/ScriptLib/example_scripts/ctypes/__init__.py +558 -0
- codesys_api/assets/ScriptLib/example_scripts/ctypes/_endian.py +61 -0
- codesys_api/assets/ScriptLib/example_scripts/ctypes/macholib/__init__.py +9 -0
- codesys_api/assets/ScriptLib/example_scripts/ctypes/macholib/dyld.py +166 -0
- codesys_api/assets/ScriptLib/example_scripts/ctypes/macholib/dylib.py +63 -0
- codesys_api/assets/ScriptLib/example_scripts/ctypes/macholib/framework.py +65 -0
- codesys_api/assets/ScriptLib/example_scripts/ctypes/util.py +308 -0
- codesys_api/assets/ScriptLib/example_scripts/ctypes/wintypes.py +181 -0
- codesys_api/assets/ScriptLib/example_scripts/decimal.py +6233 -0
- codesys_api/assets/ScriptLib/example_scripts/difflib.py +2057 -0
- codesys_api/assets/ScriptLib/example_scripts/dircache.py +41 -0
- codesys_api/assets/ScriptLib/example_scripts/dis.py +224 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/__init__.py +13 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/archive_util.py +251 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/bcppcompiler.py +394 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/ccompiler.py +1097 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/cmd.py +457 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/__init__.py +33 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/bdist.py +146 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/bdist_dumb.py +133 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/bdist_rpm.py +588 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/bdist_wininst.py +368 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/build.py +147 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/build_clib.py +209 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/build_ext.py +769 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/build_py.py +394 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/build_scripts.py +131 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/check.py +150 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/clean.py +80 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/config.py +357 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/install.py +672 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_data.py +81 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_egg_info.py +78 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_headers.py +51 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_lib.py +219 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/install_scripts.py +64 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/register.py +315 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/sdist.py +477 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/command/upload.py +194 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/config.py +116 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/core.py +239 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/cygwinccompiler.py +463 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/debug.py +7 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/dep_util.py +89 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/dir_util.py +214 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/dist.py +1249 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/emxccompiler.py +319 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/errors.py +88 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/extension.py +255 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/fancy_getopt.py +484 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/file_util.py +239 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/filelist.py +343 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/log.py +71 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/msvccompiler.py +659 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/spawn.py +227 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/sysconfig.py +493 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/text_file.py +304 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/unixccompiler.py +312 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/util.py +482 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/version.py +299 -0
- codesys_api/assets/ScriptLib/example_scripts/distutils/versionpredicate.py +164 -0
- codesys_api/assets/ScriptLib/example_scripts/doctest.py +2815 -0
- codesys_api/assets/ScriptLib/example_scripts/dumbdbm.py +253 -0
- codesys_api/assets/ScriptLib/example_scripts/dummy_thread.py +145 -0
- codesys_api/assets/ScriptLib/example_scripts/dummy_threading.py +78 -0
- codesys_api/assets/ScriptLib/example_scripts/email/__init__.py +123 -0
- codesys_api/assets/ScriptLib/example_scripts/email/_parseaddr.py +506 -0
- codesys_api/assets/ScriptLib/example_scripts/email/base64mime.py +183 -0
- codesys_api/assets/ScriptLib/example_scripts/email/charset.py +397 -0
- codesys_api/assets/ScriptLib/example_scripts/email/encoders.py +82 -0
- codesys_api/assets/ScriptLib/example_scripts/email/errors.py +57 -0
- codesys_api/assets/ScriptLib/example_scripts/email/feedparser.py +485 -0
- codesys_api/assets/ScriptLib/example_scripts/email/generator.py +371 -0
- codesys_api/assets/ScriptLib/example_scripts/email/header.py +514 -0
- codesys_api/assets/ScriptLib/example_scripts/email/iterators.py +73 -0
- codesys_api/assets/ScriptLib/example_scripts/email/message.py +797 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/__init__.py +0 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/application.py +36 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/audio.py +73 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/base.py +26 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/image.py +46 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/message.py +34 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/multipart.py +47 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/nonmultipart.py +22 -0
- codesys_api/assets/ScriptLib/example_scripts/email/mime/text.py +30 -0
- codesys_api/assets/ScriptLib/example_scripts/email/parser.py +91 -0
- codesys_api/assets/ScriptLib/example_scripts/email/quoprimime.py +336 -0
- codesys_api/assets/ScriptLib/example_scripts/email/utils.py +329 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/__init__.py +157 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/aliases.py +527 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/ascii.py +50 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/base64_codec.py +80 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/bz2_codec.py +103 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/charmap.py +69 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp037.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1006.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1026.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1140.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1250.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1251.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1252.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1253.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1254.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1255.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1256.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1257.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp1258.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp424.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp437.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp500.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp720.py +309 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp737.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp775.py +697 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp850.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp852.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp855.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp856.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp857.py +694 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp858.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp860.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp861.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp862.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp863.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp864.py +690 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp865.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp866.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp869.py +689 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp874.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/cp875.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/hex_codec.py +80 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/hp_roman8.py +152 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/idna.py +288 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_1.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_10.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_11.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_13.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_14.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_15.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_16.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_2.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_3.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_4.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_5.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_6.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_7.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_8.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/iso8859_9.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/koi8_r.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/koi8_u.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/latin_1.py +50 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_arabic.py +698 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_centeuro.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_croatian.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_cyrillic.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_farsi.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_greek.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_iceland.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_latin2.py +183 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_roman.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_romanian.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mac_turkish.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/mbcs.py +47 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/palmos.py +83 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/ptcp154.py +175 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/punycode.py +238 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/quopri_codec.py +76 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/raw_unicode_escape.py +45 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/rot_13.py +119 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/string_escape.py +38 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/tis_620.py +307 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/undefined.py +49 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/unicode_escape.py +45 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/unicode_internal.py +45 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_16.py +126 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_16_be.py +42 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_16_le.py +42 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_32.py +150 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_32_be.py +37 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_32_le.py +37 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_7.py +38 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_8.py +42 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/utf_8_sig.py +117 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/uu_codec.py +134 -0
- codesys_api/assets/ScriptLib/example_scripts/encodings/zlib_codec.py +103 -0
- codesys_api/assets/ScriptLib/example_scripts/filecmp.py +296 -0
- codesys_api/assets/ScriptLib/example_scripts/fileinput.py +405 -0
- codesys_api/assets/ScriptLib/example_scripts/fnmatch.py +120 -0
- codesys_api/assets/ScriptLib/example_scripts/formatter.py +445 -0
- codesys_api/assets/ScriptLib/example_scripts/fpformat.py +146 -0
- codesys_api/assets/ScriptLib/example_scripts/fractions.py +605 -0
- codesys_api/assets/ScriptLib/example_scripts/ftplib.py +1090 -0
- codesys_api/assets/ScriptLib/example_scripts/functools.py +105 -0
- codesys_api/assets/ScriptLib/example_scripts/genericpath.py +113 -0
- codesys_api/assets/ScriptLib/example_scripts/getopt.py +210 -0
- codesys_api/assets/ScriptLib/example_scripts/getpass.py +179 -0
- codesys_api/assets/ScriptLib/example_scripts/gettext.py +667 -0
- codesys_api/assets/ScriptLib/example_scripts/glob.py +100 -0
- codesys_api/assets/ScriptLib/example_scripts/gzip.py +526 -0
- codesys_api/assets/ScriptLib/example_scripts/hashlib.py +221 -0
- codesys_api/assets/ScriptLib/example_scripts/heapq.py +485 -0
- codesys_api/assets/ScriptLib/example_scripts/hmac.py +136 -0
- codesys_api/assets/ScriptLib/example_scripts/htmlentitydefs.py +273 -0
- codesys_api/assets/ScriptLib/example_scripts/htmllib.py +491 -0
- codesys_api/assets/ScriptLib/example_scripts/httplib.py +1470 -0
- codesys_api/assets/ScriptLib/example_scripts/ihooks.py +554 -0
- codesys_api/assets/ScriptLib/example_scripts/imaplib.py +1529 -0
- codesys_api/assets/ScriptLib/example_scripts/imghdr.py +159 -0
- codesys_api/assets/ScriptLib/example_scripts/importlib/__init__.py +38 -0
- codesys_api/assets/ScriptLib/example_scripts/imputil.py +725 -0
- codesys_api/assets/ScriptLib/example_scripts/inspect.py +1073 -0
- codesys_api/assets/ScriptLib/example_scripts/io.py +90 -0
- codesys_api/assets/ScriptLib/example_scripts/json/__init__.py +352 -0
- codesys_api/assets/ScriptLib/example_scripts/json/decoder.py +383 -0
- codesys_api/assets/ScriptLib/example_scripts/json/encoder.py +448 -0
- codesys_api/assets/ScriptLib/example_scripts/json/scanner.py +67 -0
- codesys_api/assets/ScriptLib/example_scripts/json/tool.py +40 -0
- codesys_api/assets/ScriptLib/example_scripts/keyword.py +93 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/__init__.py +1 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/__main__.py +4 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/btm_matcher.py +168 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/btm_utils.py +283 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixer_base.py +187 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixer_util.py +432 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/__init__.py +1 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_apply.py +70 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_asserts.py +34 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_basestring.py +14 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_buffer.py +22 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_dict.py +107 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_except.py +93 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_exec.py +40 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_execfile.py +53 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_exitfunc.py +72 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_filter.py +76 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_funcattrs.py +21 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_future.py +22 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_getcwdu.py +19 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_has_key.py +110 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_idioms.py +152 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_import.py +99 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_imports.py +145 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_imports2.py +16 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_input.py +26 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_intern.py +56 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_isinstance.py +52 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_itertools.py +43 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_itertools_imports.py +57 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_long.py +19 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_map.py +91 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_metaclass.py +228 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_methodattrs.py +24 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_ne.py +23 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_next.py +103 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_nonzero.py +21 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_numliterals.py +28 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_operator.py +96 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_paren.py +44 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_print.py +87 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_raise.py +90 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_raw_input.py +17 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_reduce.py +35 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_renames.py +70 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_repr.py +23 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_set_literal.py +53 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_standarderror.py +18 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_sys_exc.py +30 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_throw.py +56 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_tuple_params.py +175 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_types.py +62 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_unicode.py +42 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_urllib.py +197 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_ws_comma.py +39 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_xrange.py +73 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_xreadlines.py +25 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/fixes/fix_zip.py +35 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/main.py +269 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/patcomp.py +204 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/__init__.py +4 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/conv.py +257 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/driver.py +181 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/grammar.py +212 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/literals.py +60 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/parse.py +201 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/pgen.py +386 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/token.py +83 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pgen2/tokenize.py +502 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pygram.py +40 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/pytree.py +887 -0
- codesys_api/assets/ScriptLib/example_scripts/lib2to3/refactor.py +747 -0
- codesys_api/assets/ScriptLib/example_scripts/linecache.py +139 -0
- codesys_api/assets/ScriptLib/example_scripts/locale.py +2125 -0
- codesys_api/assets/ScriptLib/example_scripts/logging/__init__.py +1751 -0
- codesys_api/assets/ScriptLib/example_scripts/logging/config.py +919 -0
- codesys_api/assets/ScriptLib/example_scripts/logging/handlers.py +1242 -0
- codesys_api/assets/ScriptLib/example_scripts/macpath.py +216 -0
- codesys_api/assets/ScriptLib/example_scripts/macurl2path.py +77 -0
- codesys_api/assets/ScriptLib/example_scripts/mailbox.py +2240 -0
- codesys_api/assets/ScriptLib/example_scripts/mailcap.py +255 -0
- codesys_api/assets/ScriptLib/example_scripts/markupbase.py +396 -0
- codesys_api/assets/ScriptLib/example_scripts/md5.py +14 -0
- codesys_api/assets/ScriptLib/example_scripts/mhlib.py +1005 -0
- codesys_api/assets/ScriptLib/example_scripts/mimetools.py +250 -0
- codesys_api/assets/ScriptLib/example_scripts/mimetypes.py +602 -0
- codesys_api/assets/ScriptLib/example_scripts/mimify.py +468 -0
- codesys_api/assets/ScriptLib/example_scripts/modulefinder.py +716 -0
- codesys_api/assets/ScriptLib/example_scripts/multifile.py +162 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/__init__.py +281 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/connection.py +477 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/dummy/__init__.py +153 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/dummy/connection.py +87 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/forking.py +527 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/heap.py +254 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/managers.py +1120 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/pool.py +749 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/process.py +332 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/queues.py +393 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/reduction.py +215 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/sharedctypes.py +271 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/synchronize.py +344 -0
- codesys_api/assets/ScriptLib/example_scripts/multiprocessing/util.py +353 -0
- codesys_api/assets/ScriptLib/example_scripts/mutex.py +55 -0
- codesys_api/assets/ScriptLib/example_scripts/netrc.py +145 -0
- codesys_api/assets/ScriptLib/example_scripts/new.py +17 -0
- codesys_api/assets/ScriptLib/example_scripts/nntplib.py +636 -0
- codesys_api/assets/ScriptLib/example_scripts/ntpath.py +550 -0
- codesys_api/assets/ScriptLib/example_scripts/nturl2path.py +68 -0
- codesys_api/assets/ScriptLib/example_scripts/numbers.py +391 -0
- codesys_api/assets/ScriptLib/example_scripts/opcode.py +192 -0
- codesys_api/assets/ScriptLib/example_scripts/optparse.py +1704 -0
- codesys_api/assets/ScriptLib/example_scripts/os.py +742 -0
- codesys_api/assets/ScriptLib/example_scripts/os2emxpath.py +160 -0
- codesys_api/assets/ScriptLib/example_scripts/pdb.py +1341 -0
- codesys_api/assets/ScriptLib/example_scripts/pickle.py +1397 -0
- codesys_api/assets/ScriptLib/example_scripts/pickletools.py +2270 -0
- codesys_api/assets/ScriptLib/example_scripts/pipes.py +278 -0
- codesys_api/assets/ScriptLib/example_scripts/pkgutil.py +589 -0
- codesys_api/assets/ScriptLib/example_scripts/platform.py +1658 -0
- codesys_api/assets/ScriptLib/example_scripts/plistlib.py +474 -0
- codesys_api/assets/ScriptLib/example_scripts/popen2.py +201 -0
- codesys_api/assets/ScriptLib/example_scripts/poplib.py +427 -0
- codesys_api/assets/ScriptLib/example_scripts/posixfile.py +237 -0
- codesys_api/assets/ScriptLib/example_scripts/posixpath.py +446 -0
- codesys_api/assets/ScriptLib/example_scripts/pprint.py +346 -0
- codesys_api/assets/ScriptLib/example_scripts/profile.py +610 -0
- codesys_api/assets/ScriptLib/example_scripts/pstats.py +705 -0
- codesys_api/assets/ScriptLib/example_scripts/py_compile.py +118 -0
- codesys_api/assets/ScriptLib/example_scripts/pyclbr.py +344 -0
- codesys_api/assets/ScriptLib/example_scripts/pydoc.py +2416 -0
- codesys_api/assets/ScriptLib/example_scripts/pydoc_data/__init__.py +0 -0
- codesys_api/assets/ScriptLib/example_scripts/pydoc_data/topics.py +13578 -0
- codesys_api/assets/ScriptLib/example_scripts/quopri.py +237 -0
- codesys_api/assets/ScriptLib/example_scripts/random.py +912 -0
- codesys_api/assets/ScriptLib/example_scripts/repr.py +132 -0
- codesys_api/assets/ScriptLib/example_scripts/rexec.py +588 -0
- codesys_api/assets/ScriptLib/example_scripts/rfc822.py +1016 -0
- codesys_api/assets/ScriptLib/example_scripts/rlcompleter.py +172 -0
- codesys_api/assets/ScriptLib/example_scripts/robotparser.py +236 -0
- codesys_api/assets/ScriptLib/example_scripts/runpy.py +290 -0
- codesys_api/assets/ScriptLib/example_scripts/sched.py +134 -0
- codesys_api/assets/ScriptLib/example_scripts/sets.py +557 -0
- codesys_api/assets/ScriptLib/example_scripts/sgmllib.py +553 -0
- codesys_api/assets/ScriptLib/example_scripts/sha.py +15 -0
- codesys_api/assets/ScriptLib/example_scripts/shelve.py +243 -0
- codesys_api/assets/ScriptLib/example_scripts/shlex.py +292 -0
- codesys_api/assets/ScriptLib/example_scripts/shutil.py +602 -0
- codesys_api/assets/ScriptLib/example_scripts/site-packages/README.txt +2 -0
- codesys_api/assets/ScriptLib/example_scripts/site.py +595 -0
- codesys_api/assets/ScriptLib/example_scripts/smtpd.py +555 -0
- codesys_api/assets/ScriptLib/example_scripts/smtplib.py +884 -0
- codesys_api/assets/ScriptLib/example_scripts/sndhdr.py +228 -0
- codesys_api/assets/ScriptLib/example_scripts/socket.py +577 -0
- codesys_api/assets/ScriptLib/example_scripts/sqlite3/__init__.py +35 -0
- codesys_api/assets/ScriptLib/example_scripts/sqlite3/dbapi2.py +90 -0
- codesys_api/assets/ScriptLib/example_scripts/sqlite3/dump.py +70 -0
- codesys_api/assets/ScriptLib/example_scripts/sre_constants.py +263 -0
- codesys_api/assets/ScriptLib/example_scripts/sre_parse.py +862 -0
- codesys_api/assets/ScriptLib/example_scripts/ssl.py +1035 -0
- codesys_api/assets/ScriptLib/example_scripts/stat.py +96 -0
- codesys_api/assets/ScriptLib/example_scripts/statvfs.py +18 -0
- codesys_api/assets/ScriptLib/example_scripts/string.py +656 -0
- codesys_api/assets/ScriptLib/example_scripts/stringold.py +432 -0
- codesys_api/assets/ScriptLib/example_scripts/stringprep.py +272 -0
- codesys_api/assets/ScriptLib/example_scripts/struct.py +3 -0
- codesys_api/assets/ScriptLib/example_scripts/subprocess.py +1504 -0
- codesys_api/assets/ScriptLib/example_scripts/sunau.py +493 -0
- codesys_api/assets/ScriptLib/example_scripts/sunaudio.py +49 -0
- codesys_api/assets/ScriptLib/example_scripts/symbol.py +114 -0
- codesys_api/assets/ScriptLib/example_scripts/sysconfig.py +647 -0
- codesys_api/assets/ScriptLib/example_scripts/tabnanny.py +329 -0
- codesys_api/assets/ScriptLib/example_scripts/tarfile.py +2630 -0
- codesys_api/assets/ScriptLib/example_scripts/telnetlib.py +791 -0
- codesys_api/assets/ScriptLib/example_scripts/tempfile.py +640 -0
- codesys_api/assets/ScriptLib/example_scripts/textwrap.py +431 -0
- codesys_api/assets/ScriptLib/example_scripts/this.py +28 -0
- codesys_api/assets/ScriptLib/example_scripts/threading.py +1321 -0
- codesys_api/assets/ScriptLib/example_scripts/timeit.py +343 -0
- codesys_api/assets/ScriptLib/example_scripts/toaiff.py +110 -0
- codesys_api/assets/ScriptLib/example_scripts/token.py +140 -0
- codesys_api/assets/ScriptLib/example_scripts/tokenize.py +449 -0
- codesys_api/assets/ScriptLib/example_scripts/trace.py +819 -0
- codesys_api/assets/ScriptLib/example_scripts/traceback.py +320 -0
- codesys_api/assets/ScriptLib/example_scripts/types.py +86 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/__init__.py +69 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/__main__.py +12 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/case.py +1083 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/loader.py +316 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/main.py +236 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/result.py +193 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/runner.py +196 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/signals.py +71 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/suite.py +303 -0
- codesys_api/assets/ScriptLib/example_scripts/unittest/util.py +156 -0
- codesys_api/assets/ScriptLib/example_scripts/urllib.py +1677 -0
- codesys_api/assets/ScriptLib/example_scripts/urllib2.py +1489 -0
- codesys_api/assets/ScriptLib/example_scripts/urlparse.py +464 -0
- codesys_api/assets/ScriptLib/example_scripts/user.py +48 -0
- codesys_api/assets/ScriptLib/example_scripts/uu.py +203 -0
- codesys_api/assets/ScriptLib/example_scripts/uuid.py +620 -0
- codesys_api/assets/ScriptLib/example_scripts/warnings.py +425 -0
- codesys_api/assets/ScriptLib/example_scripts/wave.py +517 -0
- codesys_api/assets/ScriptLib/example_scripts/weakref.py +491 -0
- codesys_api/assets/ScriptLib/example_scripts/webbrowser.py +704 -0
- codesys_api/assets/ScriptLib/example_scripts/whichdb.py +117 -0
- codesys_api/assets/ScriptLib/example_scripts/wpf.py +14 -0
- codesys_api/assets/ScriptLib/example_scripts/wsgiref/__init__.py +23 -0
- codesys_api/assets/ScriptLib/example_scripts/wsgiref/handlers.py +450 -0
- codesys_api/assets/ScriptLib/example_scripts/wsgiref/headers.py +169 -0
- codesys_api/assets/ScriptLib/example_scripts/wsgiref/simple_server.py +163 -0
- codesys_api/assets/ScriptLib/example_scripts/wsgiref/util.py +165 -0
- codesys_api/assets/ScriptLib/example_scripts/wsgiref/validate.py +432 -0
- codesys_api/assets/ScriptLib/example_scripts/xdrlib.py +248 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/__init__.py +41 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/dom/NodeFilter.py +27 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/dom/__init__.py +139 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/dom/domreg.py +101 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/dom/expatbuilder.py +983 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/dom/minicompat.py +110 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/dom/minidom.py +1941 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/dom/pulldom.py +351 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/dom/xmlbuilder.py +386 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/etree/ElementInclude.py +142 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/etree/ElementPath.py +303 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/etree/ElementTree.py +1684 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/etree/SimpleXMLTreeBuilder.py +143 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/etree/__init__.py +33 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/etree/cElementTree.py +3 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/parsers/__init__.py +8 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/parsers/expat.py +4 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/sax/__init__.py +108 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/sax/_exceptions.py +131 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/sax/expatreader.py +449 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/sax/handler.py +342 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/sax/saxutils.py +353 -0
- codesys_api/assets/ScriptLib/example_scripts/xml/sax/xmlreader.py +381 -0
- codesys_api/assets/ScriptLib/example_scripts/xmllib.py +930 -0
- codesys_api/assets/ScriptLib/example_scripts/xmlrpclib.py +1656 -0
- codesys_api/assets/ScriptLib/example_scripts/zipfile.py +1565 -0
- codesys_api/cli_entry.py +372 -0
- codesys_api/codesys_e2e_policy.py +15 -0
- codesys_api/codesys_process.py +395 -0
- codesys_api/engine_adapter.py +37 -0
- codesys_api/http_server.py +511 -0
- codesys_api/ironpython_script_engine.py +1018 -0
- codesys_api/named_pipe_transport.py +355 -0
- codesys_api/py.typed +1 -0
- codesys_api/runtime_paths.py +32 -0
- codesys_api/runtime_transport.py +24 -0
- codesys_api/script_executor.py +42 -0
- codesys_api/server_config.py +147 -0
- codesys_api/server_entry.py +23 -0
- codesys_api/server_logic.py +127 -0
- codesys_api/session_transport.py +31 -0
- codesys_api/transport_result.py +195 -0
- codesys_tools-0.2.0.dist-info/METADATA +149 -0
- codesys_tools-0.2.0.dist-info/RECORD +589 -0
- codesys_tools-0.2.0.dist-info/WHEEL +5 -0
- codesys_tools-0.2.0.dist-info/entry_points.txt +3 -0
- codesys_tools-0.2.0.dist-info/licenses/LICENSE +21 -0
- codesys_tools-0.2.0.dist-info/top_level.txt +1 -0
codesys_api/__init__.py
ADDED
|
@@ -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
|
+
)
|