amps-python-client 5.3.4.1__zip
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.
- amps-python-client-5.3.4.1/HISTORY +7 -0
- amps-python-client-5.3.4.1/LICENSE +157 -0
- amps-python-client-5.3.4.1/PKG-INFO +112 -0
- amps-python-client-5.3.4.1/README.md +96 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_images/caution.svg +25 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +32 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +27 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/intro.rst.txt +43 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/logon.rst.txt +231 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +1474 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/publishing.rst.txt +25 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +12 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +23 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/removing.rst.txt +6 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/utilities.rst.txt +13 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_sources/index.rst.txt +56 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/alabaster.css +699 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css +192 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css.backup +161 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/flag_logo.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/ack-messages.html +417 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/content-messages.html +417 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/intro.html +126 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/logon.html +295 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/protocol-reference.html +1190 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/publishing.html +436 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-delimiters.html +173 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-subscribe.html +2123 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/removing.html +299 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/chapters/utilities.html +287 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/genindex.html +97 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/index.html +138 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/search.html +107 -0
- amps-python-client-5.3.4.1/docs/command-reference/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/docs/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/html/_sources/code.rst.txt +6 -0
- amps-python-client-5.3.4.1/docs/html/_sources/index.rst.txt +29 -0
- amps-python-client-5.3.4.1/docs/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/html/_static/classic.css +261 -0
- amps-python-client-5.3.4.1/docs/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/default.css +1 -0
- amps-python-client-5.3.4.1/docs/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/html/_static/sidebar.js +159 -0
- amps-python-client-5.3.4.1/docs/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/html/code.html +6503 -0
- amps-python-client-5.3.4.1/docs/html/genindex.html +1361 -0
- amps-python-client-5.3.4.1/docs/html/index.html +131 -0
- amps-python-client-5.3.4.1/docs/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/html/py-modindex.html +111 -0
- amps-python-client-5.3.4.1/docs/html/search.html +107 -0
- amps-python-client-5.3.4.1/docs/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/deltas.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/error-handling.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/exceptions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/first-program.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/high-availability.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/installing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/introduction.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/python/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/caution.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/caution.svg +25 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/connection_string.svg +461 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/important.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/important.svg +25 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/tip.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/tip.svg +31 -0
- amps-python-client-5.3.4.1/docs/python/html/_images/warning.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/advanced-topics.rst.txt +398 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +6 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +26 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/creating-commands.rst.txt +159 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/deltas.rst.txt +79 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/error-handling.rst.txt +482 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/exceptions.rst.txt +128 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/first-program.rst.txt +142 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/high-availability.rst.txt +876 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/installing.rst.txt +184 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/introduction.rst.txt +50 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +32 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/performance-tips.rst.txt +434 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/queues.rst.txt +282 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/sow.rst.txt +292 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/subscriptions.rst.txt +374 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/utilities.rst.txt +214 -0
- amps-python-client-5.3.4.1/docs/python/html/_sources/index.rst.txt +44 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/alabaster.css +699 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/custom.css +192 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/custom.css.backup +161 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/flag_logo.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/python/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/advanced-topics.html +447 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-compiler-list.html +92 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-feature-table.html +156 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/creating-commands.html +2837 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/deltas.html +169 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/error-handling.html +746 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/exceptions.html +272 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/first-program.html +499 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/high-availability.html +1014 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/installing.html +264 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/introduction.html +245 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/moving-from-python-lite.html +118 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/performance-tips.html +499 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/queues.html +352 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/sow.html +381 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/subscriptions.html +535 -0
- amps-python-client-5.3.4.1/docs/python/html/chapters/utilities.html +302 -0
- amps-python-client-5.3.4.1/docs/python/html/genindex.html +351 -0
- amps-python-client-5.3.4.1/docs/python/html/index.html +380 -0
- amps-python-client-5.3.4.1/docs/python/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/python/html/search.html +107 -0
- amps-python-client-5.3.4.1/docs/python/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +155 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +19 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_sources/index.rst.txt +20 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/alabaster.css +699 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css +192 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css.backup +161 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/flag_logo.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/crankitup.html +271 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/equipment.html +105 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/genindex.html +97 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/index.html +382 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/search.html +107 -0
- amps-python-client-5.3.4.1/docs/python-quickstart/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/docs/resources/custom.css +9 -0
- amps-python-client-5.3.4.1/docs/resources/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/events.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/views.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/environment.pickle +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/doctrees/index.doctree +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/.buildinfo +4 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/AMPS-Queues-Intro.svg +1330 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/GeoRepl.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_async_ack.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_sync_ack.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/Hot-Hot-Replication.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/MessageOrdering.svg +235 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF5.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF6.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF7.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF8.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub1.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub2.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWAndSubscribeAndReplace.svg +684 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery1.svg +402 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery2.svg +505 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig1.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig2.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig3.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig4.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.svg +25 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/chicago_group.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_original_messages.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_update_message.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.svg +25 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/inline_view_conflation.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_pub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_sub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/queue_usage_overview.svg +627 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_hub.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_scenario_with_ha.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_1.svg +248 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_2.svg +183 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_update_sequence.svg +1 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.svg +31 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.svg +23 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/acks.rst.txt +232 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/actions.rst.txt +111 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +358 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +83 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +11 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +86 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +9 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +111 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +269 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/daemon.rst.txt +232 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/delta.rst.txt +556 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/distribution.rst.txt +186 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +191 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/events.rst.txt +39 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +203 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/glossary.rst.txt +101 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/ha.rst.txt +465 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +23 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/intro.rst.txt +116 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/logging.rst.txt +34 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +1398 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +326 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/oof.rst.txt +312 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/operation.rst.txt +27 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +49 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/queues.rst.txt +1351 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/replication.rst.txt +1228 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/securing.rst.txt +657 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow.rst.txt +57 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +25 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/spark.rst.txt +824 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/transports.rst.txt +291 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +517 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/txlog.rst.txt +62 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/usecases.rst.txt +21 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/utilities.rst.txt +62 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/views.rst.txt +175 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_sources/index.rst.txt +110 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/ajax-loader.gif +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/alabaster.css +695 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/basic.css +632 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/comment-bright.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/comment-close.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/comment.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css +192 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css.backup +161 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/doctools.js +287 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/down-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/down.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/file.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/flag_logo.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/flag_logo.svg +153 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/jquery-3.1.0.js +10074 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/jquery.js +4 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/minus.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/plus.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/pygments.css +74 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/searchtools.js +758 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/underscore-1.3.1.js +999 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/underscore.js +31 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/up-pressed.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/up.png +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/_static/websupport.js +808 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/acks.html +289 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/actions.html +3782 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps-statistics.html +439 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_expressions.html +1552 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_functions.html +1626 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/auxiliary_modules.html +2548 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/config-file-shortcuts.html +508 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/conflated_topics.html +328 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/constructing-fields.html +447 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/daemon.html +295 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/delta.html +609 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/distribution.html +246 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/enrichment.html +264 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/events.html +449 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/file_format_versions.html +229 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/glossary.html +215 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/ha.html +978 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/installing_and_starting.html +357 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/intro.html +572 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/logging.html +972 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/messageTypes.html +1280 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/monitoring.html +718 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/oof.html +341 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/operation.html +1515 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/pub_sub.html +934 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/queues.html +1767 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/replication.html +1777 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/securing.html +697 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow.html +1038 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow_queries.html +621 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/spark.html +819 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/transports.html +352 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/troubleshooting.html +530 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/txlog.html +1013 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/usecases.html +288 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/utilities.html +133 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/chapters/views.html +1120 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/genindex.html +1261 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/index.html +163 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/objects.inv +0 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/search.html +106 -0
- amps-python-client-5.3.4.1/docs/user-guide/html/searchindex.js +1 -0
- amps-python-client-5.3.4.1/include/ampspy_bookmarkstore.hpp +63 -0
- amps-python-client-5.3.4.1/include/ampspy_compat.h +63 -0
- amps-python-client-5.3.4.1/include/ampspy_defs.hpp +181 -0
- amps-python-client-5.3.4.1/include/ampspy_recoverypointadapter.hpp +52 -0
- amps-python-client-5.3.4.1/include/ampspy_shims.hpp +113 -0
- amps-python-client-5.3.4.1/include/ampspy_type_object.hpp +242 -0
- amps-python-client-5.3.4.1/include/ampspy_types.hpp +1139 -0
- amps-python-client-5.3.4.1/include/ampspyver.h +30 -0
- amps-python-client-5.3.4.1/index.html +66 -0
- amps-python-client-5.3.4.1/samples/AMPSConsolePublisher.py +59 -0
- amps-python-client-5.3.4.1/samples/AMPSConsoleSubscriber.py +63 -0
- amps-python-client-5.3.4.1/samples/AMPSFIXBuilderPublisher.py +71 -0
- amps-python-client-5.3.4.1/samples/AMPSFIXShredderSubscriber.py +69 -0
- amps-python-client-5.3.4.1/samples/AMPSNVFIXBuilderPublisher.py +71 -0
- amps-python-client-5.3.4.1/samples/AMPSNVFIXShredderSubscriber.py +67 -0
- amps-python-client-5.3.4.1/samples/AMPSPublishForReplay.py +81 -0
- amps-python-client-5.3.4.1/samples/AMPSQueueConsumer.py +69 -0
- amps-python-client-5.3.4.1/samples/AMPSQueuePublisher.py +59 -0
- amps-python-client-5.3.4.1/samples/AMPSSOWConsolePublisher.py +67 -0
- amps-python-client-5.3.4.1/samples/AMPSSOWConsoleSubscriber.py +77 -0
- amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeConsoleSubscriber.py +79 -0
- amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeWithOOF.py +108 -0
- amps-python-client-5.3.4.1/samples/AMPSSubscribeForReplay.py +128 -0
- amps-python-client-5.3.4.1/samples/AMPSUpdateForOOF.py +123 -0
- amps-python-client-5.3.4.1/samples/CompositeMessagePublisher.py +84 -0
- amps-python-client-5.3.4.1/samples/CompositeMessageSubscriber.py +87 -0
- amps-python-client-5.3.4.1/samples/RandomServerChooser.py +41 -0
- amps-python-client-5.3.4.1/samples/sample.xml +335 -0
- amps-python-client-5.3.4.1/setup.py +209 -0
- amps-python-client-5.3.4.1/setup_amps.py +94 -0
- amps-python-client-5.3.4.1/src/ampspy_shims.cpp +203 -0
- amps-python-client-5.3.4.1/src/ampspy_type_object.cpp +484 -0
- amps-python-client-5.3.4.1/src/authenticator.cpp +128 -0
- amps-python-client-5.3.4.1/src/bookmarkstore.cpp +238 -0
- amps-python-client-5.3.4.1/src/client.cpp +2430 -0
- amps-python-client-5.3.4.1/src/client_docs.h +956 -0
- amps-python-client-5.3.4.1/src/cmessagehandler.cpp +151 -0
- amps-python-client-5.3.4.1/src/command.cpp +164 -0
- amps-python-client-5.3.4.1/src/command_docs.h +194 -0
- amps-python-client-5.3.4.1/src/compositemessagebuilder.cpp +111 -0
- amps-python-client-5.3.4.1/src/compositemessageparser.cpp +146 -0
- amps-python-client-5.3.4.1/src/conflatingrecoverypointadapter.cpp +194 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/BlockPublishStore.hpp +2053 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/BlockStore.hpp +677 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/BookmarkStore.hpp +542 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/Buffer.hpp +214 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageBuilder.hpp +174 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageParser.hpp +151 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/DefaultServerChooser.hpp +162 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/Field.hpp +719 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/HAClient.hpp +370 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/HAClientImpl.hpp +460 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/HybridPublishStore.hpp +481 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/LoggedBookmarkStore.hpp +1255 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MMapBookmarkStore.hpp +1283 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MMapStoreBuffer.hpp +290 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryBookmarkStore.hpp +1622 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryPublishStore.hpp +66 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryStoreBuffer.hpp +244 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MemorySubscriptionManager.hpp +850 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/Message.hpp +1819 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/MessageRouter.hpp +618 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/PublishStore.hpp +158 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategy.hpp +106 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +317 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPoint.hpp +323 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPointAdapter.hpp +501 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/RingBookmarkStore.hpp +669 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +490 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooser.hpp +145 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooserImpl.hpp +95 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps.h +775 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_generated.h +46 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_impl.h +204 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/amps_ssl.h +78 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampscrc.hpp +210 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsplusplus.hpp +8817 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsuri.h +84 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h +41 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h.in +41 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/constants.hpp +194 -0
- amps-python-client-5.3.4.1/src/cpp/include/amps/util.hpp +1692 -0
- amps-python-client-5.3.4.1/src/cpp/src/amps_protocol.c +688 -0
- amps-python-client-5.3.4.1/src/cpp/src/amps_protocol_generated.h +80 -0
- amps-python-client-5.3.4.1/src/cpp/src/amps_ssl.c +489 -0
- amps-python-client-5.3.4.1/src/cpp/src/atfork.c +446 -0
- amps-python-client-5.3.4.1/src/cpp/src/client.c +483 -0
- amps-python-client-5.3.4.1/src/cpp/src/makefile +92 -0
- amps-python-client-5.3.4.1/src/cpp/src/message.c +837 -0
- amps-python-client-5.3.4.1/src/cpp/src/message_generated.h +611 -0
- amps-python-client-5.3.4.1/src/cpp/src/tcp.c +1489 -0
- amps-python-client-5.3.4.1/src/cpp/src/tcps.c +1894 -0
- amps-python-client-5.3.4.1/src/cpp/src/transports.c +123 -0
- amps-python-client-5.3.4.1/src/cpp/src/unix.c +984 -0
- amps-python-client-5.3.4.1/src/cpp/src/uri.c +301 -0
- amps-python-client-5.3.4.1/src/exponentialdelaystrategy.cpp +137 -0
- amps-python-client-5.3.4.1/src/failedwritehandler.cpp +116 -0
- amps-python-client-5.3.4.1/src/fixbuilder.cpp +146 -0
- amps-python-client-5.3.4.1/src/fixeddelaystrategy.cpp +114 -0
- amps-python-client-5.3.4.1/src/fixshredder.cpp +105 -0
- amps-python-client-5.3.4.1/src/fixshredder_docs.h +38 -0
- amps-python-client-5.3.4.1/src/haclient.cpp +691 -0
- amps-python-client-5.3.4.1/src/haclient_docs.h +132 -0
- amps-python-client-5.3.4.1/src/hybridpublishstore.cpp +137 -0
- amps-python-client-5.3.4.1/src/hybridpublishstore_docs.h +31 -0
- amps-python-client-5.3.4.1/src/memorybookmarkstore.cpp +373 -0
- amps-python-client-5.3.4.1/src/memorybookmarkstore_docs.h +39 -0
- amps-python-client-5.3.4.1/src/memorypublishstore.cpp +160 -0
- amps-python-client-5.3.4.1/src/memorypublishstore_docs.h +32 -0
- amps-python-client-5.3.4.1/src/message.cpp +765 -0
- amps-python-client-5.3.4.1/src/message_docs.h +306 -0
- amps-python-client-5.3.4.1/src/messagestream.cpp +623 -0
- amps-python-client-5.3.4.1/src/messagestream_docs.h +45 -0
- amps-python-client-5.3.4.1/src/mmapbookmarkstore.cpp +422 -0
- amps-python-client-5.3.4.1/src/nvfixbuilder.cpp +160 -0
- amps-python-client-5.3.4.1/src/nvfixbuilder_docs.h +33 -0
- amps-python-client-5.3.4.1/src/nvfixshredder.cpp +99 -0
- amps-python-client-5.3.4.1/src/nvfixshredder_docs.h +39 -0
- amps-python-client-5.3.4.1/src/publishstore.cpp +183 -0
- amps-python-client-5.3.4.1/src/raw_wrapper.cpp +756 -0
- amps-python-client-5.3.4.1/src/reason.cpp +71 -0
- amps-python-client-5.3.4.1/src/recoverypoint.cpp +135 -0
- amps-python-client-5.3.4.1/src/recoverypointadapter.cpp +171 -0
- amps-python-client-5.3.4.1/src/ringbookmarkstore.cpp +360 -0
- amps-python-client-5.3.4.1/src/serverchooser.cpp +245 -0
- amps-python-client-5.3.4.1/src/serverchooser_docs.h +39 -0
- amps-python-client-5.3.4.1/src/sowrecoverypointadapter.cpp +248 -0
- amps-python-client-5.3.4.1/src/store.cpp +62 -0
- amps-python-client-5.3.4.1/src/versioninfo.cpp +175 -0
|
@@ -0,0 +1,1139 @@
|
|
|
1
|
+
////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
//
|
|
3
|
+
// Copyright (c) 2010-2023 60East Technologies Inc., All Rights Reserved.
|
|
4
|
+
//
|
|
5
|
+
// This computer software is owned by 60East Technologies Inc. and is
|
|
6
|
+
// protected by U.S. copyright laws and other laws and by international
|
|
7
|
+
// treaties. This computer software is furnished by 60East Technologies
|
|
8
|
+
// Inc. pursuant to a written license agreement and may be used, copied,
|
|
9
|
+
// transmitted, and stored only in accordance with the terms of such
|
|
10
|
+
// license agreement and with the inclusion of the above copyright notice.
|
|
11
|
+
// This computer software or any other copies thereof may not be provided
|
|
12
|
+
// or otherwise made available to any other person.
|
|
13
|
+
//
|
|
14
|
+
// U.S. Government Restricted Rights. This computer software: (a) was
|
|
15
|
+
// developed at private expense and is in all respects the proprietary
|
|
16
|
+
// information of 60East Technologies Inc.; (b) was not developed with
|
|
17
|
+
// government funds; (c) is a trade secret of 60East Technologies Inc.
|
|
18
|
+
// for all purposes of the Freedom of Information Act; and (d) is a
|
|
19
|
+
// commercial item and thus, pursuant to Section 12.212 of the Federal
|
|
20
|
+
// Acquisition Regulations (FAR) and DFAR Supplement Section 227.7202,
|
|
21
|
+
// Government's use, duplication or disclosure of the computer software
|
|
22
|
+
// is subject to the restrictions set forth by 60East Technologies Inc..
|
|
23
|
+
//
|
|
24
|
+
////////////////////////////////////////////////////////////////////////////
|
|
25
|
+
#ifndef __AMPSPY_TYPES_HPP
|
|
26
|
+
#define __AMPSPY_TYPES_HPP
|
|
27
|
+
|
|
28
|
+
#include <ampspy_shims.hpp>
|
|
29
|
+
#include <amps/util.hpp>
|
|
30
|
+
#include <amps/ampsplusplus.hpp>
|
|
31
|
+
#include <amps/CompositeMessageBuilder.hpp>
|
|
32
|
+
#include <amps/CompositeMessageParser.hpp>
|
|
33
|
+
#include <amps/DefaultServerChooser.hpp>
|
|
34
|
+
#include <amps/MMapBookmarkStore.hpp>
|
|
35
|
+
#include <amps/MemoryPublishStore.hpp>
|
|
36
|
+
#include <amps/PublishStore.hpp>
|
|
37
|
+
#include <amps/ReconnectDelayStrategy.hpp>
|
|
38
|
+
#include <amps/RecoveryPoint.hpp>
|
|
39
|
+
#include <amps/RecoveryPointAdapter.hpp>
|
|
40
|
+
#include <amps/RingBookmarkStore.hpp>
|
|
41
|
+
#include <amps/SOWRecoveryPointAdapter.hpp>
|
|
42
|
+
#include <ampspy_type_object.hpp>
|
|
43
|
+
|
|
44
|
+
#include <deque>
|
|
45
|
+
#include <memory>
|
|
46
|
+
#include <vector>
|
|
47
|
+
|
|
48
|
+
// It's a little strange to define _PyThreadState_Current for >= 3.5,
|
|
49
|
+
// since that is still the name of a global in python (albeit with static
|
|
50
|
+
// linkage). Instead we make the equivalent python 3 function available in 2.x.
|
|
51
|
+
#if PY_VERSION_HEX < 0x03000000 && !defined(_PyThreadState_UncheckedGet)
|
|
52
|
+
#define _PyThreadState_UncheckedGet() _PyThreadState_Current
|
|
53
|
+
#elif PY_VERSION_HEX < 0x03050000 && !defined(_PyThreadState_UncheckedGet)
|
|
54
|
+
#define _PyThreadState_UncheckedGet() ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current))
|
|
55
|
+
#endif
|
|
56
|
+
|
|
57
|
+
#if __cplusplus >= 201100L || _MSC_VER >= 1900
|
|
58
|
+
#include <atomic>
|
|
59
|
+
#define AMPSPY_ATOMIC(x) std::atomic<x>
|
|
60
|
+
#define AMPSPY_IEX_GET(x, y) std::atomic_exchange(x, y)
|
|
61
|
+
#else
|
|
62
|
+
#define AMPSPY_ATOMIC(x) x volatile
|
|
63
|
+
#ifdef _WIN64
|
|
64
|
+
#define AMPSPY_IEX_GET(ptr,value) _InterlockedExchange64((LONG64*)(ptr), (LONG64)(value))
|
|
65
|
+
#elif defined(_WIN32 )
|
|
66
|
+
#define AMPSPY_IEX_GET(ptr,value) _InterlockedExchange((long*)(ptr), (LONG)(value))
|
|
67
|
+
#else
|
|
68
|
+
#define AMPSPY_IEX_GET(ptr, value) __sync_lock_test_and_set(ptr, value)
|
|
69
|
+
#endif
|
|
70
|
+
#endif
|
|
71
|
+
|
|
72
|
+
class ampspy_shutdown_exception : public std::runtime_error
|
|
73
|
+
{
|
|
74
|
+
public:
|
|
75
|
+
ampspy_shutdown_exception(void)
|
|
76
|
+
: std::runtime_error("The python interpreter is shutting down.")
|
|
77
|
+
{;}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
class AMPSDLL LockGIL
|
|
81
|
+
{
|
|
82
|
+
PyGILState_STATE state;
|
|
83
|
+
public:
|
|
84
|
+
// due to bugs.python.org/issue1856, we can't safely Ensure while the interpreter is shutting down.
|
|
85
|
+
// we have an at-exit handler registered that sets this flag, which should exit any thread
|
|
86
|
+
// about to attempt to call back into python from here, while the main thread finishes up.
|
|
87
|
+
LockGIL()
|
|
88
|
+
{
|
|
89
|
+
if (ampspy::shims::Py_IsFinalizing())
|
|
90
|
+
{
|
|
91
|
+
throw ampspy_shutdown_exception();
|
|
92
|
+
}
|
|
93
|
+
state = PyGILState_Ensure();
|
|
94
|
+
}
|
|
95
|
+
~LockGIL()
|
|
96
|
+
{
|
|
97
|
+
if (ampspy::shims::PyThreadState_UncheckedGet() == PyGILState_GetThisThreadState())
|
|
98
|
+
{
|
|
99
|
+
PyGILState_Release(state);
|
|
100
|
+
}
|
|
101
|
+
else
|
|
102
|
+
{
|
|
103
|
+
// We're here because we think we are the current thread and own
|
|
104
|
+
// the GIL, and yet _PyThreadState_Current says we're not the
|
|
105
|
+
// current thread. Calling Release here will abort(). This
|
|
106
|
+
// seems to happen after the shutdown sequence has initiated,
|
|
107
|
+
// inside threads other than the interpreter thread.
|
|
108
|
+
;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
#define LOCKGIL LockGIL _lock_;
|
|
114
|
+
class AMPSDLL UnlockGIL
|
|
115
|
+
{
|
|
116
|
+
PyThreadState* state;
|
|
117
|
+
public:
|
|
118
|
+
UnlockGIL()
|
|
119
|
+
{
|
|
120
|
+
state = PyEval_SaveThread();
|
|
121
|
+
}
|
|
122
|
+
~UnlockGIL()
|
|
123
|
+
{
|
|
124
|
+
if (state)
|
|
125
|
+
{
|
|
126
|
+
PyEval_RestoreThread(state);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
void restore()
|
|
130
|
+
{
|
|
131
|
+
PyEval_RestoreThread(state);
|
|
132
|
+
state = NULL;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
template<class Object = PyObject>
|
|
137
|
+
class AMPSDLL AMPSPyReference
|
|
138
|
+
{
|
|
139
|
+
Object* _self;
|
|
140
|
+
public:
|
|
141
|
+
|
|
142
|
+
AMPSPyReference(Object* self_) : _self(self_)
|
|
143
|
+
{
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
~AMPSPyReference()
|
|
147
|
+
{
|
|
148
|
+
Py_XDECREF((PyObject*)_self);
|
|
149
|
+
}
|
|
150
|
+
operator Object* ()
|
|
151
|
+
{
|
|
152
|
+
return _self;
|
|
153
|
+
}
|
|
154
|
+
Object* operator*(void)
|
|
155
|
+
{
|
|
156
|
+
return _self;
|
|
157
|
+
}
|
|
158
|
+
Object* operator->(void)
|
|
159
|
+
{
|
|
160
|
+
return _self;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
bool isNull(void) const
|
|
164
|
+
{
|
|
165
|
+
return _self == NULL;
|
|
166
|
+
}
|
|
167
|
+
PyObject* asPyObject(void)
|
|
168
|
+
{
|
|
169
|
+
return (PyObject*)_self;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
PyObject* release(void)
|
|
173
|
+
{
|
|
174
|
+
PyObject* self = (PyObject*)_self;
|
|
175
|
+
_self = NULL;
|
|
176
|
+
return self;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
#define UNLOCKGIL UnlockGIL _lock_;
|
|
183
|
+
|
|
184
|
+
//
|
|
185
|
+
// Defines an AMPSException subclass that wraps a Python exception/value/traceback.
|
|
186
|
+
// Keeps references to the fetched error and clears the error state. Can restore self
|
|
187
|
+
// to the python error state, or just the value can be extracted and borrowed. Takes
|
|
188
|
+
// care of removing references when it's all done, or if it is used to restore the
|
|
189
|
+
// error state.
|
|
190
|
+
class PyException : public AMPS::AMPSException
|
|
191
|
+
{
|
|
192
|
+
PyObject* _type, *_value, *_traceback;
|
|
193
|
+
void operator=(const PyException& rhs);
|
|
194
|
+
public:
|
|
195
|
+
PyException(const PyException& rhs):
|
|
196
|
+
AMPS::AMPSException(rhs.what(), AMPS_E_OK),
|
|
197
|
+
_type(rhs._type),
|
|
198
|
+
_value(rhs._value),
|
|
199
|
+
_traceback(rhs._traceback)
|
|
200
|
+
{
|
|
201
|
+
Py_XINCREF(_type);
|
|
202
|
+
Py_XINCREF(_value);
|
|
203
|
+
Py_XINCREF(_traceback);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// this error message is seen when the exception is examined from C++ land,
|
|
207
|
+
// including in the "reason" entry in the dictionary passed to ServerChooser's
|
|
208
|
+
// report_failure.
|
|
209
|
+
PyException() : AMPS::AMPSException("a python exception occurred.", AMPS_E_OK)
|
|
210
|
+
{
|
|
211
|
+
_type = NULL;
|
|
212
|
+
_value = NULL;
|
|
213
|
+
_traceback = NULL;
|
|
214
|
+
PyErr_Fetch(&_type, &_value, &_traceback);
|
|
215
|
+
PyErr_NormalizeException(&_type, &_value, &_traceback);
|
|
216
|
+
|
|
217
|
+
// attempt to create a textual description of the error, and set our own "what" to it
|
|
218
|
+
std::string text;
|
|
219
|
+
if (_type)
|
|
220
|
+
{
|
|
221
|
+
PyObject* typeName = PyObject_GetAttrString(_type, "__name__");
|
|
222
|
+
if (typeName)
|
|
223
|
+
{
|
|
224
|
+
#if PY_MAJOR_VERSION >= 3
|
|
225
|
+
text.append(ampspy::shims::PyUnicode_AsUTF8(typeName));
|
|
226
|
+
#else
|
|
227
|
+
text.append(PyString_AsString(typeName));
|
|
228
|
+
#endif
|
|
229
|
+
text.append(": ");
|
|
230
|
+
Py_DECREF(typeName); // -V1067
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (_value)
|
|
234
|
+
{
|
|
235
|
+
PyObject* strVal = PyObject_Str(_value);
|
|
236
|
+
#if PY_MAJOR_VERSION >= 3
|
|
237
|
+
if (strVal)
|
|
238
|
+
{
|
|
239
|
+
text.append(ampspy::shims::PyUnicode_AsUTF8(strVal));
|
|
240
|
+
}
|
|
241
|
+
#else
|
|
242
|
+
if (strVal)
|
|
243
|
+
{
|
|
244
|
+
text.append(PyString_AsString(strVal));
|
|
245
|
+
}
|
|
246
|
+
#endif
|
|
247
|
+
Py_XDECREF(strVal); // -V1067
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// re-set our message if we've got something useful
|
|
251
|
+
if (!text.empty())
|
|
252
|
+
{
|
|
253
|
+
*((AMPS::AMPSException*)this) = AMPS::AMPSException(text, AMPS_E_OK);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
void restore()
|
|
258
|
+
{
|
|
259
|
+
if (_type)
|
|
260
|
+
{
|
|
261
|
+
PyErr_Restore(_type, _value, _traceback);
|
|
262
|
+
_type = _value = _traceback = NULL;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
PyObject* value() const
|
|
267
|
+
{
|
|
268
|
+
return _value;
|
|
269
|
+
}
|
|
270
|
+
PyObject* traceback() const
|
|
271
|
+
{
|
|
272
|
+
return _traceback;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
~PyException() throw()
|
|
276
|
+
{
|
|
277
|
+
try
|
|
278
|
+
{
|
|
279
|
+
LockGIL lock;
|
|
280
|
+
Py_XDECREF(_type);
|
|
281
|
+
Py_XDECREF(_value);
|
|
282
|
+
Py_XDECREF(_traceback);
|
|
283
|
+
}
|
|
284
|
+
catch (...)
|
|
285
|
+
{
|
|
286
|
+
// ignore exception from locking the GIL.
|
|
287
|
+
// We are shutting down and have been caught without a running interpreter.
|
|
288
|
+
// We can no longer safely remove references from the type/value/traceback.
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
#define AMPS_EX_TRAN(x,y) \
|
|
294
|
+
catch(const x & in_ex) \
|
|
295
|
+
{\
|
|
296
|
+
if(ampspy::_is_signaled == true) \
|
|
297
|
+
{\
|
|
298
|
+
PyErr_SetNone(PyExc_KeyboardInterrupt);\
|
|
299
|
+
ampspy::_is_signaled = false; \
|
|
300
|
+
} else {\
|
|
301
|
+
PyErr_SetString(exc::y, in_ex.what());\
|
|
302
|
+
}\
|
|
303
|
+
return NULL;\
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
#define DISPATCH_EXCEPTION \
|
|
307
|
+
catch(PyException & ex) \
|
|
308
|
+
{\
|
|
309
|
+
ex.restore();\
|
|
310
|
+
return NULL;\
|
|
311
|
+
}\
|
|
312
|
+
AMPS_EX_TRAN(BadSowKeyException, BadSowKeyException)\
|
|
313
|
+
AMPS_EX_TRAN(DuplicateLogonException, DuplicateLogonException)\
|
|
314
|
+
AMPS_EX_TRAN(InvalidBookmarkException, InvalidBookmarkException)\
|
|
315
|
+
AMPS_EX_TRAN(InvalidOptionsException, InvalidOptionsException)\
|
|
316
|
+
AMPS_EX_TRAN(InvalidOrderByException, InvalidOrderByException)\
|
|
317
|
+
AMPS_EX_TRAN(InvalidSubIdException, InvalidSubIdException)\
|
|
318
|
+
AMPS_EX_TRAN(LogonRequiredException, LogonRequiredException)\
|
|
319
|
+
AMPS_EX_TRAN(MissingFieldsException, MissingFieldsException)\
|
|
320
|
+
AMPS_EX_TRAN(PublishException, PublishException)\
|
|
321
|
+
AMPS_EX_TRAN(UsageException, AMPSException) \
|
|
322
|
+
AMPS_EX_TRAN(PublishStoreGapException, AMPSException) \
|
|
323
|
+
AMPS_EX_TRAN(StoreException, AMPSException) \
|
|
324
|
+
AMPS_EX_TRAN(DisconnectedException, DisconnectedException)\
|
|
325
|
+
AMPS_EX_TRAN(AlreadyConnectedException, AlreadyConnectedException)\
|
|
326
|
+
AMPS_EX_TRAN(RetryOperationException, RetryOperationException)\
|
|
327
|
+
AMPS_EX_TRAN(AuthenticationException, AuthenticationException)\
|
|
328
|
+
AMPS_EX_TRAN(NotEntitledException, NotEntitledException)\
|
|
329
|
+
AMPS_EX_TRAN(TimedOutException, TimedOutException)\
|
|
330
|
+
AMPS_EX_TRAN(ConnectionRefusedException, ConnectionRefusedException)\
|
|
331
|
+
AMPS_EX_TRAN(InvalidURIException, InvalidUriException)\
|
|
332
|
+
AMPS_EX_TRAN(TransportTypeException, TransportTypeException)\
|
|
333
|
+
AMPS_EX_TRAN(BadFilterException, BadFilterException)\
|
|
334
|
+
AMPS_EX_TRAN(BadRegexTopicException, BadRegexTopicException)\
|
|
335
|
+
AMPS_EX_TRAN(InvalidTopicException, InvalidTopicException)\
|
|
336
|
+
AMPS_EX_TRAN(NameInUseException, NameInUseException)\
|
|
337
|
+
AMPS_EX_TRAN(SubscriptionAlreadyExistsException, SubscriptionAlreadyExistsException)\
|
|
338
|
+
AMPS_EX_TRAN(SubidInUseException, SubidInUseException)\
|
|
339
|
+
AMPS_EX_TRAN(UnknownException, UnknownException)\
|
|
340
|
+
AMPS_EX_TRAN(CommandException, CommandException)\
|
|
341
|
+
AMPS_EX_TRAN(ConnectionException, ConnectionException)\
|
|
342
|
+
AMPS_EX_TRAN(AMPSException, AMPSException)\
|
|
343
|
+
catch (const std::exception& ex)\
|
|
344
|
+
{\
|
|
345
|
+
if(ampspy::_is_signaled == true) \
|
|
346
|
+
{\
|
|
347
|
+
PyErr_SetNone(PyExc_KeyboardInterrupt);\
|
|
348
|
+
ampspy::_is_signaled = false; \
|
|
349
|
+
} else \
|
|
350
|
+
PyErr_SetString(PyExc_RuntimeError, ex.what());\
|
|
351
|
+
return NULL;\
|
|
352
|
+
} catch(...)\
|
|
353
|
+
{\
|
|
354
|
+
if(ampspy::_is_signaled == true) \
|
|
355
|
+
{\
|
|
356
|
+
PyErr_SetNone(PyExc_KeyboardInterrupt);\
|
|
357
|
+
ampspy::_is_signaled = false; \
|
|
358
|
+
} else \
|
|
359
|
+
PyErr_SetString(PyExc_RuntimeError, "An unknown error has occured.");\
|
|
360
|
+
return NULL;\
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
#define AMPS_EX_TRAN_NO_RETURN(x,y) \
|
|
364
|
+
catch(const x & in_ex) \
|
|
365
|
+
{\
|
|
366
|
+
if(ampspy::_is_signaled == true) \
|
|
367
|
+
{\
|
|
368
|
+
PyErr_SetNone(PyExc_KeyboardInterrupt);\
|
|
369
|
+
ampspy::_is_signaled = false; \
|
|
370
|
+
} else \
|
|
371
|
+
PyErr_SetString(exc::y, in_ex.what());\
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
#define DISPATCH_EXCEPTION_NO_RETURN \
|
|
375
|
+
catch(PyException & ex) \
|
|
376
|
+
{\
|
|
377
|
+
ex.restore();\
|
|
378
|
+
}\
|
|
379
|
+
AMPS_EX_TRAN_NO_RETURN(BadSowKeyException, BadSowKeyException)\
|
|
380
|
+
AMPS_EX_TRAN_NO_RETURN(DuplicateLogonException, DuplicateLogonException)\
|
|
381
|
+
AMPS_EX_TRAN_NO_RETURN(InvalidBookmarkException, InvalidBookmarkException)\
|
|
382
|
+
AMPS_EX_TRAN_NO_RETURN(InvalidOptionsException, InvalidOptionsException)\
|
|
383
|
+
AMPS_EX_TRAN_NO_RETURN(InvalidOrderByException, InvalidOrderByException)\
|
|
384
|
+
AMPS_EX_TRAN_NO_RETURN(InvalidSubIdException, InvalidSubIdException)\
|
|
385
|
+
AMPS_EX_TRAN_NO_RETURN(LogonRequiredException, LogonRequiredException)\
|
|
386
|
+
AMPS_EX_TRAN_NO_RETURN(MissingFieldsException, MissingFieldsException)\
|
|
387
|
+
AMPS_EX_TRAN_NO_RETURN(PublishException, PublishException)\
|
|
388
|
+
AMPS_EX_TRAN_NO_RETURN(UsageException, AMPSException) \
|
|
389
|
+
AMPS_EX_TRAN_NO_RETURN(PublishStoreGapException, AMPSException) \
|
|
390
|
+
AMPS_EX_TRAN_NO_RETURN(StoreException, AMPSException) \
|
|
391
|
+
AMPS_EX_TRAN_NO_RETURN(DisconnectedException, DisconnectedException)\
|
|
392
|
+
AMPS_EX_TRAN_NO_RETURN(AlreadyConnectedException, AlreadyConnectedException)\
|
|
393
|
+
AMPS_EX_TRAN_NO_RETURN(RetryOperationException, RetryOperationException)\
|
|
394
|
+
AMPS_EX_TRAN_NO_RETURN(AuthenticationException, AuthenticationException)\
|
|
395
|
+
AMPS_EX_TRAN_NO_RETURN(NotEntitledException, NotEntitledException)\
|
|
396
|
+
AMPS_EX_TRAN_NO_RETURN(TimedOutException, TimedOutException)\
|
|
397
|
+
AMPS_EX_TRAN_NO_RETURN(ConnectionRefusedException, ConnectionRefusedException)\
|
|
398
|
+
AMPS_EX_TRAN_NO_RETURN(InvalidURIException, InvalidUriException)\
|
|
399
|
+
AMPS_EX_TRAN_NO_RETURN(TransportTypeException, TransportTypeException)\
|
|
400
|
+
AMPS_EX_TRAN_NO_RETURN(BadFilterException, BadFilterException)\
|
|
401
|
+
AMPS_EX_TRAN_NO_RETURN(BadRegexTopicException, BadRegexTopicException)\
|
|
402
|
+
AMPS_EX_TRAN_NO_RETURN(InvalidTopicException, InvalidTopicException)\
|
|
403
|
+
AMPS_EX_TRAN_NO_RETURN(NameInUseException, NameInUseException)\
|
|
404
|
+
AMPS_EX_TRAN_NO_RETURN(SubscriptionAlreadyExistsException, SubscriptionAlreadyExistsException)\
|
|
405
|
+
AMPS_EX_TRAN_NO_RETURN(SubidInUseException, SubidInUseException)\
|
|
406
|
+
AMPS_EX_TRAN_NO_RETURN(UnknownException, UnknownException)\
|
|
407
|
+
AMPS_EX_TRAN_NO_RETURN(CommandException, CommandException)\
|
|
408
|
+
AMPS_EX_TRAN_NO_RETURN(ConnectionException, ConnectionException)\
|
|
409
|
+
AMPS_EX_TRAN_NO_RETURN(AMPSException, AMPSException)\
|
|
410
|
+
catch (const std::exception& ex)\
|
|
411
|
+
{\
|
|
412
|
+
if(ampspy::_is_signaled == true) \
|
|
413
|
+
{\
|
|
414
|
+
PyErr_SetNone(PyExc_KeyboardInterrupt);\
|
|
415
|
+
ampspy::_is_signaled = false; \
|
|
416
|
+
} else \
|
|
417
|
+
PyErr_SetString(PyExc_RuntimeError, ex.what());\
|
|
418
|
+
} catch(...)\
|
|
419
|
+
{\
|
|
420
|
+
if(ampspy::_is_signaled == true) \
|
|
421
|
+
{\
|
|
422
|
+
PyErr_SetNone(PyExc_KeyboardInterrupt);\
|
|
423
|
+
ampspy::_is_signaled = false; \
|
|
424
|
+
} else \
|
|
425
|
+
PyErr_SetString(PyExc_RuntimeError, "An unknown error has occured.");\
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
namespace ampspy
|
|
429
|
+
{
|
|
430
|
+
// used to initiate an exit process after a callback has requested it.
|
|
431
|
+
AMPSDLL void unhandled_exception();
|
|
432
|
+
|
|
433
|
+
namespace exc
|
|
434
|
+
{
|
|
435
|
+
extern PyObject* AMPSException;
|
|
436
|
+
extern PyObject* CommandException;
|
|
437
|
+
extern PyObject* CommandTypeError;
|
|
438
|
+
extern PyObject* TimedOutException;
|
|
439
|
+
extern PyObject* BadFilterException;
|
|
440
|
+
extern PyObject* BadFilter;
|
|
441
|
+
extern PyObject* BadRegexTopicException;
|
|
442
|
+
extern PyObject* BadRegexTopic;
|
|
443
|
+
extern PyObject* InvalidTopicException;
|
|
444
|
+
extern PyObject* InvalidTopicError;
|
|
445
|
+
extern PyObject* SubidInUseException;
|
|
446
|
+
extern PyObject* SubscriptionAlreadyExistsException;
|
|
447
|
+
extern PyObject* SubscriptionAlreadyExists;
|
|
448
|
+
extern PyObject* UnknownException;
|
|
449
|
+
extern PyObject* UnknownError;
|
|
450
|
+
extern PyObject* ConnectionException;
|
|
451
|
+
extern PyObject* AlreadyConnectedException;
|
|
452
|
+
extern PyObject* AlreadyConnected;
|
|
453
|
+
extern PyObject* AuthenticationException;
|
|
454
|
+
extern PyObject* AuthenticationError;
|
|
455
|
+
extern PyObject* ConnectionRefusedException;
|
|
456
|
+
extern PyObject* ConnectionRefused;
|
|
457
|
+
extern PyObject* DisconnectedException;
|
|
458
|
+
extern PyObject* Disconnected;
|
|
459
|
+
extern PyObject* InvalidUriException;
|
|
460
|
+
extern PyObject* InvalidUriFormat;
|
|
461
|
+
extern PyObject* MessageTypeError;
|
|
462
|
+
extern PyObject* MessageTypeException;
|
|
463
|
+
extern PyObject* MessageTypeNotFound;
|
|
464
|
+
extern PyObject* InvalidMessageTypeOptions;
|
|
465
|
+
extern PyObject* NameInUseException;
|
|
466
|
+
extern PyObject* ClientNameInUse;
|
|
467
|
+
extern PyObject* NotEntitledException;
|
|
468
|
+
extern PyObject* NotEntitledError;
|
|
469
|
+
extern PyObject* RetryOperationException;
|
|
470
|
+
extern PyObject* RetryOperation;
|
|
471
|
+
extern PyObject* StreamException;
|
|
472
|
+
extern PyObject* StreamError;
|
|
473
|
+
extern PyObject* TransportException;
|
|
474
|
+
extern PyObject* TransportError;
|
|
475
|
+
extern PyObject* InvalidTransportOptionsException;
|
|
476
|
+
extern PyObject* InvalidTransportOptions;
|
|
477
|
+
extern PyObject* TransportTypeException;
|
|
478
|
+
extern PyObject* TransportNotFound;
|
|
479
|
+
extern PyObject* BadSowKeyException;
|
|
480
|
+
extern PyObject* DuplicateLogonException;
|
|
481
|
+
extern PyObject* InvalidBookmarkException;
|
|
482
|
+
extern PyObject* InvalidOptionsException;
|
|
483
|
+
extern PyObject* InvalidOrderByException;
|
|
484
|
+
extern PyObject* InvalidSubIdException;
|
|
485
|
+
extern PyObject* LogonRequiredException;
|
|
486
|
+
extern PyObject* MissingFieldsException;
|
|
487
|
+
extern PyObject* PublishException;
|
|
488
|
+
|
|
489
|
+
AMPSDLL void throwError();
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
class PyExceptionListener : public AMPS::ExceptionListener
|
|
493
|
+
{
|
|
494
|
+
volatile PyObject* _callable;
|
|
495
|
+
public:
|
|
496
|
+
|
|
497
|
+
void exceptionThrown(const std::exception& ex) const
|
|
498
|
+
{
|
|
499
|
+
LOCKGIL;
|
|
500
|
+
if (!_callable)
|
|
501
|
+
{
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
PyObject* ctor_args = Py_BuildValue("(s)", ex.what());
|
|
505
|
+
if (ctor_args == NULL)
|
|
506
|
+
{
|
|
507
|
+
ampspy::unhandled_exception();
|
|
508
|
+
}
|
|
509
|
+
PyObject* exception = NULL;
|
|
510
|
+
PyObject* traceback = NULL;
|
|
511
|
+
#if defined(_CPPRTTI) || defined(__GXX_RTTI)
|
|
512
|
+
// IF we have RTTI on, we can check if the exception has a python
|
|
513
|
+
// exception buried in it, and just pass that thing in, instead
|
|
514
|
+
// of manufacturing an AMPSException object.
|
|
515
|
+
// Without RTTI, the python exception listener will always see an
|
|
516
|
+
// AMPSException.
|
|
517
|
+
const PyException* pyException = dynamic_cast<const PyException*>(&ex);
|
|
518
|
+
|
|
519
|
+
if ( pyException != NULL )
|
|
520
|
+
{
|
|
521
|
+
exception = pyException->value();
|
|
522
|
+
Py_XINCREF(exception);
|
|
523
|
+
traceback = pyException->traceback();
|
|
524
|
+
Py_XINCREF(traceback);
|
|
525
|
+
}
|
|
526
|
+
#endif
|
|
527
|
+
if (exception == NULL)
|
|
528
|
+
{
|
|
529
|
+
exception = PyObject_CallObject(ampspy::exc::AMPSException, ctor_args);
|
|
530
|
+
}
|
|
531
|
+
if (exception == NULL)
|
|
532
|
+
{
|
|
533
|
+
ampspy::unhandled_exception();
|
|
534
|
+
}
|
|
535
|
+
if (traceback == NULL)
|
|
536
|
+
{
|
|
537
|
+
traceback = Py_None;
|
|
538
|
+
Py_XINCREF(traceback);
|
|
539
|
+
}
|
|
540
|
+
PyObject* exception_tuple = Py_BuildValue("(OO)", exception, traceback);
|
|
541
|
+
if (exception_tuple == NULL)
|
|
542
|
+
{
|
|
543
|
+
ampspy::unhandled_exception();
|
|
544
|
+
}
|
|
545
|
+
PyObject* retval = PyObject_Call((PyObject*)_callable, exception_tuple, (PyObject*)NULL);
|
|
546
|
+
if (retval == NULL)
|
|
547
|
+
{
|
|
548
|
+
PyErr_Clear();
|
|
549
|
+
// try it without the traceback
|
|
550
|
+
Py_XDECREF(exception_tuple);
|
|
551
|
+
exception_tuple = Py_BuildValue("(O)", exception);
|
|
552
|
+
retval = PyObject_Call((PyObject*)_callable, exception_tuple, (PyObject*)NULL);
|
|
553
|
+
if (retval == NULL)
|
|
554
|
+
{
|
|
555
|
+
ampspy::unhandled_exception();
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
Py_XDECREF(retval);
|
|
559
|
+
Py_XDECREF(exception_tuple);
|
|
560
|
+
Py_XDECREF(exception);
|
|
561
|
+
Py_XDECREF(ctor_args);
|
|
562
|
+
Py_XDECREF(traceback);
|
|
563
|
+
}
|
|
564
|
+
PyExceptionListener() : _callable(NULL) {;}
|
|
565
|
+
PyExceptionListener(PyObject* callable)
|
|
566
|
+
: _callable(callable)
|
|
567
|
+
{
|
|
568
|
+
LOCKGIL;
|
|
569
|
+
Py_INCREF(callable);
|
|
570
|
+
}
|
|
571
|
+
~PyExceptionListener()
|
|
572
|
+
{
|
|
573
|
+
try
|
|
574
|
+
{
|
|
575
|
+
LOCKGIL;
|
|
576
|
+
Py_XDECREF(_callable);
|
|
577
|
+
}
|
|
578
|
+
catch (...)
|
|
579
|
+
{
|
|
580
|
+
// Shutdown can throw locking the GIL
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
void set(PyObject* callable)
|
|
584
|
+
{
|
|
585
|
+
try
|
|
586
|
+
{
|
|
587
|
+
LOCKGIL;
|
|
588
|
+
Py_XDECREF(_callable);
|
|
589
|
+
Py_XINCREF(callable);
|
|
590
|
+
}
|
|
591
|
+
catch (...)
|
|
592
|
+
{
|
|
593
|
+
// Shutdown can throw locking the GIL
|
|
594
|
+
}
|
|
595
|
+
_callable = callable;
|
|
596
|
+
}
|
|
597
|
+
volatile PyObject* callable(void)
|
|
598
|
+
{
|
|
599
|
+
return _callable;
|
|
600
|
+
}
|
|
601
|
+
};
|
|
602
|
+
|
|
603
|
+
class PyAuthenticator;
|
|
604
|
+
|
|
605
|
+
namespace message
|
|
606
|
+
{
|
|
607
|
+
struct AMPSDLL obj
|
|
608
|
+
{
|
|
609
|
+
PyObject_HEAD
|
|
610
|
+
AMPS::Message* pMessage;
|
|
611
|
+
bool isOwned;
|
|
612
|
+
};
|
|
613
|
+
namespace options
|
|
614
|
+
{
|
|
615
|
+
struct AMPSDLL obj
|
|
616
|
+
{
|
|
617
|
+
PyObject_HEAD
|
|
618
|
+
AMPS::Message::Options* pOptions;
|
|
619
|
+
};
|
|
620
|
+
} //namespace options
|
|
621
|
+
|
|
622
|
+
AMPSDLL_EXTERN ampspy::ampspy_type_object message_type;
|
|
623
|
+
void add_types(PyObject* module_);
|
|
624
|
+
AMPSDLL PyObject* toPythonMessage(AMPS::Message& message_);
|
|
625
|
+
AMPSDLL void setCppMessage(obj* pMessage_, const AMPS::Message& message_);
|
|
626
|
+
} // namespace message
|
|
627
|
+
|
|
628
|
+
namespace cmessagehandler
|
|
629
|
+
{
|
|
630
|
+
struct AMPSDLL obj
|
|
631
|
+
{
|
|
632
|
+
PyObject_HEAD
|
|
633
|
+
PyObject* function;
|
|
634
|
+
PyObject* userdata;
|
|
635
|
+
};
|
|
636
|
+
AMPSDLL AMPS::MessageHandler getMessageHandler(PyObject* obj);
|
|
637
|
+
AMPSDLL bool isCHandler(PyObject* obj);
|
|
638
|
+
void add_types(PyObject*);
|
|
639
|
+
}
|
|
640
|
+
namespace client
|
|
641
|
+
{
|
|
642
|
+
struct AMPSDLL callback_info;
|
|
643
|
+
class TransportFilter;
|
|
644
|
+
typedef std::list<callback_info*> callback_infos;
|
|
645
|
+
typedef std::map<PyObject*, AMPS::ConnectionStateListener*> connection_state_listeners;
|
|
646
|
+
typedef std::vector<void*> message_stream_list;
|
|
647
|
+
struct obj
|
|
648
|
+
{
|
|
649
|
+
PyObject_HEAD
|
|
650
|
+
PyObject* weakreflist;
|
|
651
|
+
AMPSPY_ATOMIC(AMPS::Client*) pClient;
|
|
652
|
+
PyObject* disconnectHandler;
|
|
653
|
+
std::shared_ptr<AMPS::ExceptionListener> exceptionHandler;
|
|
654
|
+
AMPSPY_ATOMIC(callback_infos*) callbackInfos;
|
|
655
|
+
message::obj* message;
|
|
656
|
+
PyObject* message_args;
|
|
657
|
+
AMPSPY_ATOMIC(connection_state_listeners*) connectionStateListeners;
|
|
658
|
+
TransportFilter* transportFilter;
|
|
659
|
+
PyObject* threadCreatedCallback;
|
|
660
|
+
};
|
|
661
|
+
namespace connection_state_listener
|
|
662
|
+
{
|
|
663
|
+
struct AMPSDLL obj
|
|
664
|
+
{
|
|
665
|
+
PyObject_HEAD
|
|
666
|
+
};
|
|
667
|
+
} // namespace connection_state_listener
|
|
668
|
+
AMPSDLL_EXTERN ampspy_type_object client_type;
|
|
669
|
+
void add_types(PyObject* module_);
|
|
670
|
+
void _initializeInternals(obj*);
|
|
671
|
+
AMPSDLL void* copy_route(void*);
|
|
672
|
+
AMPSDLL void remove_route(void*);
|
|
673
|
+
AMPSDLL void destructor(PyObject*);
|
|
674
|
+
AMPSDLL void clear_callback_infos(void*);
|
|
675
|
+
AMPSDLL void amps_python_client_atfork_prepare();
|
|
676
|
+
AMPSDLL void amps_python_client_atfork_child();
|
|
677
|
+
AMPSDLL void amps_python_client_atfork_parent();
|
|
678
|
+
}
|
|
679
|
+
namespace reason
|
|
680
|
+
{
|
|
681
|
+
struct AMPSDLL obj
|
|
682
|
+
{
|
|
683
|
+
PyObject_HEAD
|
|
684
|
+
};
|
|
685
|
+
AMPSDLL_EXTERN ampspy::ampspy_type_object reason_type;
|
|
686
|
+
void add_types(PyObject* module_);
|
|
687
|
+
}
|
|
688
|
+
namespace store
|
|
689
|
+
{
|
|
690
|
+
struct AMPSDLL obj
|
|
691
|
+
{
|
|
692
|
+
PyObject_HEAD
|
|
693
|
+
};
|
|
694
|
+
void add_types(PyObject* module_);
|
|
695
|
+
}
|
|
696
|
+
namespace fixbuilder
|
|
697
|
+
{
|
|
698
|
+
struct AMPSDLL obj
|
|
699
|
+
{
|
|
700
|
+
PyObject_HEAD
|
|
701
|
+
AMPS::FIXBuilder* pFIXBuilder;
|
|
702
|
+
};
|
|
703
|
+
void add_types(PyObject* module_);
|
|
704
|
+
}
|
|
705
|
+
namespace nvfixbuilder
|
|
706
|
+
{
|
|
707
|
+
struct AMPSDLL obj
|
|
708
|
+
{
|
|
709
|
+
PyObject_HEAD
|
|
710
|
+
AMPS::NVFIXBuilder* pNVFIXBuilder;
|
|
711
|
+
};
|
|
712
|
+
void add_types(PyObject* module_);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
namespace authenticator
|
|
716
|
+
{
|
|
717
|
+
struct AMPSDLL obj
|
|
718
|
+
{
|
|
719
|
+
PyObject_HEAD;
|
|
720
|
+
};
|
|
721
|
+
void add_types(PyObject* module_);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
namespace serverchooser
|
|
725
|
+
{
|
|
726
|
+
struct AMPSDLL obj
|
|
727
|
+
{
|
|
728
|
+
PyObject_HEAD
|
|
729
|
+
AMPS::DefaultServerChooser* impl;
|
|
730
|
+
};
|
|
731
|
+
void add_types(PyObject* module_);
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
namespace fixshredder
|
|
735
|
+
{
|
|
736
|
+
struct AMPSDLL obj
|
|
737
|
+
{
|
|
738
|
+
PyObject_HEAD
|
|
739
|
+
char fs;
|
|
740
|
+
};
|
|
741
|
+
void add_types(PyObject* module_);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
namespace nvfixshredder
|
|
745
|
+
{
|
|
746
|
+
struct AMPSDLL obj
|
|
747
|
+
{
|
|
748
|
+
PyObject_HEAD
|
|
749
|
+
char fs;
|
|
750
|
+
};
|
|
751
|
+
void add_types(PyObject* module_);
|
|
752
|
+
}
|
|
753
|
+
namespace haclient
|
|
754
|
+
{
|
|
755
|
+
struct AMPSDLL obj
|
|
756
|
+
{
|
|
757
|
+
client::obj _client;
|
|
758
|
+
PyObject* _pyServerChooser;
|
|
759
|
+
PyObject* _pyDelayStrategy;
|
|
760
|
+
};
|
|
761
|
+
AMPSDLL_EXTERN ampspy_type_object haclient_type;
|
|
762
|
+
void add_types(PyObject* module_);
|
|
763
|
+
}
|
|
764
|
+
namespace messagestream
|
|
765
|
+
{
|
|
766
|
+
struct obj;
|
|
767
|
+
AMPSDLL void messageCallback(const AMPS::Message& message, void* void_self);
|
|
768
|
+
class CustomConnectionStateListener : public AMPS::ConnectionStateListener
|
|
769
|
+
{
|
|
770
|
+
obj* _self;
|
|
771
|
+
public:
|
|
772
|
+
CustomConnectionStateListener(obj* self_ = NULL) : _self(self_) {}
|
|
773
|
+
void connectionStateChanged(AMPS::ConnectionStateListener::State state_);
|
|
774
|
+
};
|
|
775
|
+
struct MessageStreamImpl;
|
|
776
|
+
struct obj
|
|
777
|
+
{
|
|
778
|
+
PyObject_HEAD
|
|
779
|
+
AMPSPY_ATOMIC(MessageStreamImpl*) _pImpl;
|
|
780
|
+
PyObject* _pPythonClient;
|
|
781
|
+
AMPS::Client _client;
|
|
782
|
+
|
|
783
|
+
void internalInit(PyObject*, AMPS::Client*, bool, bool, bool);
|
|
784
|
+
|
|
785
|
+
AMPS::MessageHandler messageHandler();
|
|
786
|
+
|
|
787
|
+
const std::string& commandId(void) const;
|
|
788
|
+
std::string& commandId(void);
|
|
789
|
+
const std::string& queryId(void) const;
|
|
790
|
+
std::string& queryId(void);
|
|
791
|
+
const std::string& subId(void) const;
|
|
792
|
+
std::string& subId(void);
|
|
793
|
+
void setAcksOnly(unsigned);
|
|
794
|
+
};
|
|
795
|
+
AMPSDLL_EXTERN ampspy::ampspy_type_object messagestream_type;
|
|
796
|
+
AMPSDLL void discardImpl(void*);
|
|
797
|
+
void add_types(PyObject*);
|
|
798
|
+
}
|
|
799
|
+
namespace command
|
|
800
|
+
{
|
|
801
|
+
struct obj
|
|
802
|
+
{
|
|
803
|
+
PyObject_HEAD
|
|
804
|
+
AMPS::Command command;
|
|
805
|
+
};
|
|
806
|
+
AMPSDLL_EXTERN ampspy_type_object command_type;
|
|
807
|
+
void add_types(PyObject*);
|
|
808
|
+
}
|
|
809
|
+
namespace memorybookmarkstore
|
|
810
|
+
{
|
|
811
|
+
struct AMPSDLL obj
|
|
812
|
+
{
|
|
813
|
+
PyObject_HEAD;
|
|
814
|
+
AMPS::BookmarkStore* impl;
|
|
815
|
+
PyObject* resizeHandler;
|
|
816
|
+
PyObject* pAdapter;
|
|
817
|
+
};
|
|
818
|
+
AMPSDLL_EXTERN ampspy_type_object memorybookmarkstore_type;
|
|
819
|
+
void add_types(PyObject*);
|
|
820
|
+
}
|
|
821
|
+
namespace memorypublishstore
|
|
822
|
+
{
|
|
823
|
+
struct AMPSDLL obj
|
|
824
|
+
{
|
|
825
|
+
PyObject_HEAD;
|
|
826
|
+
AMPS::Store* impl;
|
|
827
|
+
PyObject* resizeHandler;
|
|
828
|
+
};
|
|
829
|
+
AMPSDLL_EXTERN ampspy_type_object memorypublishstore_type;
|
|
830
|
+
void add_types(PyObject*);
|
|
831
|
+
}
|
|
832
|
+
namespace hybridpublishstore
|
|
833
|
+
{
|
|
834
|
+
struct AMPSDLL obj
|
|
835
|
+
{
|
|
836
|
+
PyObject_HEAD;
|
|
837
|
+
AMPS::Store* impl;
|
|
838
|
+
PyObject* resizeHandler;
|
|
839
|
+
};
|
|
840
|
+
AMPSDLL_EXTERN ampspy_type_object hybridpublishstore_type;
|
|
841
|
+
void add_types(PyObject*);
|
|
842
|
+
}
|
|
843
|
+
namespace publishstore
|
|
844
|
+
{
|
|
845
|
+
struct AMPSDLL obj
|
|
846
|
+
{
|
|
847
|
+
PyObject_HEAD;
|
|
848
|
+
AMPS::PublishStore* impl;
|
|
849
|
+
PyObject* resizeHandler;
|
|
850
|
+
};
|
|
851
|
+
AMPSDLL_EXTERN ampspy_type_object publishstore_type;
|
|
852
|
+
void add_types(PyObject*);
|
|
853
|
+
}
|
|
854
|
+
namespace mmapbookmarkstore
|
|
855
|
+
{
|
|
856
|
+
struct AMPSDLL obj
|
|
857
|
+
{
|
|
858
|
+
PyObject_HEAD;
|
|
859
|
+
AMPS::BookmarkStore* impl;
|
|
860
|
+
PyObject* resizeHandler;
|
|
861
|
+
PyObject* pAdapter;
|
|
862
|
+
};
|
|
863
|
+
AMPSDLL_EXTERN ampspy_type_object mmapbookmarkstore_type;
|
|
864
|
+
void add_types(PyObject*);
|
|
865
|
+
}
|
|
866
|
+
namespace ringbookmarkstore
|
|
867
|
+
{
|
|
868
|
+
struct AMPSDLL obj
|
|
869
|
+
{
|
|
870
|
+
PyObject_HEAD;
|
|
871
|
+
AMPS::BookmarkStore* impl;
|
|
872
|
+
PyObject* resizeHandler;
|
|
873
|
+
};
|
|
874
|
+
AMPSDLL_EXTERN ampspy_type_object ringbookmarkstore_type;
|
|
875
|
+
void add_types(PyObject*);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
namespace exponentialdelaystrategy
|
|
880
|
+
{
|
|
881
|
+
struct obj
|
|
882
|
+
{
|
|
883
|
+
PyObject_HEAD;
|
|
884
|
+
AMPS::ReconnectDelayStrategy impl;
|
|
885
|
+
};
|
|
886
|
+
AMPSDLL_EXTERN ampspy_type_object type;
|
|
887
|
+
void add_types(PyObject*);
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
namespace fixeddelaystrategy
|
|
891
|
+
{
|
|
892
|
+
struct obj
|
|
893
|
+
{
|
|
894
|
+
PyObject_HEAD;
|
|
895
|
+
AMPS::ReconnectDelayStrategy impl;
|
|
896
|
+
};
|
|
897
|
+
AMPSDLL_EXTERN ampspy_type_object type;
|
|
898
|
+
void add_types(PyObject*);
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
namespace compositemessagebuilder
|
|
902
|
+
{
|
|
903
|
+
struct AMPSDLL obj
|
|
904
|
+
{
|
|
905
|
+
PyObject_HEAD;
|
|
906
|
+
AMPS::CompositeMessageBuilder* pCompositeMessageBuilder;
|
|
907
|
+
};
|
|
908
|
+
void add_types(PyObject* module_);
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
namespace compositemessageparser
|
|
912
|
+
{
|
|
913
|
+
struct AMPSDLL obj
|
|
914
|
+
{
|
|
915
|
+
PyObject_HEAD;
|
|
916
|
+
AMPS::CompositeMessageParser* pCompositeMessageParser;
|
|
917
|
+
std::string* pLastParsed;
|
|
918
|
+
};
|
|
919
|
+
void add_types(PyObject* module_);
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
namespace versioninfo
|
|
923
|
+
{
|
|
924
|
+
struct AMPSDLL obj
|
|
925
|
+
{
|
|
926
|
+
PyObject_HEAD;
|
|
927
|
+
AMPS::VersionInfo* pVersionInfo;
|
|
928
|
+
};
|
|
929
|
+
AMPSDLL_EXTERN ampspy_type_object versioninfo_type;
|
|
930
|
+
void add_types(PyObject*);
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
namespace recoverypoint
|
|
934
|
+
{
|
|
935
|
+
struct AMPSDLL obj
|
|
936
|
+
{
|
|
937
|
+
PyObject_HEAD;
|
|
938
|
+
char* subId;
|
|
939
|
+
char* bookmark;
|
|
940
|
+
};
|
|
941
|
+
AMPSDLL_EXTERN ampspy::ampspy_type_object type;
|
|
942
|
+
void add_types(PyObject*);
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
namespace sowrecoverypointadapter
|
|
946
|
+
{
|
|
947
|
+
struct obj
|
|
948
|
+
{
|
|
949
|
+
PyObject_HEAD;
|
|
950
|
+
std::shared_ptr<AMPS::SOWRecoveryPointAdapter> pImpl;
|
|
951
|
+
AMPS::RecoveryPointAdapter adapter;
|
|
952
|
+
std::shared_ptr<AMPS::ExceptionListener> exceptionListener;
|
|
953
|
+
};
|
|
954
|
+
AMPSDLL_EXTERN ampspy::ampspy_type_object type;
|
|
955
|
+
void add_types(PyObject*);
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
namespace conflatingrecoverypointadapter
|
|
959
|
+
{
|
|
960
|
+
struct obj
|
|
961
|
+
{
|
|
962
|
+
PyObject_HEAD;
|
|
963
|
+
AMPS::ConflatingRecoveryPointAdapter* pImpl;
|
|
964
|
+
AMPS::RecoveryPointAdapter adapter;
|
|
965
|
+
};
|
|
966
|
+
AMPSDLL_EXTERN ampspy::ampspy_type_object type;
|
|
967
|
+
void add_types(PyObject*);
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
class PyAuthenticator : public AMPS::DefaultAuthenticator
|
|
971
|
+
{
|
|
972
|
+
PyObject* _self;
|
|
973
|
+
public:
|
|
974
|
+
|
|
975
|
+
// No reference to the authenticator is taken; caller is responsible
|
|
976
|
+
// for ensuring authenticator still exists for lifetime of this bridge.
|
|
977
|
+
PyAuthenticator(PyObject* self) : _self(self) {}
|
|
978
|
+
void setPythonAuthenticator(PyObject* new_)
|
|
979
|
+
{
|
|
980
|
+
_self = new_;
|
|
981
|
+
}
|
|
982
|
+
PyObject* getPythonAuthenticator(void)
|
|
983
|
+
{
|
|
984
|
+
return _self;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
// Allows the authenticator to return a Unicode in Py 3.x,
|
|
988
|
+
// a bytes-like object, a string, None, or any object that
|
|
989
|
+
// has a __str__ method defined.
|
|
990
|
+
std::string extractReturnedPassword(PyObject* pyObject_)
|
|
991
|
+
{
|
|
992
|
+
assert(pyObject_);
|
|
993
|
+
#if PY_MAJOR_VERSION >= 3
|
|
994
|
+
if (PyUnicode_Check(pyObject_))
|
|
995
|
+
{
|
|
996
|
+
const char* data = shims::PyUnicode_AsUTF8(pyObject_);
|
|
997
|
+
exc::throwError();
|
|
998
|
+
if (data)
|
|
999
|
+
{
|
|
1000
|
+
return std::string(data);
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
#endif
|
|
1004
|
+
if (PyBytes_Check(pyObject_))
|
|
1005
|
+
{
|
|
1006
|
+
const char* data = PyBytes_AsString(pyObject_);
|
|
1007
|
+
exc::throwError();
|
|
1008
|
+
if (data)
|
|
1009
|
+
{
|
|
1010
|
+
return std::string(data);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
else if (pyObject_ == Py_None)
|
|
1014
|
+
{
|
|
1015
|
+
return "";
|
|
1016
|
+
}
|
|
1017
|
+
else
|
|
1018
|
+
{
|
|
1019
|
+
PyObject* pyStringRep = PyObject_Str(pyObject_);
|
|
1020
|
+
if (pyStringRep)
|
|
1021
|
+
{
|
|
1022
|
+
const char* bytes = NULL;
|
|
1023
|
+
#if PY_MAJOR_VERSION >= 3
|
|
1024
|
+
bytes = shims::PyUnicode_AsUTF8(pyStringRep);
|
|
1025
|
+
#else
|
|
1026
|
+
bytes = PyString_AsString(pyStringRep);
|
|
1027
|
+
#endif
|
|
1028
|
+
std::string retVal(bytes);
|
|
1029
|
+
if (bytes)
|
|
1030
|
+
{
|
|
1031
|
+
retVal = bytes;
|
|
1032
|
+
}
|
|
1033
|
+
Py_DECREF(pyStringRep);
|
|
1034
|
+
exc::throwError();
|
|
1035
|
+
if (!retVal.empty())
|
|
1036
|
+
{
|
|
1037
|
+
return retVal;
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
throw AMPS::AMPSException("Unknown return type returned by authenticator.", AMPS_E_OK);
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
virtual std::string authenticate(const std::string& userName_, const std::string& password_)
|
|
1046
|
+
{
|
|
1047
|
+
LOCKGIL;
|
|
1048
|
+
PyObject* p = PyObject_CallMethod((PyObject*)_self, (char*)"authenticate", (char*)"(ss)", userName_.c_str(), password_.c_str());
|
|
1049
|
+
if (p == NULL && PyErr_ExceptionMatches(PyExc_SystemExit))
|
|
1050
|
+
{
|
|
1051
|
+
ampspy::unhandled_exception();
|
|
1052
|
+
}
|
|
1053
|
+
exc::throwError();
|
|
1054
|
+
if (!p)
|
|
1055
|
+
{
|
|
1056
|
+
return password_;
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
std::string returnValue = extractReturnedPassword(p);
|
|
1060
|
+
Py_DECREF(p);
|
|
1061
|
+
|
|
1062
|
+
return returnValue;
|
|
1063
|
+
}
|
|
1064
|
+
///
|
|
1065
|
+
virtual std::string retry(const std::string& userName_, const std::string& password_)
|
|
1066
|
+
{
|
|
1067
|
+
LOCKGIL;
|
|
1068
|
+
PyObject* p = PyObject_CallMethod((PyObject*)_self, (char*)"retry", (char*)"(ss)", userName_.c_str(), password_.c_str());
|
|
1069
|
+
if (p == NULL && PyErr_ExceptionMatches(PyExc_SystemExit))
|
|
1070
|
+
{
|
|
1071
|
+
ampspy::unhandled_exception();
|
|
1072
|
+
}
|
|
1073
|
+
exc::throwError();
|
|
1074
|
+
if (!p)
|
|
1075
|
+
{
|
|
1076
|
+
return password_;
|
|
1077
|
+
}
|
|
1078
|
+
std::string returnValue = extractReturnedPassword(p);
|
|
1079
|
+
Py_DECREF(p);
|
|
1080
|
+
|
|
1081
|
+
return returnValue;
|
|
1082
|
+
}
|
|
1083
|
+
virtual void completed(const std::string& userName_, const std::string& password_, const std::string& reason_)
|
|
1084
|
+
{
|
|
1085
|
+
LOCKGIL;
|
|
1086
|
+
PyObject* p = PyObject_CallMethod((PyObject*)_self, (char*)"completed", (char*)"(sss)", userName_.c_str(), password_.c_str(), reason_.c_str());
|
|
1087
|
+
if (p == NULL && PyErr_ExceptionMatches(PyExc_SystemExit))
|
|
1088
|
+
{
|
|
1089
|
+
ampspy::unhandled_exception();
|
|
1090
|
+
}
|
|
1091
|
+
exc::throwError();
|
|
1092
|
+
Py_XDECREF(p);
|
|
1093
|
+
}
|
|
1094
|
+
};
|
|
1095
|
+
|
|
1096
|
+
class server_chooser_wrapper : public AMPS::ServerChooserImpl
|
|
1097
|
+
{
|
|
1098
|
+
PyObject* _self;
|
|
1099
|
+
PyAuthenticator _authBridge;
|
|
1100
|
+
public:
|
|
1101
|
+
server_chooser_wrapper(PyObject* self_);
|
|
1102
|
+
~server_chooser_wrapper();
|
|
1103
|
+
virtual std::string getCurrentURI();
|
|
1104
|
+
virtual AMPS::Authenticator& getCurrentAuthenticator();
|
|
1105
|
+
virtual void reportFailure(const AMPS::AMPSException& exception_,
|
|
1106
|
+
const AMPS::ConnectionInfo& info_);
|
|
1107
|
+
virtual std::string getError();
|
|
1108
|
+
virtual void reportSuccess(const AMPS::ConnectionInfo& info_);
|
|
1109
|
+
virtual void add(const std::string& uri_);
|
|
1110
|
+
virtual void remove(const std::string& uri_);
|
|
1111
|
+
private:
|
|
1112
|
+
static void setPyExceptionState(const AMPS::AMPSException&);
|
|
1113
|
+
};
|
|
1114
|
+
|
|
1115
|
+
class PyFailedWriteHandler : public AMPS::FailedWriteHandler
|
|
1116
|
+
{
|
|
1117
|
+
PyObject* _self;
|
|
1118
|
+
bool _newStyle;
|
|
1119
|
+
ampspy::message::obj* _message;
|
|
1120
|
+
PyFailedWriteHandler(const PyFailedWriteHandler&); // not implemented
|
|
1121
|
+
void operator=(const PyFailedWriteHandler&); // not implemented
|
|
1122
|
+
public:
|
|
1123
|
+
PyFailedWriteHandler(PyObject* self_);
|
|
1124
|
+
~PyFailedWriteHandler();
|
|
1125
|
+
virtual void failedWrite(const AMPS::Message& message_,
|
|
1126
|
+
const char* reason_, size_t reasonLength_);
|
|
1127
|
+
};
|
|
1128
|
+
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
// Used to add dummy __copy__ and __deepcopy__ methods to a type, so as
|
|
1132
|
+
// to make it not copyable.
|
|
1133
|
+
AMPSDLL PyObject* not_copyable(PyObject* self, PyObject* args);
|
|
1134
|
+
#define NOT_COPYABLE \
|
|
1135
|
+
{ "__copy__", (PyCFunction)&::not_copyable, METH_VARARGS, "not supported."}, \
|
|
1136
|
+
{ "__deepcopy__", (PyCFunction)&::not_copyable, METH_VARARGS, "not supported."}
|
|
1137
|
+
|
|
1138
|
+
#endif // __AMPSPY_TYPES_HPP
|
|
1139
|
+
|