amps-python-client 5.3.4.1__zip → 5.3.4.2__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.
Files changed (917) hide show
  1. amps-python-client-5.3.4.2/PKG-INFO +112 -0
  2. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
  3. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
  4. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
  5. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
  6. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
  7. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
  8. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
  9. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
  10. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
  11. amps-python-client-5.3.4.2/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
  12. amps-python-client-5.3.4.2/docs/command-reference/doctrees/environment.pickle +0 -0
  13. amps-python-client-5.3.4.2/docs/command-reference/doctrees/index.doctree +0 -0
  14. amps-python-client-5.3.4.2/docs/command-reference/html/.buildinfo +4 -0
  15. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +8 -0
  16. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +8 -0
  17. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/intro.rst.txt +8 -0
  18. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/logon.rst.txt +8 -0
  19. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +8 -0
  20. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/publishing.rst.txt +8 -0
  21. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +8 -0
  22. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +8 -0
  23. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/removing.rst.txt +8 -0
  24. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/chapters/utilities.rst.txt +8 -0
  25. amps-python-client-5.3.4.2/docs/command-reference/html/_sources/index.rst.txt +36 -0
  26. amps-python-client-5.3.4.2/docs/command-reference/html/_static/custom.css +161 -0
  27. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/ack-messages.html +95 -0
  28. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/content-messages.html +95 -0
  29. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/intro.html +95 -0
  30. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/logon.html +95 -0
  31. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/protocol-reference.html +93 -0
  32. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/publishing.html +95 -0
  33. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/query-delimiters.html +95 -0
  34. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/query-subscribe.html +95 -0
  35. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/removing.html +95 -0
  36. amps-python-client-5.3.4.2/docs/command-reference/html/chapters/utilities.html +95 -0
  37. amps-python-client-5.3.4.2/docs/command-reference/html/genindex.html +97 -0
  38. amps-python-client-5.3.4.2/docs/command-reference/html/index.html +98 -0
  39. amps-python-client-5.3.4.2/docs/command-reference/html/objects.inv +6 -0
  40. amps-python-client-5.3.4.2/docs/command-reference/html/search.html +107 -0
  41. amps-python-client-5.3.4.2/docs/command-reference/html/searchindex.js +1 -0
  42. amps-python-client-5.3.4.2/docs/html/.buildinfo +4 -0
  43. amps-python-client-5.3.4.2/docs/html/code.html +6616 -0
  44. amps-python-client-5.3.4.2/docs/html/genindex.html +1363 -0
  45. amps-python-client-5.3.4.2/docs/html/index.html +131 -0
  46. amps-python-client-5.3.4.2/docs/html/objects.inv +0 -0
  47. amps-python-client-5.3.4.2/docs/html/py-modindex.html +111 -0
  48. amps-python-client-5.3.4.2/docs/html/search.html +107 -0
  49. amps-python-client-5.3.4.2/docs/html/searchindex.js +1 -0
  50. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
  51. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
  52. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
  53. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
  54. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/deltas.doctree +0 -0
  55. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/error-handling.doctree +0 -0
  56. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/exceptions.doctree +0 -0
  57. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/first-program.doctree +0 -0
  58. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/high-availability.doctree +0 -0
  59. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/installing.doctree +0 -0
  60. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/introduction.doctree +0 -0
  61. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
  62. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
  63. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/queues.doctree +0 -0
  64. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/sow.doctree +0 -0
  65. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
  66. amps-python-client-5.3.4.2/docs/python/doctrees/chapters/utilities.doctree +0 -0
  67. amps-python-client-5.3.4.2/docs/python/doctrees/environment.pickle +0 -0
  68. amps-python-client-5.3.4.2/docs/python/doctrees/index.doctree +0 -0
  69. amps-python-client-5.3.4.2/docs/python/html/.buildinfo +4 -0
  70. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/advanced-topics.rst.txt +398 -0
  71. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +26 -0
  72. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/creating-commands.rst.txt +159 -0
  73. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/deltas.rst.txt +79 -0
  74. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/error-handling.rst.txt +481 -0
  75. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/exceptions.rst.txt +123 -0
  76. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/first-program.rst.txt +168 -0
  77. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/high-availability.rst.txt +879 -0
  78. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/installing.rst.txt +184 -0
  79. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/introduction.rst.txt +50 -0
  80. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +32 -0
  81. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/performance-tips.rst.txt +432 -0
  82. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/queues.rst.txt +282 -0
  83. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/sow.rst.txt +294 -0
  84. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/subscriptions.rst.txt +374 -0
  85. amps-python-client-5.3.4.2/docs/python/html/_sources/chapters/utilities.rst.txt +214 -0
  86. amps-python-client-5.3.4.2/docs/python/html/_static/custom.css +161 -0
  87. amps-python-client-5.3.4.2/docs/python/html/chapters/advanced-topics.html +447 -0
  88. amps-python-client-5.3.4.2/docs/python/html/chapters/cpp-compiler-list.html +92 -0
  89. amps-python-client-5.3.4.2/docs/python/html/chapters/cpp-feature-table.html +156 -0
  90. amps-python-client-5.3.4.2/docs/python/html/chapters/creating-commands.html +2882 -0
  91. amps-python-client-5.3.4.2/docs/python/html/chapters/deltas.html +169 -0
  92. amps-python-client-5.3.4.2/docs/python/html/chapters/error-handling.html +745 -0
  93. amps-python-client-5.3.4.2/docs/python/html/chapters/exceptions.html +266 -0
  94. amps-python-client-5.3.4.2/docs/python/html/chapters/first-program.html +526 -0
  95. amps-python-client-5.3.4.2/docs/python/html/chapters/high-availability.html +1017 -0
  96. amps-python-client-5.3.4.2/docs/python/html/chapters/installing.html +264 -0
  97. amps-python-client-5.3.4.2/docs/python/html/chapters/introduction.html +245 -0
  98. amps-python-client-5.3.4.2/docs/python/html/chapters/moving-from-python-lite.html +118 -0
  99. amps-python-client-5.3.4.2/docs/python/html/chapters/performance-tips.html +499 -0
  100. amps-python-client-5.3.4.2/docs/python/html/chapters/queues.html +352 -0
  101. amps-python-client-5.3.4.2/docs/python/html/chapters/sow.html +383 -0
  102. amps-python-client-5.3.4.2/docs/python/html/chapters/subscriptions.html +535 -0
  103. amps-python-client-5.3.4.2/docs/python/html/chapters/utilities.html +302 -0
  104. amps-python-client-5.3.4.2/docs/python/html/genindex.html +351 -0
  105. amps-python-client-5.3.4.2/docs/python/html/index.html +382 -0
  106. amps-python-client-5.3.4.2/docs/python/html/objects.inv +0 -0
  107. amps-python-client-5.3.4.2/docs/python/html/search.html +107 -0
  108. amps-python-client-5.3.4.2/docs/python/html/searchindex.js +1 -0
  109. amps-python-client-5.3.4.2/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
  110. amps-python-client-5.3.4.2/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
  111. amps-python-client-5.3.4.2/docs/python-quickstart/doctrees/environment.pickle +0 -0
  112. amps-python-client-5.3.4.2/docs/python-quickstart/doctrees/index.doctree +0 -0
  113. amps-python-client-5.3.4.2/docs/python-quickstart/html/.buildinfo +4 -0
  114. amps-python-client-5.3.4.2/docs/python-quickstart/html/_static/custom.css +161 -0
  115. amps-python-client-5.3.4.2/docs/python-quickstart/html/chapters/crankitup.html +271 -0
  116. amps-python-client-5.3.4.2/docs/python-quickstart/html/chapters/equipment.html +105 -0
  117. amps-python-client-5.3.4.2/docs/python-quickstart/html/genindex.html +97 -0
  118. amps-python-client-5.3.4.2/docs/python-quickstart/html/index.html +381 -0
  119. amps-python-client-5.3.4.2/docs/python-quickstart/html/objects.inv +0 -0
  120. amps-python-client-5.3.4.2/docs/python-quickstart/html/search.html +107 -0
  121. amps-python-client-5.3.4.2/docs/python-quickstart/html/searchindex.js +1 -0
  122. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
  123. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
  124. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
  125. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
  126. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
  127. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
  128. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
  129. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
  130. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
  131. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
  132. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
  133. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
  134. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
  135. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/events.doctree +0 -0
  136. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
  137. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
  138. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
  139. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
  140. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
  141. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
  142. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
  143. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
  144. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
  145. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
  146. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
  147. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
  148. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
  149. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
  150. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
  151. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
  152. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
  153. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
  154. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
  155. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
  156. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
  157. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
  158. amps-python-client-5.3.4.2/docs/user-guide/doctrees/chapters/views.doctree +0 -0
  159. amps-python-client-5.3.4.2/docs/user-guide/doctrees/environment.pickle +0 -0
  160. amps-python-client-5.3.4.2/docs/user-guide/doctrees/index.doctree +0 -0
  161. amps-python-client-5.3.4.2/docs/user-guide/html/.buildinfo +4 -0
  162. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/acks.rst.txt +8 -0
  163. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/actions.rst.txt +8 -0
  164. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +8 -0
  165. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +8 -0
  166. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +8 -0
  167. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +8 -0
  168. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +8 -0
  169. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +8 -0
  170. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +8 -0
  171. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/daemon.rst.txt +8 -0
  172. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/delta.rst.txt +8 -0
  173. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/distribution.rst.txt +8 -0
  174. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +8 -0
  175. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/events.rst.txt +8 -0
  176. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +8 -0
  177. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/glossary.rst.txt +8 -0
  178. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/ha.rst.txt +8 -0
  179. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +8 -0
  180. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/intro.rst.txt +8 -0
  181. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/logging.rst.txt +8 -0
  182. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +8 -0
  183. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +8 -0
  184. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/oof.rst.txt +8 -0
  185. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/operation.rst.txt +8 -0
  186. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +8 -0
  187. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/queues.rst.txt +8 -0
  188. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/replication.rst.txt +8 -0
  189. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/securing.rst.txt +8 -0
  190. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/sow.rst.txt +8 -0
  191. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +8 -0
  192. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/transports.rst.txt +8 -0
  193. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +8 -0
  194. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/txlog.rst.txt +8 -0
  195. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/usecases.rst.txt +8 -0
  196. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/utilities.rst.txt +8 -0
  197. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/chapters/views.rst.txt +8 -0
  198. amps-python-client-5.3.4.2/docs/user-guide/html/_sources/index.rst.txt +62 -0
  199. amps-python-client-5.3.4.2/docs/user-guide/html/_static/custom.css +161 -0
  200. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/acks.html +94 -0
  201. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/actions.html +94 -0
  202. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/amps-statistics.html +94 -0
  203. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/amps_expressions.html +94 -0
  204. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/amps_functions.html +94 -0
  205. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/auxiliary_modules.html +94 -0
  206. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/config-file-shortcuts.html +94 -0
  207. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/conflated_topics.html +94 -0
  208. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/constructing-fields.html +94 -0
  209. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/daemon.html +94 -0
  210. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/delta.html +94 -0
  211. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/distribution.html +94 -0
  212. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/enrichment.html +94 -0
  213. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/events.html +94 -0
  214. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/file_format_versions.html +94 -0
  215. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/glossary.html +92 -0
  216. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/ha.html +94 -0
  217. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/installing_and_starting.html +94 -0
  218. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/intro.html +94 -0
  219. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/logging.html +94 -0
  220. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/messageTypes.html +94 -0
  221. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/monitoring.html +94 -0
  222. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/oof.html +94 -0
  223. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/operation.html +94 -0
  224. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/pub_sub.html +94 -0
  225. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/queues.html +94 -0
  226. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/replication.html +94 -0
  227. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/securing.html +94 -0
  228. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/sow.html +94 -0
  229. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/sow_queries.html +94 -0
  230. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/spark.html +819 -0
  231. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/transports.html +94 -0
  232. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/troubleshooting.html +94 -0
  233. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/txlog.html +94 -0
  234. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/usecases.html +94 -0
  235. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/utilities.html +94 -0
  236. amps-python-client-5.3.4.2/docs/user-guide/html/chapters/views.html +94 -0
  237. amps-python-client-5.3.4.2/docs/user-guide/html/genindex.html +133 -0
  238. amps-python-client-5.3.4.2/docs/user-guide/html/index.html +96 -0
  239. amps-python-client-5.3.4.2/docs/user-guide/html/objects.inv +0 -0
  240. amps-python-client-5.3.4.2/docs/user-guide/html/search.html +106 -0
  241. amps-python-client-5.3.4.2/docs/user-guide/html/searchindex.js +1 -0
  242. amps-python-client-5.3.4.2/include/ampspy_bookmarkstore.hpp +63 -0
  243. amps-python-client-5.3.4.2/include/ampspy_compat.h +63 -0
  244. amps-python-client-5.3.4.2/include/ampspy_defs.hpp +181 -0
  245. amps-python-client-5.3.4.2/include/ampspy_recoverypointadapter.hpp +52 -0
  246. amps-python-client-5.3.4.2/include/ampspy_shims.hpp +113 -0
  247. amps-python-client-5.3.4.2/include/ampspy_type_object.hpp +242 -0
  248. amps-python-client-5.3.4.2/include/ampspy_types.hpp +1139 -0
  249. amps-python-client-5.3.4.2/include/ampspyver.h +30 -0
  250. amps-python-client-5.3.4.2/index.html +66 -0
  251. amps-python-client-5.3.4.2/samples/AMPSConsolePublisher.py +59 -0
  252. amps-python-client-5.3.4.2/samples/AMPSConsoleSubscriber.py +63 -0
  253. amps-python-client-5.3.4.2/samples/AMPSFIXBuilderPublisher.py +71 -0
  254. amps-python-client-5.3.4.2/samples/AMPSFIXShredderSubscriber.py +69 -0
  255. amps-python-client-5.3.4.2/samples/AMPSNVFIXBuilderPublisher.py +71 -0
  256. amps-python-client-5.3.4.2/samples/AMPSNVFIXShredderSubscriber.py +67 -0
  257. amps-python-client-5.3.4.2/samples/AMPSPublishForReplay.py +81 -0
  258. amps-python-client-5.3.4.2/samples/AMPSQueueConsumer.py +69 -0
  259. amps-python-client-5.3.4.2/samples/AMPSQueuePublisher.py +59 -0
  260. amps-python-client-5.3.4.2/samples/AMPSSOWConsolePublisher.py +67 -0
  261. amps-python-client-5.3.4.2/samples/AMPSSOWConsoleSubscriber.py +77 -0
  262. amps-python-client-5.3.4.2/samples/AMPSSOWandSubscribeConsoleSubscriber.py +79 -0
  263. amps-python-client-5.3.4.2/samples/AMPSSOWandSubscribeWithOOF.py +108 -0
  264. amps-python-client-5.3.4.2/samples/AMPSSubscribeForReplay.py +128 -0
  265. amps-python-client-5.3.4.2/samples/AMPSUpdateForOOF.py +123 -0
  266. amps-python-client-5.3.4.2/samples/CompositeMessagePublisher.py +84 -0
  267. amps-python-client-5.3.4.2/samples/CompositeMessageSubscriber.py +87 -0
  268. amps-python-client-5.3.4.2/samples/RandomServerChooser.py +66 -0
  269. amps-python-client-5.3.4.2/samples/sample.xml +335 -0
  270. amps-python-client-5.3.4.2/setup.py +210 -0
  271. amps-python-client-5.3.4.2/setup_amps.py +94 -0
  272. amps-python-client-5.3.4.2/src/ampspy_shims.cpp +214 -0
  273. amps-python-client-5.3.4.2/src/ampspy_type_object.cpp +495 -0
  274. amps-python-client-5.3.4.2/src/authenticator.cpp +128 -0
  275. amps-python-client-5.3.4.2/src/bookmarkstore.cpp +246 -0
  276. amps-python-client-5.3.4.2/src/client.cpp +2648 -0
  277. amps-python-client-5.3.4.2/src/client_docs.h +956 -0
  278. amps-python-client-5.3.4.2/src/cmessagehandler.cpp +161 -0
  279. amps-python-client-5.3.4.2/src/command.cpp +164 -0
  280. amps-python-client-5.3.4.2/src/command_docs.h +269 -0
  281. amps-python-client-5.3.4.2/src/compositemessagebuilder.cpp +113 -0
  282. amps-python-client-5.3.4.2/src/compositemessageparser.cpp +151 -0
  283. amps-python-client-5.3.4.2/src/conflatingrecoverypointadapter.cpp +197 -0
  284. amps-python-client-5.3.4.2/src/cpp/include/amps/BlockPublishStore.hpp +2053 -0
  285. amps-python-client-5.3.4.2/src/cpp/include/amps/BlockStore.hpp +677 -0
  286. amps-python-client-5.3.4.2/src/cpp/include/amps/BookmarkStore.hpp +542 -0
  287. amps-python-client-5.3.4.2/src/cpp/include/amps/Buffer.hpp +214 -0
  288. amps-python-client-5.3.4.2/src/cpp/include/amps/CompositeMessageBuilder.hpp +174 -0
  289. amps-python-client-5.3.4.2/src/cpp/include/amps/CompositeMessageParser.hpp +151 -0
  290. amps-python-client-5.3.4.2/src/cpp/include/amps/DefaultServerChooser.hpp +162 -0
  291. amps-python-client-5.3.4.2/src/cpp/include/amps/Field.hpp +719 -0
  292. amps-python-client-5.3.4.2/src/cpp/include/amps/HAClient.hpp +370 -0
  293. amps-python-client-5.3.4.2/src/cpp/include/amps/HAClientImpl.hpp +460 -0
  294. amps-python-client-5.3.4.2/src/cpp/include/amps/HybridPublishStore.hpp +481 -0
  295. amps-python-client-5.3.4.2/src/cpp/include/amps/LoggedBookmarkStore.hpp +1256 -0
  296. amps-python-client-5.3.4.2/src/cpp/include/amps/MMapBookmarkStore.hpp +1283 -0
  297. amps-python-client-5.3.4.2/src/cpp/include/amps/MMapStoreBuffer.hpp +290 -0
  298. amps-python-client-5.3.4.2/src/cpp/include/amps/MemoryBookmarkStore.hpp +1628 -0
  299. amps-python-client-5.3.4.2/src/cpp/include/amps/MemoryPublishStore.hpp +66 -0
  300. amps-python-client-5.3.4.2/src/cpp/include/amps/MemoryStoreBuffer.hpp +244 -0
  301. amps-python-client-5.3.4.2/src/cpp/include/amps/MemorySubscriptionManager.hpp +850 -0
  302. amps-python-client-5.3.4.2/src/cpp/include/amps/Message.hpp +1819 -0
  303. amps-python-client-5.3.4.2/src/cpp/include/amps/MessageRouter.hpp +647 -0
  304. amps-python-client-5.3.4.2/src/cpp/include/amps/PublishStore.hpp +158 -0
  305. amps-python-client-5.3.4.2/src/cpp/include/amps/ReconnectDelayStrategy.hpp +106 -0
  306. amps-python-client-5.3.4.2/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +317 -0
  307. amps-python-client-5.3.4.2/src/cpp/include/amps/RecoveryPoint.hpp +323 -0
  308. amps-python-client-5.3.4.2/src/cpp/include/amps/RecoveryPointAdapter.hpp +501 -0
  309. amps-python-client-5.3.4.2/src/cpp/include/amps/RingBookmarkStore.hpp +669 -0
  310. amps-python-client-5.3.4.2/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +494 -0
  311. amps-python-client-5.3.4.2/src/cpp/include/amps/ServerChooser.hpp +145 -0
  312. amps-python-client-5.3.4.2/src/cpp/include/amps/ServerChooserImpl.hpp +95 -0
  313. amps-python-client-5.3.4.2/src/cpp/include/amps/amps.h +803 -0
  314. amps-python-client-5.3.4.2/src/cpp/include/amps/amps_impl.h +208 -0
  315. amps-python-client-5.3.4.2/src/cpp/include/amps/amps_ssl.h +78 -0
  316. amps-python-client-5.3.4.2/src/cpp/include/amps/ampscrc.hpp +210 -0
  317. amps-python-client-5.3.4.2/src/cpp/include/amps/ampsplusplus.hpp +8850 -0
  318. amps-python-client-5.3.4.2/src/cpp/include/amps/ampsuri.h +84 -0
  319. amps-python-client-5.3.4.2/src/cpp/include/amps/ampsver.h +41 -0
  320. amps-python-client-5.3.4.2/src/cpp/include/amps/ampsver.h.in +41 -0
  321. amps-python-client-5.3.4.2/src/cpp/include/amps/constants.hpp +194 -0
  322. amps-python-client-5.3.4.2/src/cpp/include/amps/util.hpp +1722 -0
  323. amps-python-client-5.3.4.2/src/cpp/src/amps_protocol.c +693 -0
  324. amps-python-client-5.3.4.2/src/cpp/src/amps_ssl.c +489 -0
  325. amps-python-client-5.3.4.2/src/cpp/src/atfork.c +451 -0
  326. amps-python-client-5.3.4.2/src/cpp/src/client.c +498 -0
  327. amps-python-client-5.3.4.2/src/cpp/src/message.c +837 -0
  328. amps-python-client-5.3.4.2/src/cpp/src/message_generated.h +611 -0
  329. amps-python-client-5.3.4.2/src/cpp/src/tcp.c +1517 -0
  330. amps-python-client-5.3.4.2/src/cpp/src/tcps.c +1885 -0
  331. amps-python-client-5.3.4.2/src/cpp/src/transports.c +129 -0
  332. amps-python-client-5.3.4.2/src/cpp/src/unix.c +1002 -0
  333. amps-python-client-5.3.4.2/src/cpp/src/uri.c +301 -0
  334. amps-python-client-5.3.4.2/src/exponentialdelaystrategy.cpp +137 -0
  335. amps-python-client-5.3.4.2/src/failedwritehandler.cpp +116 -0
  336. amps-python-client-5.3.4.2/src/fixbuilder.cpp +146 -0
  337. amps-python-client-5.3.4.2/src/fixeddelaystrategy.cpp +114 -0
  338. amps-python-client-5.3.4.2/src/fixshredder.cpp +105 -0
  339. amps-python-client-5.3.4.2/src/fixshredder_docs.h +38 -0
  340. amps-python-client-5.3.4.2/src/haclient.cpp +691 -0
  341. amps-python-client-5.3.4.2/src/haclient_docs.h +186 -0
  342. amps-python-client-5.3.4.2/src/hybridpublishstore.cpp +137 -0
  343. amps-python-client-5.3.4.2/src/hybridpublishstore_docs.h +31 -0
  344. amps-python-client-5.3.4.2/src/memorybookmarkstore.cpp +373 -0
  345. amps-python-client-5.3.4.2/src/memorybookmarkstore_docs.h +39 -0
  346. amps-python-client-5.3.4.2/src/memorypublishstore.cpp +160 -0
  347. amps-python-client-5.3.4.2/src/memorypublishstore_docs.h +32 -0
  348. amps-python-client-5.3.4.2/src/message.cpp +765 -0
  349. amps-python-client-5.3.4.2/src/message_docs.h +306 -0
  350. amps-python-client-5.3.4.2/src/messagestream.cpp +630 -0
  351. amps-python-client-5.3.4.2/src/messagestream_docs.h +45 -0
  352. amps-python-client-5.3.4.2/src/mmapbookmarkstore.cpp +422 -0
  353. amps-python-client-5.3.4.2/src/nvfixbuilder.cpp +160 -0
  354. amps-python-client-5.3.4.2/src/nvfixbuilder_docs.h +35 -0
  355. amps-python-client-5.3.4.2/src/nvfixshredder.cpp +99 -0
  356. amps-python-client-5.3.4.2/src/nvfixshredder_docs.h +43 -0
  357. amps-python-client-5.3.4.2/src/publishstore.cpp +183 -0
  358. amps-python-client-5.3.4.2/src/raw_wrapper.cpp +765 -0
  359. amps-python-client-5.3.4.2/src/reason.cpp +71 -0
  360. amps-python-client-5.3.4.2/src/recoverypoint.cpp +135 -0
  361. amps-python-client-5.3.4.2/src/recoverypointadapter.cpp +171 -0
  362. amps-python-client-5.3.4.2/src/ringbookmarkstore.cpp +360 -0
  363. amps-python-client-5.3.4.2/src/serverchooser.cpp +245 -0
  364. amps-python-client-5.3.4.2/src/serverchooser_docs.h +41 -0
  365. amps-python-client-5.3.4.2/src/sowrecoverypointadapter.cpp +248 -0
  366. amps-python-client-5.3.4.2/src/store.cpp +62 -0
  367. amps-python-client-5.3.4.2/src/versioninfo.cpp +175 -0
  368. amps-python-client-5.3.4.1/PKG-INFO +0 -112
  369. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
  370. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
  371. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
  372. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
  373. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
  374. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
  375. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
  376. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
  377. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
  378. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
  379. amps-python-client-5.3.4.1/docs/command-reference/doctrees/environment.pickle +0 -0
  380. amps-python-client-5.3.4.1/docs/command-reference/doctrees/index.doctree +0 -0
  381. amps-python-client-5.3.4.1/docs/command-reference/html/.buildinfo +0 -4
  382. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +0 -32
  383. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +0 -27
  384. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/intro.rst.txt +0 -43
  385. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/logon.rst.txt +0 -231
  386. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +0 -1474
  387. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/publishing.rst.txt +0 -25
  388. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +0 -12
  389. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +0 -23
  390. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/removing.rst.txt +0 -6
  391. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/utilities.rst.txt +0 -13
  392. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/index.rst.txt +0 -56
  393. amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css +0 -192
  394. amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css.backup +0 -161
  395. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/ack-messages.html +0 -417
  396. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/content-messages.html +0 -417
  397. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/intro.html +0 -126
  398. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/logon.html +0 -295
  399. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/protocol-reference.html +0 -1190
  400. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/publishing.html +0 -436
  401. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-delimiters.html +0 -173
  402. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-subscribe.html +0 -2123
  403. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/removing.html +0 -299
  404. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/utilities.html +0 -287
  405. amps-python-client-5.3.4.1/docs/command-reference/html/genindex.html +0 -97
  406. amps-python-client-5.3.4.1/docs/command-reference/html/index.html +0 -138
  407. amps-python-client-5.3.4.1/docs/command-reference/html/objects.inv +0 -0
  408. amps-python-client-5.3.4.1/docs/command-reference/html/search.html +0 -107
  409. amps-python-client-5.3.4.1/docs/command-reference/html/searchindex.js +0 -1
  410. amps-python-client-5.3.4.1/docs/html/.buildinfo +0 -4
  411. amps-python-client-5.3.4.1/docs/html/code.html +0 -6503
  412. amps-python-client-5.3.4.1/docs/html/genindex.html +0 -1361
  413. amps-python-client-5.3.4.1/docs/html/index.html +0 -131
  414. amps-python-client-5.3.4.1/docs/html/objects.inv +0 -0
  415. amps-python-client-5.3.4.1/docs/html/py-modindex.html +0 -111
  416. amps-python-client-5.3.4.1/docs/html/search.html +0 -107
  417. amps-python-client-5.3.4.1/docs/html/searchindex.js +0 -1
  418. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
  419. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
  420. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
  421. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
  422. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/deltas.doctree +0 -0
  423. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/error-handling.doctree +0 -0
  424. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/exceptions.doctree +0 -0
  425. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/first-program.doctree +0 -0
  426. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/high-availability.doctree +0 -0
  427. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/installing.doctree +0 -0
  428. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/introduction.doctree +0 -0
  429. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
  430. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
  431. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/queues.doctree +0 -0
  432. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/sow.doctree +0 -0
  433. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
  434. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/utilities.doctree +0 -0
  435. amps-python-client-5.3.4.1/docs/python/doctrees/environment.pickle +0 -0
  436. amps-python-client-5.3.4.1/docs/python/doctrees/index.doctree +0 -0
  437. amps-python-client-5.3.4.1/docs/python/html/.buildinfo +0 -4
  438. amps-python-client-5.3.4.1/docs/python/html/_images/caution.svg +0 -25
  439. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/advanced-topics.rst.txt +0 -398
  440. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +0 -26
  441. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/creating-commands.rst.txt +0 -159
  442. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/deltas.rst.txt +0 -79
  443. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/error-handling.rst.txt +0 -482
  444. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/exceptions.rst.txt +0 -128
  445. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/first-program.rst.txt +0 -142
  446. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/high-availability.rst.txt +0 -876
  447. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/installing.rst.txt +0 -184
  448. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/introduction.rst.txt +0 -50
  449. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +0 -32
  450. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/performance-tips.rst.txt +0 -434
  451. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/queues.rst.txt +0 -282
  452. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/sow.rst.txt +0 -292
  453. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/subscriptions.rst.txt +0 -374
  454. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/utilities.rst.txt +0 -214
  455. amps-python-client-5.3.4.1/docs/python/html/_static/custom.css +0 -192
  456. amps-python-client-5.3.4.1/docs/python/html/_static/custom.css.backup +0 -161
  457. amps-python-client-5.3.4.1/docs/python/html/chapters/advanced-topics.html +0 -447
  458. amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-compiler-list.html +0 -92
  459. amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-feature-table.html +0 -156
  460. amps-python-client-5.3.4.1/docs/python/html/chapters/creating-commands.html +0 -2837
  461. amps-python-client-5.3.4.1/docs/python/html/chapters/deltas.html +0 -169
  462. amps-python-client-5.3.4.1/docs/python/html/chapters/error-handling.html +0 -746
  463. amps-python-client-5.3.4.1/docs/python/html/chapters/exceptions.html +0 -272
  464. amps-python-client-5.3.4.1/docs/python/html/chapters/first-program.html +0 -499
  465. amps-python-client-5.3.4.1/docs/python/html/chapters/high-availability.html +0 -1014
  466. amps-python-client-5.3.4.1/docs/python/html/chapters/installing.html +0 -264
  467. amps-python-client-5.3.4.1/docs/python/html/chapters/introduction.html +0 -245
  468. amps-python-client-5.3.4.1/docs/python/html/chapters/moving-from-python-lite.html +0 -118
  469. amps-python-client-5.3.4.1/docs/python/html/chapters/performance-tips.html +0 -499
  470. amps-python-client-5.3.4.1/docs/python/html/chapters/queues.html +0 -352
  471. amps-python-client-5.3.4.1/docs/python/html/chapters/sow.html +0 -381
  472. amps-python-client-5.3.4.1/docs/python/html/chapters/subscriptions.html +0 -535
  473. amps-python-client-5.3.4.1/docs/python/html/chapters/utilities.html +0 -302
  474. amps-python-client-5.3.4.1/docs/python/html/genindex.html +0 -351
  475. amps-python-client-5.3.4.1/docs/python/html/index.html +0 -380
  476. amps-python-client-5.3.4.1/docs/python/html/objects.inv +0 -0
  477. amps-python-client-5.3.4.1/docs/python/html/search.html +0 -107
  478. amps-python-client-5.3.4.1/docs/python/html/searchindex.js +0 -1
  479. amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
  480. amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
  481. amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/environment.pickle +0 -0
  482. amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/index.doctree +0 -0
  483. amps-python-client-5.3.4.1/docs/python-quickstart/html/.buildinfo +0 -4
  484. amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css +0 -192
  485. amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css.backup +0 -161
  486. amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/crankitup.html +0 -271
  487. amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/equipment.html +0 -105
  488. amps-python-client-5.3.4.1/docs/python-quickstart/html/genindex.html +0 -97
  489. amps-python-client-5.3.4.1/docs/python-quickstart/html/index.html +0 -382
  490. amps-python-client-5.3.4.1/docs/python-quickstart/html/objects.inv +0 -0
  491. amps-python-client-5.3.4.1/docs/python-quickstart/html/search.html +0 -107
  492. amps-python-client-5.3.4.1/docs/python-quickstart/html/searchindex.js +0 -1
  493. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
  494. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
  495. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
  496. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
  497. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
  498. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
  499. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
  500. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
  501. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
  502. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
  503. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
  504. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
  505. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
  506. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/events.doctree +0 -0
  507. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
  508. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
  509. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
  510. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
  511. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
  512. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
  513. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
  514. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
  515. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
  516. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
  517. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
  518. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
  519. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
  520. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
  521. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
  522. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
  523. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
  524. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
  525. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
  526. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
  527. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
  528. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
  529. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/views.doctree +0 -0
  530. amps-python-client-5.3.4.1/docs/user-guide/doctrees/environment.pickle +0 -0
  531. amps-python-client-5.3.4.1/docs/user-guide/doctrees/index.doctree +0 -0
  532. amps-python-client-5.3.4.1/docs/user-guide/html/.buildinfo +0 -4
  533. amps-python-client-5.3.4.1/docs/user-guide/html/_images/AMPS-Queues-Intro.svg +0 -1330
  534. amps-python-client-5.3.4.1/docs/user-guide/html/_images/GeoRepl.png +0 -0
  535. amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_async_ack.png +0 -0
  536. amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_sync_ack.png +0 -0
  537. amps-python-client-5.3.4.1/docs/user-guide/html/_images/Hot-Hot-Replication.png +0 -0
  538. amps-python-client-5.3.4.1/docs/user-guide/html/_images/MessageOrdering.svg +0 -235
  539. amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF5.png +0 -0
  540. amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF6.png +0 -0
  541. amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF7.png +0 -0
  542. amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF8.png +0 -0
  543. amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub1.svg +0 -1
  544. amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub2.svg +0 -1
  545. amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWAndSubscribeAndReplace.svg +0 -684
  546. amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery1.svg +0 -402
  547. amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery2.svg +0 -505
  548. amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig1.svg +0 -1
  549. amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig2.svg +0 -1
  550. amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig3.svg +0 -1
  551. amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig4.svg +0 -1
  552. amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.png +0 -0
  553. amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.svg +0 -25
  554. amps-python-client-5.3.4.1/docs/user-guide/html/_images/chicago_group.png +0 -0
  555. amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_original_messages.png +0 -0
  556. amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_update_message.png +0 -0
  557. amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.png +0 -0
  558. amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.svg +0 -25
  559. amps-python-client-5.3.4.1/docs/user-guide/html/_images/inline_view_conflation.svg +0 -1
  560. amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_pub.png +0 -0
  561. amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_sub.png +0 -0
  562. amps-python-client-5.3.4.1/docs/user-guide/html/_images/queue_usage_overview.svg +0 -627
  563. amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_hub.png +0 -0
  564. amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_scenario_with_ha.png +0 -0
  565. amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_1.svg +0 -248
  566. amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_2.svg +0 -183
  567. amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_update_sequence.svg +0 -1
  568. amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.png +0 -0
  569. amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.svg +0 -31
  570. amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.png +0 -0
  571. amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.svg +0 -23
  572. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/acks.rst.txt +0 -232
  573. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/actions.rst.txt +0 -111
  574. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +0 -358
  575. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +0 -83
  576. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +0 -11
  577. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +0 -86
  578. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +0 -9
  579. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +0 -111
  580. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +0 -269
  581. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/daemon.rst.txt +0 -232
  582. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/delta.rst.txt +0 -556
  583. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/distribution.rst.txt +0 -186
  584. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +0 -191
  585. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/events.rst.txt +0 -39
  586. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +0 -203
  587. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/glossary.rst.txt +0 -101
  588. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/ha.rst.txt +0 -465
  589. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +0 -23
  590. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/intro.rst.txt +0 -116
  591. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/logging.rst.txt +0 -34
  592. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +0 -1398
  593. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +0 -326
  594. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/oof.rst.txt +0 -312
  595. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/operation.rst.txt +0 -27
  596. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +0 -49
  597. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/queues.rst.txt +0 -1351
  598. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/replication.rst.txt +0 -1228
  599. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/securing.rst.txt +0 -657
  600. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow.rst.txt +0 -57
  601. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +0 -25
  602. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/transports.rst.txt +0 -291
  603. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +0 -517
  604. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/txlog.rst.txt +0 -62
  605. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/usecases.rst.txt +0 -21
  606. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/utilities.rst.txt +0 -62
  607. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/views.rst.txt +0 -175
  608. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/index.rst.txt +0 -110
  609. amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css +0 -192
  610. amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css.backup +0 -161
  611. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/acks.html +0 -289
  612. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/actions.html +0 -3782
  613. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps-statistics.html +0 -439
  614. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_expressions.html +0 -1552
  615. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_functions.html +0 -1626
  616. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/auxiliary_modules.html +0 -2548
  617. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/config-file-shortcuts.html +0 -508
  618. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/conflated_topics.html +0 -328
  619. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/constructing-fields.html +0 -447
  620. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/daemon.html +0 -295
  621. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/delta.html +0 -609
  622. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/distribution.html +0 -246
  623. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/enrichment.html +0 -264
  624. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/events.html +0 -449
  625. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/file_format_versions.html +0 -229
  626. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/glossary.html +0 -215
  627. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/ha.html +0 -978
  628. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/installing_and_starting.html +0 -357
  629. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/intro.html +0 -572
  630. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/logging.html +0 -972
  631. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/messageTypes.html +0 -1280
  632. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/monitoring.html +0 -718
  633. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/oof.html +0 -341
  634. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/operation.html +0 -1515
  635. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/pub_sub.html +0 -934
  636. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/queues.html +0 -1767
  637. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/replication.html +0 -1777
  638. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/securing.html +0 -697
  639. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow.html +0 -1038
  640. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow_queries.html +0 -621
  641. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/spark.html +0 -819
  642. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/transports.html +0 -352
  643. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/troubleshooting.html +0 -530
  644. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/txlog.html +0 -1013
  645. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/usecases.html +0 -288
  646. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/utilities.html +0 -133
  647. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/views.html +0 -1120
  648. amps-python-client-5.3.4.1/docs/user-guide/html/genindex.html +0 -1261
  649. amps-python-client-5.3.4.1/docs/user-guide/html/index.html +0 -163
  650. amps-python-client-5.3.4.1/docs/user-guide/html/objects.inv +0 -0
  651. amps-python-client-5.3.4.1/docs/user-guide/html/search.html +0 -106
  652. amps-python-client-5.3.4.1/docs/user-guide/html/searchindex.js +0 -1
  653. amps-python-client-5.3.4.1/include/ampspy_bookmarkstore.hpp +0 -63
  654. amps-python-client-5.3.4.1/include/ampspy_compat.h +0 -63
  655. amps-python-client-5.3.4.1/include/ampspy_defs.hpp +0 -181
  656. amps-python-client-5.3.4.1/include/ampspy_recoverypointadapter.hpp +0 -52
  657. amps-python-client-5.3.4.1/include/ampspy_shims.hpp +0 -113
  658. amps-python-client-5.3.4.1/include/ampspy_type_object.hpp +0 -242
  659. amps-python-client-5.3.4.1/include/ampspy_types.hpp +0 -1139
  660. amps-python-client-5.3.4.1/include/ampspyver.h +0 -30
  661. amps-python-client-5.3.4.1/index.html +0 -66
  662. amps-python-client-5.3.4.1/samples/AMPSConsolePublisher.py +0 -59
  663. amps-python-client-5.3.4.1/samples/AMPSConsoleSubscriber.py +0 -63
  664. amps-python-client-5.3.4.1/samples/AMPSFIXBuilderPublisher.py +0 -71
  665. amps-python-client-5.3.4.1/samples/AMPSFIXShredderSubscriber.py +0 -69
  666. amps-python-client-5.3.4.1/samples/AMPSNVFIXBuilderPublisher.py +0 -71
  667. amps-python-client-5.3.4.1/samples/AMPSNVFIXShredderSubscriber.py +0 -67
  668. amps-python-client-5.3.4.1/samples/AMPSPublishForReplay.py +0 -81
  669. amps-python-client-5.3.4.1/samples/AMPSQueueConsumer.py +0 -69
  670. amps-python-client-5.3.4.1/samples/AMPSQueuePublisher.py +0 -59
  671. amps-python-client-5.3.4.1/samples/AMPSSOWConsolePublisher.py +0 -67
  672. amps-python-client-5.3.4.1/samples/AMPSSOWConsoleSubscriber.py +0 -77
  673. amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeConsoleSubscriber.py +0 -79
  674. amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeWithOOF.py +0 -108
  675. amps-python-client-5.3.4.1/samples/AMPSSubscribeForReplay.py +0 -128
  676. amps-python-client-5.3.4.1/samples/AMPSUpdateForOOF.py +0 -123
  677. amps-python-client-5.3.4.1/samples/CompositeMessagePublisher.py +0 -84
  678. amps-python-client-5.3.4.1/samples/CompositeMessageSubscriber.py +0 -87
  679. amps-python-client-5.3.4.1/samples/RandomServerChooser.py +0 -41
  680. amps-python-client-5.3.4.1/samples/sample.xml +0 -335
  681. amps-python-client-5.3.4.1/setup.py +0 -209
  682. amps-python-client-5.3.4.1/setup_amps.py +0 -94
  683. amps-python-client-5.3.4.1/src/ampspy_shims.cpp +0 -203
  684. amps-python-client-5.3.4.1/src/ampspy_type_object.cpp +0 -484
  685. amps-python-client-5.3.4.1/src/authenticator.cpp +0 -128
  686. amps-python-client-5.3.4.1/src/bookmarkstore.cpp +0 -238
  687. amps-python-client-5.3.4.1/src/client.cpp +0 -2430
  688. amps-python-client-5.3.4.1/src/client_docs.h +0 -956
  689. amps-python-client-5.3.4.1/src/cmessagehandler.cpp +0 -151
  690. amps-python-client-5.3.4.1/src/command.cpp +0 -164
  691. amps-python-client-5.3.4.1/src/command_docs.h +0 -194
  692. amps-python-client-5.3.4.1/src/compositemessagebuilder.cpp +0 -111
  693. amps-python-client-5.3.4.1/src/compositemessageparser.cpp +0 -146
  694. amps-python-client-5.3.4.1/src/conflatingrecoverypointadapter.cpp +0 -194
  695. amps-python-client-5.3.4.1/src/cpp/include/amps/BlockPublishStore.hpp +0 -2053
  696. amps-python-client-5.3.4.1/src/cpp/include/amps/BlockStore.hpp +0 -677
  697. amps-python-client-5.3.4.1/src/cpp/include/amps/BookmarkStore.hpp +0 -542
  698. amps-python-client-5.3.4.1/src/cpp/include/amps/Buffer.hpp +0 -214
  699. amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageBuilder.hpp +0 -174
  700. amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageParser.hpp +0 -151
  701. amps-python-client-5.3.4.1/src/cpp/include/amps/DefaultServerChooser.hpp +0 -162
  702. amps-python-client-5.3.4.1/src/cpp/include/amps/Field.hpp +0 -719
  703. amps-python-client-5.3.4.1/src/cpp/include/amps/HAClient.hpp +0 -370
  704. amps-python-client-5.3.4.1/src/cpp/include/amps/HAClientImpl.hpp +0 -460
  705. amps-python-client-5.3.4.1/src/cpp/include/amps/HybridPublishStore.hpp +0 -481
  706. amps-python-client-5.3.4.1/src/cpp/include/amps/LoggedBookmarkStore.hpp +0 -1255
  707. amps-python-client-5.3.4.1/src/cpp/include/amps/MMapBookmarkStore.hpp +0 -1283
  708. amps-python-client-5.3.4.1/src/cpp/include/amps/MMapStoreBuffer.hpp +0 -290
  709. amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryBookmarkStore.hpp +0 -1622
  710. amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryPublishStore.hpp +0 -66
  711. amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryStoreBuffer.hpp +0 -244
  712. amps-python-client-5.3.4.1/src/cpp/include/amps/MemorySubscriptionManager.hpp +0 -850
  713. amps-python-client-5.3.4.1/src/cpp/include/amps/Message.hpp +0 -1819
  714. amps-python-client-5.3.4.1/src/cpp/include/amps/MessageRouter.hpp +0 -618
  715. amps-python-client-5.3.4.1/src/cpp/include/amps/PublishStore.hpp +0 -158
  716. amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategy.hpp +0 -106
  717. amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +0 -317
  718. amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPoint.hpp +0 -323
  719. amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPointAdapter.hpp +0 -501
  720. amps-python-client-5.3.4.1/src/cpp/include/amps/RingBookmarkStore.hpp +0 -669
  721. amps-python-client-5.3.4.1/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +0 -490
  722. amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooser.hpp +0 -145
  723. amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooserImpl.hpp +0 -95
  724. amps-python-client-5.3.4.1/src/cpp/include/amps/amps.h +0 -775
  725. amps-python-client-5.3.4.1/src/cpp/include/amps/amps_impl.h +0 -204
  726. amps-python-client-5.3.4.1/src/cpp/include/amps/amps_ssl.h +0 -78
  727. amps-python-client-5.3.4.1/src/cpp/include/amps/ampscrc.hpp +0 -210
  728. amps-python-client-5.3.4.1/src/cpp/include/amps/ampsplusplus.hpp +0 -8817
  729. amps-python-client-5.3.4.1/src/cpp/include/amps/ampsuri.h +0 -84
  730. amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h +0 -41
  731. amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h.in +0 -41
  732. amps-python-client-5.3.4.1/src/cpp/include/amps/constants.hpp +0 -194
  733. amps-python-client-5.3.4.1/src/cpp/include/amps/util.hpp +0 -1692
  734. amps-python-client-5.3.4.1/src/cpp/src/amps_protocol.c +0 -688
  735. amps-python-client-5.3.4.1/src/cpp/src/amps_ssl.c +0 -489
  736. amps-python-client-5.3.4.1/src/cpp/src/atfork.c +0 -446
  737. amps-python-client-5.3.4.1/src/cpp/src/client.c +0 -483
  738. amps-python-client-5.3.4.1/src/cpp/src/message.c +0 -837
  739. amps-python-client-5.3.4.1/src/cpp/src/message_generated.h +0 -611
  740. amps-python-client-5.3.4.1/src/cpp/src/tcp.c +0 -1489
  741. amps-python-client-5.3.4.1/src/cpp/src/tcps.c +0 -1894
  742. amps-python-client-5.3.4.1/src/cpp/src/transports.c +0 -123
  743. amps-python-client-5.3.4.1/src/cpp/src/unix.c +0 -984
  744. amps-python-client-5.3.4.1/src/cpp/src/uri.c +0 -301
  745. amps-python-client-5.3.4.1/src/exponentialdelaystrategy.cpp +0 -137
  746. amps-python-client-5.3.4.1/src/failedwritehandler.cpp +0 -116
  747. amps-python-client-5.3.4.1/src/fixbuilder.cpp +0 -146
  748. amps-python-client-5.3.4.1/src/fixeddelaystrategy.cpp +0 -114
  749. amps-python-client-5.3.4.1/src/fixshredder.cpp +0 -105
  750. amps-python-client-5.3.4.1/src/fixshredder_docs.h +0 -38
  751. amps-python-client-5.3.4.1/src/haclient.cpp +0 -691
  752. amps-python-client-5.3.4.1/src/haclient_docs.h +0 -132
  753. amps-python-client-5.3.4.1/src/hybridpublishstore.cpp +0 -137
  754. amps-python-client-5.3.4.1/src/hybridpublishstore_docs.h +0 -31
  755. amps-python-client-5.3.4.1/src/memorybookmarkstore.cpp +0 -373
  756. amps-python-client-5.3.4.1/src/memorybookmarkstore_docs.h +0 -39
  757. amps-python-client-5.3.4.1/src/memorypublishstore.cpp +0 -160
  758. amps-python-client-5.3.4.1/src/memorypublishstore_docs.h +0 -32
  759. amps-python-client-5.3.4.1/src/message.cpp +0 -765
  760. amps-python-client-5.3.4.1/src/message_docs.h +0 -306
  761. amps-python-client-5.3.4.1/src/messagestream.cpp +0 -623
  762. amps-python-client-5.3.4.1/src/messagestream_docs.h +0 -45
  763. amps-python-client-5.3.4.1/src/mmapbookmarkstore.cpp +0 -422
  764. amps-python-client-5.3.4.1/src/nvfixbuilder.cpp +0 -160
  765. amps-python-client-5.3.4.1/src/nvfixbuilder_docs.h +0 -33
  766. amps-python-client-5.3.4.1/src/nvfixshredder.cpp +0 -99
  767. amps-python-client-5.3.4.1/src/nvfixshredder_docs.h +0 -39
  768. amps-python-client-5.3.4.1/src/publishstore.cpp +0 -183
  769. amps-python-client-5.3.4.1/src/raw_wrapper.cpp +0 -756
  770. amps-python-client-5.3.4.1/src/reason.cpp +0 -71
  771. amps-python-client-5.3.4.1/src/recoverypoint.cpp +0 -135
  772. amps-python-client-5.3.4.1/src/recoverypointadapter.cpp +0 -171
  773. amps-python-client-5.3.4.1/src/ringbookmarkstore.cpp +0 -360
  774. amps-python-client-5.3.4.1/src/serverchooser.cpp +0 -245
  775. amps-python-client-5.3.4.1/src/serverchooser_docs.h +0 -39
  776. amps-python-client-5.3.4.1/src/sowrecoverypointadapter.cpp +0 -248
  777. amps-python-client-5.3.4.1/src/store.cpp +0 -62
  778. amps-python-client-5.3.4.1/src/versioninfo.cpp +0 -175
  779. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/HISTORY +0 -0
  780. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/LICENSE +0 -0
  781. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/README.md +0 -0
  782. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/ajax-loader.gif +0 -0
  783. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/alabaster.css +0 -0
  784. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/basic.css +0 -0
  785. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/comment-bright.png +0 -0
  786. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/comment-close.png +0 -0
  787. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/comment.png +0 -0
  788. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/doctools.js +0 -0
  789. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/down-pressed.png +0 -0
  790. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/down.png +0 -0
  791. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/file.png +0 -0
  792. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/flag_logo.png +0 -0
  793. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/flag_logo.svg +0 -0
  794. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/jquery-3.1.0.js +0 -0
  795. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/jquery.js +0 -0
  796. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/minus.png +0 -0
  797. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/plus.png +0 -0
  798. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/pygments.css +0 -0
  799. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/searchtools.js +0 -0
  800. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/underscore-1.3.1.js +0 -0
  801. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/underscore.js +0 -0
  802. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/up-pressed.png +0 -0
  803. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/up.png +0 -0
  804. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/command-reference/html/_static/websupport.js +0 -0
  805. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_sources/code.rst.txt +0 -0
  806. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_sources/index.rst.txt +0 -0
  807. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/ajax-loader.gif +0 -0
  808. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/basic.css +0 -0
  809. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/classic.css +0 -0
  810. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/comment-bright.png +0 -0
  811. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/comment-close.png +0 -0
  812. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/comment.png +0 -0
  813. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/default.css +0 -0
  814. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/doctools.js +0 -0
  815. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/down-pressed.png +0 -0
  816. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/down.png +0 -0
  817. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/file.png +0 -0
  818. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/jquery-3.1.0.js +0 -0
  819. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/jquery.js +0 -0
  820. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/minus.png +0 -0
  821. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/plus.png +0 -0
  822. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/pygments.css +0 -0
  823. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/searchtools.js +0 -0
  824. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/sidebar.js +0 -0
  825. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/underscore-1.3.1.js +0 -0
  826. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/underscore.js +0 -0
  827. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/up-pressed.png +0 -0
  828. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/up.png +0 -0
  829. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/html/_static/websupport.js +0 -0
  830. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_images/caution.png +0 -0
  831. {amps-python-client-5.3.4.1/docs/command-reference → amps-python-client-5.3.4.2/docs/python}/html/_images/caution.svg +0 -0
  832. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_images/connection_string.svg +0 -0
  833. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_images/important.png +0 -0
  834. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_images/important.svg +0 -0
  835. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_images/tip.png +0 -0
  836. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_images/tip.svg +0 -0
  837. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_images/warning.png +0 -0
  838. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +0 -0
  839. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_sources/index.rst.txt +0 -0
  840. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/ajax-loader.gif +0 -0
  841. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/alabaster.css +0 -0
  842. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/basic.css +0 -0
  843. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/comment-bright.png +0 -0
  844. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/comment-close.png +0 -0
  845. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/comment.png +0 -0
  846. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/doctools.js +0 -0
  847. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/down-pressed.png +0 -0
  848. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/down.png +0 -0
  849. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/file.png +0 -0
  850. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/flag_logo.png +0 -0
  851. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/flag_logo.svg +0 -0
  852. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/jquery-3.1.0.js +0 -0
  853. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/jquery.js +0 -0
  854. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/minus.png +0 -0
  855. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/plus.png +0 -0
  856. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/pygments.css +0 -0
  857. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/searchtools.js +0 -0
  858. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/underscore-1.3.1.js +0 -0
  859. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/underscore.js +0 -0
  860. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/up-pressed.png +0 -0
  861. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/up.png +0 -0
  862. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python/html/_static/websupport.js +0 -0
  863. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +0 -0
  864. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +0 -0
  865. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_sources/index.rst.txt +0 -0
  866. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
  867. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/alabaster.css +0 -0
  868. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/basic.css +0 -0
  869. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/comment-bright.png +0 -0
  870. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/comment-close.png +0 -0
  871. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/comment.png +0 -0
  872. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/doctools.js +0 -0
  873. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/down-pressed.png +0 -0
  874. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/down.png +0 -0
  875. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/file.png +0 -0
  876. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/flag_logo.png +0 -0
  877. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/flag_logo.svg +0 -0
  878. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/jquery-3.1.0.js +0 -0
  879. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/jquery.js +0 -0
  880. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/minus.png +0 -0
  881. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/plus.png +0 -0
  882. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/pygments.css +0 -0
  883. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/searchtools.js +0 -0
  884. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/underscore-1.3.1.js +0 -0
  885. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/underscore.js +0 -0
  886. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/up-pressed.png +0 -0
  887. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/up.png +0 -0
  888. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/python-quickstart/html/_static/websupport.js +0 -0
  889. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/resources/custom.css +0 -0
  890. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/resources/flag_logo.svg +0 -0
  891. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_sources/chapters/spark.rst.txt +0 -0
  892. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/ajax-loader.gif +0 -0
  893. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/alabaster.css +0 -0
  894. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/basic.css +0 -0
  895. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/comment-bright.png +0 -0
  896. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/comment-close.png +0 -0
  897. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/comment.png +0 -0
  898. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/doctools.js +0 -0
  899. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/down-pressed.png +0 -0
  900. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/down.png +0 -0
  901. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/file.png +0 -0
  902. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/flag_logo.png +0 -0
  903. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/flag_logo.svg +0 -0
  904. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/jquery-3.1.0.js +0 -0
  905. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/jquery.js +0 -0
  906. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/minus.png +0 -0
  907. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/plus.png +0 -0
  908. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/pygments.css +0 -0
  909. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/searchtools.js +0 -0
  910. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/underscore-1.3.1.js +0 -0
  911. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/underscore.js +0 -0
  912. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/up-pressed.png +0 -0
  913. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/up.png +0 -0
  914. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/docs/user-guide/html/_static/websupport.js +0 -0
  915. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/src/cpp/include/amps/amps_generated.h +0 -0
  916. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/src/cpp/src/amps_protocol_generated.h +0 -0
  917. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.2}/src/cpp/src/makefile +0 -0
@@ -1,2430 +0,0 @@
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
-
26
- #define PY_SSIZE_T_CLEAN 1
27
- #include <Python.h>
28
- #include <amps/ampsplusplus.hpp>
29
- #include <amps/util.hpp>
30
- #include <ampspy_types.hpp>
31
- #include <ampspy_defs.hpp>
32
- #include <algorithm>
33
- #include <set>
34
- #include <sstream>
35
- #include "client_docs.h"
36
- #include <stddef.h>
37
- #include <ampspy_bookmarkstore.hpp>
38
- #include <ampspy_type_object.hpp>
39
-
40
- using namespace AMPS;
41
- namespace ampspy
42
- {
43
-
44
- namespace client
45
- {
46
-
47
- AMPSDLL ampspy::ampspy_type_object client_type;
48
-
49
- namespace connection_state_listener
50
- {
51
- const long ORIGINAL_VERSION = 5020100;
52
- const long VERSION_522 = 5020200;
53
- const long EXTENDED_STATES = 5020200;
54
-
55
- ampspy::ampspy_type_object connection_state_listener_type;
56
-
57
- void add_types(void)
58
- {
59
- connection_state_listener_type.setName("AMPS.ConnectionStateListener")
60
- .setDoc("\nAMPS ConnectionStateListener type used to determine the new connection state.\n")
61
- .createType()
62
- .addStatic("STATE_DISCONNECTED", PyInt_FromLong((long)AMPS::ConnectionStateListener::Disconnected))
63
- .addStatic("STATE_SHUTDOWN", PyInt_FromLong((long)AMPS::ConnectionStateListener::Shutdown))
64
- .addStatic("STATE_CONNECTED", PyInt_FromLong((long)AMPS::ConnectionStateListener::Connected))
65
- .addStatic("STATE_LOGGED_ON", PyInt_FromLong((long)AMPS::ConnectionStateListener::LoggedOn))
66
- .addStatic("STATE_PUBLISH_REPLAYED", PyInt_FromLong((long)AMPS::ConnectionStateListener::PublishReplayed))
67
- .addStatic("STATE_HEARTBEAT_INITIATED", PyInt_FromLong((long)AMPS::ConnectionStateListener::HeartbeatInitiated))
68
- .addStatic("STATE_RESUBSCRIBED", PyInt_FromLong((long)AMPS::ConnectionStateListener::Resubscribed))
69
- .addStatic("STATE_UNKNOWN", PyInt_FromLong((long)AMPS::ConnectionStateListener::UNKNOWN))
70
- .addStatic("ORIGINAL_VERSION", PyInt_FromLong(ORIGINAL_VERSION))
71
- .addStatic("VERSION_522", PyInt_FromLong(VERSION_522))
72
- .addStatic("EXTENDED_STATES", PyInt_FromLong(EXTENDED_STATES));
73
- }
74
-
75
- } //namespace connection_state_listener
76
-
77
- class SimpleMutex
78
- {
79
- // Not implemented.
80
- SimpleMutex& operator=(const SimpleMutex& rhs);
81
- SimpleMutex(const SimpleMutex& rhs);
82
- #ifdef _WIN32
83
- CRITICAL_SECTION _lock;
84
- public:
85
- SimpleMutex()
86
- {
87
- InitializeCriticalSection(&_lock);
88
- }
89
- ~SimpleMutex()
90
- {
91
- DeleteCriticalSection(&_lock);
92
- }
93
- void acquireRead()
94
- {
95
- EnterCriticalSection(&_lock);
96
- }
97
- void releaseRead()
98
- {
99
- LeaveCriticalSection(&_lock);
100
- }
101
- #else
102
- pthread_mutex_t _lock;
103
- pthread_cond_t _condition;
104
- public:
105
- SimpleMutex()
106
- {
107
- pthread_mutexattr_t attr;
108
- pthread_mutexattr_init(&attr);
109
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
110
- pthread_mutex_init(&_lock, &attr);
111
- pthread_mutexattr_destroy(&attr);
112
- }
113
- ~SimpleMutex()
114
- {
115
- pthread_mutex_destroy(&_lock);
116
- }
117
- void acquireRead()
118
- {
119
- pthread_mutex_lock(&_lock);
120
- }
121
- void releaseRead()
122
- {
123
- pthread_mutex_unlock(&_lock);
124
- }
125
- #endif
126
- };
127
- static SimpleMutex _createdHandlersLock;
128
- static std::set<void*> _createdHandlers;
129
-
130
- AMPSDLL void amps_python_client_atfork_prepare(void)
131
- {
132
- _createdHandlersLock.acquireRead();
133
- }
134
- AMPSDLL void amps_python_client_atfork_parent(void)
135
- {
136
- _createdHandlersLock.releaseRead();
137
- }
138
- AMPSDLL void amps_python_client_atfork_child(void)
139
- {
140
- // Memset the old and reinitialize a new one on top of it.
141
- // It is not safe to release the child lock here; you'll likely get EPERM.
142
- _createdHandlersLock.~SimpleMutex();
143
- new (&_createdHandlersLock) SimpleMutex();
144
- }
145
-
146
- class TransportFilter : public AMPS::ConnectionStateListener
147
- {
148
- public:
149
- TransportFilter(PyObject* handler_)
150
- : _handler(handler_),
151
- _remain(0)
152
- {
153
- Py_INCREF(_handler);
154
- }
155
- ~TransportFilter()
156
- {
157
- Py_XDECREF(_handler);
158
- _handler = NULL;
159
- }
160
-
161
- PyObject* getHandler(void) const
162
- {
163
- return _handler;
164
- }
165
-
166
- void connectionStateChanged(AMPS::ConnectionStateListener::State newState_);
167
- static void filter(const unsigned char* data_, size_t len_, short direction_, void* vpThis_);
168
- #if PY_MAJOR_VERSION >= 3 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 7)
169
- // This will use a MemoryView instead of a string so the bytes can be modified
170
- static void filterModifiable(const unsigned char* data_, size_t len_, short direction_, void* vpThis_);
171
- #endif
172
-
173
- private:
174
- PyObject* _handler;
175
- size_t _remain;
176
- };
177
-
178
- struct AMPSDLL callback_info
179
- {
180
- callback_info(obj* client_, PyObject* handler_)
181
- : _client(client_),
182
- _handler(handler_)
183
- {
184
- assert(client_->pClient);
185
- Py_INCREF(_handler);
186
- }
187
- ~callback_info()
188
- {
189
- Py_CLEAR(_handler);
190
- }
191
-
192
- void release(void)
193
- {
194
- _client = NULL;
195
- Py_CLEAR(_handler);
196
- _handler = NULL;
197
- }
198
-
199
- PyObject* getHandler(void) const
200
- {
201
- return _handler;
202
- }
203
-
204
- obj* getClient(void) const
205
- {
206
- return _client;
207
- }
208
-
209
- static void add(void* vpInfo_);
210
- static void destroy(void* vpInfo_);
211
-
212
- private:
213
- obj* _client;
214
- PyObject* _handler;
215
- callback_info(const callback_info&);
216
- void operator=(const callback_info&);
217
- };
218
-
219
- void callback_info::destroy(void* vpInfo_)
220
- {
221
- callback_info* pInfo = (callback_info*)vpInfo_;
222
- if (!pInfo->getClient())
223
- {
224
- LOCKGIL;
225
- delete pInfo;
226
- return;
227
- }
228
- callback_infos* pInfos = pInfo->getClient()->callbackInfos;
229
- // If pInfos is null, this will be deleted in the client destroy function.
230
- if (pInfos && pInfo->getHandler())
231
- {
232
- callback_infos::iterator i = std::find(pInfos->begin(), pInfos->end(), pInfo);
233
- if (i != pInfos->end())
234
- {
235
- pInfos->erase(i);
236
- }
237
- LOCKGIL;
238
- delete pInfo;
239
- }
240
- }
241
-
242
- void callback_info::add(void* vpInfo_)
243
- {
244
- callback_info* pInfo = (callback_info*)vpInfo_;
245
- // If Client is null we're done
246
- if (pInfo->getClient())
247
- {
248
- callback_infos* pInfos = pInfo->getClient()->callbackInfos; // -V826
249
- // If pInfos is not null, add it
250
- if (pInfos)
251
- {
252
- pInfos->push_back(pInfo);
253
- }
254
- }
255
- }
256
-
257
- void _initializeInternals(obj* self)
258
- {
259
- self->disconnectHandler = NULL;
260
- self->callbackInfos = new callback_infos();
261
- self->weakreflist = NULL;
262
- self->connectionStateListeners = new connection_state_listeners();
263
-
264
- self->message = (ampspy::message::obj*)_PyObject_New(ampspy::message::message_type);
265
- self->message->isOwned = false;
266
- assert(self->message);
267
- self->message_args = Py_BuildValue("(O)", self->message);
268
- assert(self->message_args);
269
-
270
- self->transportFilter = NULL;
271
- self->threadCreatedCallback = NULL;
272
- }
273
-
274
- // def __init__(self, name):
275
- int _ctor(obj* self, PyObject* args, PyObject* kwds)
276
- {
277
- const char* clientName;
278
- if (!PyArg_ParseTuple(args, "s", &clientName))
279
- {
280
- return -1; // must have a client name
281
- }
282
- self->pClient = new Client(clientName);
283
- _initializeInternals(self);
284
- return 0;
285
- }
286
-
287
- static std::shared_ptr<AMPS::ExceptionListener> g_UnsetExceptionListener = std::make_shared<AMPS::ExceptionListener>();
288
-
289
- static void _clear(obj* self)
290
- {
291
- // IMPORTANT
292
- // We aren't supplying our own tp_alloc or tp_free, so Python is already
293
- // calling PyObject_GC_Track and PyObject_GC_UnTrack for us. However,
294
- // it is very important to untrack ourselves before we unlock the GIL
295
- // below. If we unlock the GIL prior to untracking, it results in self --
296
- // with zero references -- being potentially processed by python gc,
297
- // resulting in a double delete and memory corruption inside the gc.
298
- // By removing it here, we assure GC that we don't need it to track
299
- // us any more. See the big comment in python's Modules/gcmodule.c:
300
- // update_refs() for more information.
301
- PyObject_GC_UnTrack(self);
302
-
303
- AMPS::Client* pClient = (AMPS::Client*)AMPSPY_IEX_GET(&self->pClient, (AMPS::Client*)0);
304
- callback_infos* pCallbackInfos = (callback_infos*)AMPSPY_IEX_GET(&self->callbackInfos, (callback_infos*)0); // -V826
305
- connection_state_listeners* listeners = (connection_state_listeners*)AMPSPY_IEX_GET(&self->connectionStateListeners, (connection_state_listeners*)0);
306
- // We don't want to invoke the exception handler again, but we can't reset
307
- // in case the receive thread is already in its exceptionThrown method. The
308
- // GIL isn't locked until inside the PyExceptionListener.
309
- if (self->exceptionHandler)
310
- {
311
- ((PyExceptionListener*)(self->exceptionHandler.get()))->set(NULL);
312
- }
313
- // Unset any Python objects listening for client events, then delete the
314
- // client. The Python objects should all still exist at this point in case
315
- // the reader thread was already at the point of invoking one.
316
- if (pClient)
317
- {
318
- UnlockGIL __unlock__;
319
- ((AMPS::Client*)pClient)->setExceptionListener(g_UnsetExceptionListener);
320
- ((AMPS::Client*)pClient)->setTransportFilterFunction(NULL, 0);
321
- ((AMPS::Client*)pClient)->clearConnectionStateListeners();
322
- delete pClient;
323
- }
324
- // Clear Python connection state listeners
325
- if (listeners)
326
- {
327
- for (connection_state_listeners::iterator i = listeners->begin(); i != listeners->end(); ++i)
328
- {
329
- delete i->second;
330
- i->second = 0;
331
- }
332
- delete listeners;
333
- }
334
- // Clear Python message callbacks from created wrappers
335
- if (pCallbackInfos)
336
- {
337
- AMPS::Lock<SimpleMutex> l(_createdHandlersLock);
338
- for (callback_infos::iterator i = pCallbackInfos->begin(); i != pCallbackInfos->end(); ++i)
339
- {
340
- _createdHandlers.erase(*i);
341
- }
342
- }
343
- // Release Python transport filter
344
- delete self->transportFilter;
345
- // Release Python exception handler
346
- if (self->exceptionHandler)
347
- {
348
- self->exceptionHandler.reset();
349
- }
350
- // Release Python disconnect handler
351
- Py_CLEAR(self->disconnectHandler);
352
- // Release Python message callbacks
353
- if (pCallbackInfos)
354
- {
355
- for (callback_infos::iterator i = pCallbackInfos->begin(); i != pCallbackInfos->end(); ++i)
356
- {
357
- callback_info* pCallbackInfo = *i;
358
- delete pCallbackInfo;
359
- }
360
- delete pCallbackInfos;
361
- }
362
- }
363
-
364
- AMPSDLL void destructor(PyObject* self_)
365
- {
366
- obj* self = (obj*)self_;
367
- if (self->weakreflist)
368
- {
369
- PyObject_ClearWeakRefs((PyObject*) self);
370
- }
371
- _clear(self);
372
- shims::free(self_);
373
- }
374
-
375
- static bool messageHandlerSupplied(PyObject* args, PyObject* kwargs)
376
- {
377
- return (kwargs != NULL && PyDict_GetItemString(kwargs, "on_message") != NULL)
378
- || (PyTuple_Size(args) > 0 &&
379
- ( PyCallable_Check(PyTuple_GET_ITEM(args, 0))
380
- || cmessagehandler::isCHandler(PyTuple_GET_ITEM(args, 0))));
381
- }
382
-
383
- static ampspy::messagestream::obj* createMessageStream(obj* pythonClient_, AMPS::Client* pClient_, bool isSow_, bool isStats_, bool sendCompleted_ = true)
384
- {
385
- ampspy::messagestream::obj* messagestream = (ampspy::messagestream::obj*)PyObject_CallObject(ampspy::messagestream::messagestream_type, NULL);
386
- messagestream->internalInit((PyObject*)pythonClient_, pClient_, isSow_, isStats_, sendCompleted_);
387
- return messagestream;
388
- }
389
- static ampspy::messagestream::obj* createNoopMessageStream(void)
390
- {
391
- ampspy::messagestream::obj* messagestream = (ampspy::messagestream::obj*)PyObject_CallObject(ampspy::messagestream::messagestream_type, NULL);
392
- return messagestream;
393
- }
394
-
395
- class ConnectionStateListenerWrapperV521 : public AMPS::ConnectionStateListener
396
- {
397
- PyObject* _listener;
398
- public:
399
- ConnectionStateListenerWrapperV521(PyObject* listener_)
400
- : _listener(listener_)
401
- {
402
- Py_INCREF(listener_);
403
- }
404
- ~ConnectionStateListenerWrapperV521()
405
- {
406
- try
407
- {
408
- LOCKGIL;
409
- Py_CLEAR(_listener);
410
- }
411
- catch (...) { }
412
- }
413
- void connectionStateChanged(State newState_)
414
- {
415
- LOCKGIL;
416
- PyObject_CallObject(_listener, Py_BuildValue("(O)", (newState_ == AMPS::ConnectionStateListener::Disconnected || newState_ == AMPS::ConnectionStateListener::Shutdown) ? Py_False : Py_True));
417
- }
418
- };
419
-
420
- class ConnectionStateListenerWrapper : public AMPS::ConnectionStateListener
421
- {
422
- PyObject* _listener;
423
- public:
424
- ConnectionStateListenerWrapper(PyObject* listener_)
425
- : _listener(listener_)
426
- {
427
- Py_INCREF(listener_);
428
- }
429
- ~ConnectionStateListenerWrapper()
430
- {
431
- LOCKGIL;
432
- Py_CLEAR(_listener);
433
- }
434
- void connectionStateChanged(State newState_)
435
- {
436
- LOCKGIL;
437
- PyObject_CallObject(_listener, Py_BuildValue("(O)", PyInt_FromLong((long)newState_)));
438
- }
439
- };
440
-
441
-
442
- static PyObject* add_connection_state_listener(obj* self, PyObject* args)
443
- {
444
- PyObject* callable;
445
- int version = connection_state_listener::ORIGINAL_VERSION;
446
- if (!PyArg_ParseTuple(args, "O|I", &callable, &version))
447
- {
448
- return NULL;
449
- }
450
- if (!PyCallable_Check(callable))
451
- {
452
- PyErr_SetString(PyExc_TypeError, "argument 1 must be a callable");
453
- return NULL;
454
- }
455
- ConnectionStateListener* wrap = NULL;
456
- if (version >= connection_state_listener::VERSION_522)
457
- {
458
- wrap = new ConnectionStateListenerWrapper(callable);
459
- }
460
- else
461
- {
462
- wrap = new ConnectionStateListenerWrapperV521(callable);
463
- }
464
- (*((connection_state_listeners*)self->connectionStateListeners))[callable] = wrap;
465
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->addConnectionStateListener(wrap));
466
- }
467
-
468
- static PyObject* remove_connection_state_listener(obj* self, PyObject* args)
469
- {
470
- PyObject* callable;
471
- if (!PyArg_ParseTuple(args, "O", &callable))
472
- {
473
- return NULL;
474
- }
475
- if (!PyCallable_Check(callable))
476
- {
477
- PyErr_SetString(PyExc_TypeError, "argument 1 must be a callable");
478
- return NULL;
479
- }
480
- connection_state_listeners::iterator it = ((connection_state_listeners*)self->connectionStateListeners)->find(callable);
481
- if (it != ((connection_state_listeners*)self->connectionStateListeners)->end())
482
- {
483
- {
484
- UnlockGIL __unlock__;
485
- ((AMPS::Client*)(self->pClient))->removeConnectionStateListener(it->second); // so the client doesn't call it again
486
- }
487
- delete it->second; // will remove the reference to the underlying python object.
488
- ((connection_state_listeners*)self->connectionStateListeners)->erase(it);
489
- }
490
- NONE;
491
- }
492
-
493
-
494
- // def connect(self, uri):
495
- static PyObject* connect(obj* self, PyObject* args)
496
- {
497
- const char* uri;
498
- if (!PyArg_ParseTuple(args, "s", &uri))
499
- {
500
- return NULL;
501
- }
502
- if (strlen(uri) > 3 && uri[0] == 't' && uri[1] == 'c' && uri[2] == 'p'
503
- && uri[3] == 's')
504
- {
505
- PyObject* initResult = ssl_init_internal(NULL);
506
- if (initResult == NULL)
507
- {
508
- return NULL;
509
- }
510
- else
511
- {
512
- Py_DECREF(initResult);
513
- }
514
- }
515
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->connect(uri));
516
- }
517
-
518
- // def logon(self, timeout=0, authenticator=DefaultAuthenticator(), options=""):
519
- static PyObject* logon(obj* self, PyObject* args, PyObject* kw)
520
- {
521
- static const char* kwargs[] = { "timeout", "authenticator", "options", NULL };
522
- int timeout = 0;
523
- PyObject* auth = NULL;
524
- const char* options = NULL;
525
- if (!PyArg_ParseTupleAndKeywords(args, kw, "|IOs", (char**)kwargs, &timeout, &auth, &options))
526
- {
527
- return NULL;
528
- }
529
- PyAuthenticator bridge(auth);
530
- if (auth)
531
- {
532
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->logon(timeout, bridge, options));
533
- }
534
- else
535
- {
536
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->logon(options, timeout));
537
- }
538
-
539
- }
540
-
541
- static PyObject* setName(obj* self, PyObject* args)
542
- {
543
- const char* name;
544
- if (!PyArg_ParseTuple(args, "s", &name))
545
- {
546
- return NULL;
547
- }
548
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setName(name));
549
- }
550
-
551
- // def name(self):
552
- // def get_name(self):
553
- // def getName(self):
554
- static PyObject* getName(obj* self, PyObject* args)
555
- {
556
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->getName());
557
- }
558
-
559
- // def get_name_hash(self):
560
- static PyObject* get_name_hash(obj* self, PyObject* args)
561
- {
562
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->getNameHash());
563
- }
564
-
565
- // def get_name_hash_value(self):
566
- static PyObject* get_name_hash_value(obj* self, PyObject* args)
567
- {
568
- CALL_RETURN_UINT64_T(((AMPS::Client*)(self->pClient))->getNameHashValue());
569
- }
570
-
571
- // def get_logon_correlation_data(self):
572
- static PyObject* get_logon_correlation_data(obj* self, PyObject* args)
573
- {
574
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->getLogonCorrelationData());
575
- }
576
-
577
- // def set_logon_correlation_data(self, data):
578
- static PyObject* set_logon_correlation_data(obj* self, PyObject* args)
579
- {
580
- const char* logonData;
581
- if (!PyArg_ParseTuple(args, "s", &logonData))
582
- {
583
- return NULL;
584
- }
585
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setLogonCorrelationData(logonData));
586
- }
587
-
588
- // def uri(self):
589
- // def get_uri(self):
590
- // def getUri(self):
591
- static PyObject* getURI(obj* self, PyObject* args)
592
- {
593
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->getURI());
594
- }
595
-
596
- // def get_server_version(self):
597
- static PyObject* get_server_version(obj* self, PyObject* args)
598
- {
599
- CALL_RETURN_SIZE_T(((AMPS::Client*)(self->pClient))->getServerVersion());
600
- }
601
-
602
- // def get_server_version_info(self):
603
- static PyObject* get_server_version_info(obj* self, PyObject* args)
604
- {
605
- PyObject* returnVal = NULL;
606
- versioninfo::obj* versionInfo = (versioninfo::obj*)PyObject_New(versioninfo::obj,
607
- versioninfo::versioninfo_type);
608
- versionInfo->pVersionInfo = new VersionInfo(((AMPS::Client*)(self->pClient))->getServerVersionInfo());
609
- returnVal = (PyObject*)versionInfo;
610
- return returnVal;
611
- }
612
-
613
- // def convert_version_to_number(self, version_string)
614
- static PyObject* convert_version_to_number(obj* self, PyObject* args)
615
- {
616
- char* versionStr;
617
- if (!PyArg_ParseTuple(args, "s", &versionStr))
618
- {
619
- return NULL;
620
- }
621
- CALL_RETURN_SIZE_T(((AMPS::Client*)(self->pClient))->convertVersionToNumber(versionStr));
622
- }
623
-
624
- // def disconnect(self):
625
- // def close(self):
626
- static PyObject* disconnect(obj* self, PyObject* args)
627
- {
628
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->disconnect());
629
- }
630
-
631
- // def publish(self, topic, data, expiration=None):
632
- static PyObject* publish(obj* self, PyObject* args, PyObject* kw)
633
- {
634
- static const char* kwlist[] = { "topic", "data", "expiration", NULL };
635
- const char* topic, *data;
636
- Py_ssize_t topicLength, dataLength;
637
- unsigned long expiration = 0;
638
- PyObject* expire = NULL;
639
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s#s#|O", (char**)kwlist,
640
- &topic, &topicLength, &data, &dataLength, &expire))
641
- {
642
- return NULL;
643
- }
644
- #if PY_MAJOR_VERSION >= 3
645
- if (!expire || !PyLong_Check(expire) || (expiration = PyLong_AsUnsignedLong(expire)) == (unsigned long) - 1)
646
- #else
647
- if (!expire || !PyInt_Check(expire) || (expiration = PyInt_AsUnsignedLongMask(expire)) == (unsigned long) - 1)
648
- #endif
649
- {
650
- CALL_RETURN_UINT64_T(((AMPS::Client*)(self->pClient))->publish(topic, topicLength, data, dataLength));
651
- }
652
- else
653
- {
654
- CALL_RETURN_UINT64_T(((AMPS::Client*)(self->pClient))->publish(topic, topicLength, data, dataLength, expiration));
655
- }
656
- }
657
-
658
- // def delta_publish(self, topic, data, expiration=None):
659
- // def deltaPublish(self, topic, data, expiration=None):
660
- static PyObject* delta_publish(obj* self, PyObject* args, PyObject* kw)
661
- {
662
- static const char* kwlist[] = { "topic", "data", "expiration", NULL };
663
- const char* topic, *data;
664
- Py_ssize_t topicLength, dataLength;
665
- unsigned long expiration = 0;
666
- PyObject* expire = NULL;
667
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s#s#|O", (char**)kwlist,
668
- &topic, &topicLength, &data, &dataLength, &expire))
669
- {
670
- return NULL;
671
- }
672
- #if PY_MAJOR_VERSION >= 3
673
- if (!expire || !PyLong_Check(expire) || (expiration = PyLong_AsUnsignedLong(expire)) == (unsigned long) - 1)
674
- #else
675
- if (!expire || !PyInt_Check(expire) || (expiration = PyInt_AsUnsignedLongMask(expire)) == (unsigned long) - 1)
676
- #endif
677
- {
678
- CALL_RETURN_UINT64_T(((AMPS::Client*)(self->pClient))->deltaPublish(topic, topicLength, data, dataLength));
679
- }
680
- else
681
- {
682
- CALL_RETURN_UINT64_T(((AMPS::Client*)(self->pClient))->deltaPublish(topic, topicLength, data, dataLength, expiration));
683
- }
684
- }
685
-
686
- // def unsubscribe(self, sub_id=None):
687
- static PyObject* unsubscribe(obj* self, PyObject* args)
688
- {
689
- const char* subid = NULL;
690
- if (!PyArg_ParseTuple(args, "|s", &subid))
691
- {
692
- return NULL;
693
- }
694
- if (subid)
695
- {
696
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->unsubscribe(subid));
697
- }
698
- else
699
- {
700
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->unsubscribe());
701
- }
702
- }
703
- // def allocate_message(self):
704
- // def allocateMessage(self):
705
- static PyObject* allocate_message(obj* self, PyObject* args)
706
- {
707
- PyObject* o = PyObject_CallObject(ampspy::message::message_type, NULL);
708
-
709
- return o;
710
- }
711
-
712
- // callback function for AMPS messages
713
- //
714
- // Each client has a single Message object we use for reading and
715
- // callbacks, so we don't need to initialize a new python object
716
- // each time. The void pointer points to a callback_info structure
717
- // that contains a pointer to the client, and a pointer to the
718
- // python callable we should call.
719
- //
720
- // In this function, we just make sure the python Message object
721
- // points to the AMPS::Message that was passed in, and then
722
- // we invoke the user callback with the pre-built tuple argument.
723
- void callback_message(const Message& message, void* vp)
724
- {
725
- // most likely messageObject already points to &message based on the way
726
- // the C++ client works, but we do make a new one on reconnect.
727
- callback_info* ci = (callback_info*)vp;
728
- assert(ci);
729
- LOCKGIL;
730
- obj* pClient = ci->getClient();
731
- if (!pClient || !(ci->getHandler()) || !(pClient->message) || !(pClient->message_args))
732
- {
733
- return;
734
- }
735
- // message_args is a tuple object around message.
736
- // see the line that looks like this:
737
- // self->message_args = Py_BuildValue("(O)", self->message);
738
- // above.
739
- pClient->message->pMessage = (Message*)&message;
740
- PyObject* result = PyObject_Call(ci->getHandler(), pClient->message_args, (PyObject*)NULL);
741
- if (result == NULL)
742
- {
743
- if (PyErr_ExceptionMatches(PyExc_SystemExit))
744
- {
745
- ampspy::unhandled_exception();
746
- }
747
- else
748
- {
749
- // translate amps py exception into amps cpp, throw
750
- exc::throwError();
751
- }
752
- }
753
- else
754
- {
755
- Py_DECREF(result);
756
- }
757
- }
758
-
759
- static AMPS::MessageHandler createMessageHandler(obj* self, PyObject* handler)
760
- {
761
- if (cmessagehandler::isCHandler(handler))
762
- {
763
- return cmessagehandler::getMessageHandler(handler);
764
- }
765
- else
766
- {
767
- callback_info* ci = new callback_info(self, handler);
768
- {
769
- UNLOCKGIL;
770
- ((AMPS::Client*)(self->pClient))->deferredExecution(callback_info::add, ci);
771
- }
772
- AMPS::Lock<SimpleMutex> l(_createdHandlersLock);
773
- _createdHandlers.insert((void*)ci);
774
- return AMPS::MessageHandler(&callback_message, ci);
775
- }
776
- }
777
-
778
- AMPSDLL void* copy_route(void* vpCbInfo_)
779
- {
780
- // The GIL should not be locked entering this function
781
- // If it's not one created here, don't copy it
782
- if (!vpCbInfo_)
783
- {
784
- return NULL;
785
- }
786
- else
787
- {
788
- AMPS::Lock<SimpleMutex> l(_createdHandlersLock);
789
- if (!_createdHandlers.count(vpCbInfo_))
790
- {
791
- return NULL;
792
- }
793
- }
794
- callback_info* pCbInfo = (callback_info*)vpCbInfo_;
795
- callback_info* retVal = 0;
796
- {
797
- LOCKGIL;
798
- retVal = new callback_info(pCbInfo->getClient(),
799
- pCbInfo->getHandler());
800
- }
801
- ((AMPS::Client*)pCbInfo->getClient()->pClient)->deferredExecution(callback_info::add, retVal);
802
- AMPS::Lock<SimpleMutex> l(_createdHandlersLock);
803
- _createdHandlers.insert((void*)retVal);
804
- return (void*)retVal;
805
- }
806
-
807
- AMPSDLL void remove_route(void* vpData_)
808
- {
809
- // The GIL should not be locked entering this function
810
- // If it's not one created here, don't do anything
811
- if (!vpData_)
812
- {
813
- return;
814
- }
815
- else
816
- {
817
- AMPS::Lock<SimpleMutex> l(_createdHandlersLock);
818
- if (!_createdHandlers.erase(vpData_))
819
- {
820
- return;
821
- }
822
- }
823
- callback_info* pInfo = (callback_info*)vpData_;
824
- obj* pClientObj = pInfo->getClient();
825
- if (!pInfo->getHandler() || !pClientObj || !((AMPS::Client*)pClientObj->pClient) || !((AMPS::Client*)pClientObj->pClient)->isValid())
826
- {
827
- callback_info::destroy(vpData_);
828
- return;
829
- }
830
- ((AMPS::Client*)pClientObj->pClient)->deferredExecution(callback_info::destroy, vpData_);
831
- }
832
-
833
- static bool isCallback(PyObject* handler)
834
- {
835
- if (handler)
836
- {
837
- return cmessagehandler::isCHandler(handler) || PyCallable_Check(handler);
838
- }
839
- return false;
840
- }
841
- // def send(self, message, message_handler=None, timeout=None):
842
- static PyObject* send(obj* self, PyObject* args, PyObject* kw)
843
- {
844
- static const char* kwlist[] = { "message", "message_handler", "timeout", NULL };
845
- ampspy::message::obj* message;
846
- PyObject* handler = NULL;
847
- int timeout = 0;
848
-
849
- if (!PyArg_ParseTupleAndKeywords(args, kw, "O!|Oi", (char**)kwlist,
850
- ampspy::message::message_type.pPyObject(), &message, &handler, &timeout))
851
- {
852
- return NULL;
853
- }
854
- if (isCallback(handler))
855
- {
856
- AMPS::MessageHandler messageHandler =
857
- createMessageHandler(self, handler);
858
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->send(messageHandler,
859
- *(message->pMessage), timeout));
860
- }
861
- else
862
- {
863
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->send(*(message->pMessage)));
864
- }
865
- }
866
-
867
- // def add_message_handler(self, command_id, message_handler, requested_acks,
868
- //is_subscribe):
869
- static PyObject* add_message_handler(obj* self, PyObject* args, PyObject* kw)
870
- {
871
- static const char* kwlist[] = { "command_id", "message_handler",
872
- "requested_acks", "is_subscribe", NULL
873
- };
874
- const char* cmd_id = NULL;
875
- PyObject* handler = NULL;
876
- const char* acks = NULL;
877
- int isSubscribe = 0;
878
- if (!PyArg_ParseTupleAndKeywords(args, kw, "sOsi", (char**)kwlist, &cmd_id,
879
- &handler, &acks, &isSubscribe))
880
- {
881
- return NULL;
882
- }
883
- unsigned ackType = 0;
884
- for (const char* current = acks; current != NULL;
885
- current = strchr(current, ','))
886
- {
887
- // Advance after the , if on one, make sure still valid
888
- if (*current == ',' && *(++current) == '\0')
889
- {
890
- break;
891
- }
892
- switch (current[1])
893
- {
894
- case 'e': //AckTypeConstants<0>::Lengths[Message::AckType::Received]:
895
- if (current[0] == 'r')
896
- {
897
- ackType |= Message::AckType::Received;
898
- }
899
- else if (current[0] == 'p')
900
- {
901
- ackType |= Message::AckType::Persisted;
902
- }
903
- break;
904
- case 'a':
905
- ackType |= Message::AckType::Parsed;
906
- break;
907
- case 'r':
908
- ackType |= Message::AckType::Processed;
909
- break;
910
- case 'o':
911
- ackType |= Message::AckType::Completed;
912
- break;
913
- case 't':
914
- ackType |= Message::AckType::Stats;
915
- break;
916
- default:
917
- break;
918
- }
919
- }
920
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
921
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->addMessageHandler(cmd_id,
922
- msgHandler, ackType, isSubscribe != 0));
923
- }
924
-
925
- // def remove_message_handler(self, command_id)
926
- static PyObject* remove_message_handler(obj* self, PyObject* args)
927
- {
928
- const char* cmd_id = NULL;
929
- if (!PyArg_ParseTuple(args, "s", &cmd_id))
930
- {
931
- return NULL;
932
- }
933
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->removeMessageHandler(cmd_id));
934
- }
935
-
936
- // def bookmarkSubscribe(self, on_message, topic, bookmark, filter=None,
937
- //sub_id=None, options=None, timeout=0):
938
- static PyObject* bookmark_subscribe(obj* self, PyObject* args, PyObject* kw)
939
- {
940
- static const char* kwlist[] = {"on_message", "topic", "bookmark", "filter", "sub_id", "options", "timeout", NULL};
941
- static const char* kwlist_2[] = {"topic", "bookmark", "filter", "sub_id", "options", "timeout", NULL};
942
- const char* topic = NULL, *filter = NULL, *bookmark = NULL, *sub_id = NULL, *options = NULL;
943
- int timeout = 0;
944
- PyObject* handler;
945
- if (messageHandlerSupplied(args, kw))
946
- {
947
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Oss|zssi", (char**)kwlist,
948
- &handler, &topic, &bookmark, &filter, &sub_id,
949
- &options, &timeout))
950
- {
951
- return NULL;
952
- }
953
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
954
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->bookmarkSubscribe(msgHandler,
955
- topic, timeout, bookmark, filter ? filter : "", options ? options : "", sub_id ? sub_id : ""));
956
- }
957
- else
958
- {
959
- if (!PyArg_ParseTupleAndKeywords(args, kw, "ss|zssi", (char**)kwlist_2,
960
- &topic, &bookmark, &filter, &sub_id, &options, &timeout))
961
- {
962
- return NULL;
963
- }
964
- AMPSPyReference<ampspy::messagestream::obj> messageStream = createMessageStream(self, self->pClient, false, false);
965
- Command command("subscribe");
966
- command.setTopic(topic).setBookmark(bookmark).setTimeout(timeout);
967
- if (filter)
968
- {
969
- command.setFilter(filter);
970
- }
971
- if (options)
972
- {
973
- command.setOptions(options);
974
- }
975
- if (sub_id)
976
- {
977
- command.setSubId(sub_id);
978
- }
979
- CALL_AND_CAPTURE_RETURN_VALUE(((AMPS::Client*)(self->pClient))->executeAsyncNoResubscribe(
980
- command,
981
- messageStream->messageHandler()),
982
- messageStream->commandId());
983
- if (messageStream->commandId().empty())
984
- {
985
- messageStream.release();
986
- return (PyObject*)createNoopMessageStream();
987
- }
988
- else if (sub_id)
989
- {
990
- messageStream->subId() = sub_id;
991
- }
992
- return messageStream.release();
993
- }
994
- }
995
-
996
- static std::string optionsFor(const char* userOptions_, PyObject* oofEnabled_, PyObject* sendEmpties_ = NULL)
997
- {
998
- std::ostringstream optsOstr;
999
- if (oofEnabled_ && PyObject_IsTrue(oofEnabled_) == 1)
1000
- {
1001
- optsOstr << "oof";
1002
- }
1003
- if (sendEmpties_ && PyObject_IsTrue(sendEmpties_) == 0)
1004
- {
1005
- if (optsOstr.tellp() > 0)
1006
- {
1007
- optsOstr << ",";
1008
- }
1009
- optsOstr << "no_empties";
1010
- }
1011
- if (userOptions_)
1012
- {
1013
- if (optsOstr.tellp() > 0)
1014
- {
1015
- optsOstr << ",";
1016
- }
1017
- optsOstr << userOptions_;
1018
- }
1019
- return optsOstr.str();
1020
-
1021
- }
1022
-
1023
- //def sowAndDeltaSubscribe(self, on_message, topic, filter=None,
1024
- // batch_size=10, oof_enabled=False, send_empties=False,
1025
- // timeout=0, top_n=AMPS_DEFAULT_TOP_N, order_by="",
1026
- // options=""):
1027
- static PyObject* sow_and_delta_subscribe(obj* self, PyObject* args, PyObject* kw)
1028
- {
1029
- static const char* kwlist[] = {"on_message", "topic", "filter", "batch_size", "oof_enabled", "send_empties", "timeout", "top_n", "order_by", "options", NULL};
1030
- static const char* kwlist_2[] = {"topic", "filter", "batch_size", "oof_enabled", "send_empties", "timeout", "top_n", "order_by", "options", NULL};
1031
- const char* topic = NULL, *filter = NULL;
1032
- const char* orderBy = NULL;
1033
- const char* options = NULL;
1034
- PyObject* oofEnabled = Py_None, *sendEmpties = Py_None;
1035
- int batch_size = 10, timeout = 0, topN = AMPS_DEFAULT_TOP_N;
1036
- if (messageHandlerSupplied(args, kw))
1037
- {
1038
- PyObject* handler;
1039
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Os|ziOOiizz", (char**)kwlist,
1040
- &handler, &topic, &filter, &batch_size, &oofEnabled, &sendEmpties,
1041
- &timeout, &topN, &orderBy, &options))
1042
- {
1043
- return NULL;
1044
- }
1045
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
1046
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->sowAndDeltaSubscribe(msgHandler,
1047
- topic, filter ? filter : "", orderBy ? orderBy : "", batch_size, topN,
1048
- optionsFor(options, oofEnabled, sendEmpties), timeout));
1049
- }
1050
- else
1051
- {
1052
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ziOOiizz", (char**)kwlist_2,
1053
- &topic, &filter, &batch_size, &oofEnabled, &sendEmpties,
1054
- &timeout, &topN, &orderBy, &options))
1055
- {
1056
- return NULL;
1057
- }
1058
- AMPSPyReference<ampspy::messagestream::obj> messageStream = createMessageStream(self, self->pClient, false, false);
1059
- Command command("sow_and_delta_subscribe");
1060
- command.setTopic(topic).setBatchSize(batch_size).setTimeout(timeout);
1061
- if (filter)
1062
- {
1063
- command.setFilter(filter);
1064
- }
1065
- std::string optionsStr = optionsFor(options, oofEnabled, sendEmpties);
1066
- if (optionsStr.length())
1067
- {
1068
- command.setOptions(optionsStr);
1069
- }
1070
- if (orderBy)
1071
- {
1072
- command.setOrderBy(orderBy);
1073
- }
1074
- if (topN > 0)
1075
- {
1076
- command.setTopN(topN);
1077
- }
1078
- CALL_AND_CAPTURE_RETURN_VALUE(((AMPS::Client*)(self->pClient))->executeAsyncNoResubscribe(
1079
- command,
1080
- messageStream->messageHandler()),
1081
- messageStream->commandId());
1082
- if (messageStream->commandId().empty())
1083
- {
1084
- messageStream.release();
1085
- return (PyObject*)createNoopMessageStream();
1086
- }
1087
- return messageStream.release();
1088
- }
1089
-
1090
- }
1091
-
1092
- // def sow_and_subscribe(self, on_message, topic, filter, batch_size=10,
1093
- //batch_size=10, oof_enabled=False,
1094
- //timeout=0, top_n = AMPS_DEFAULT_TOP_N,
1095
- //order_by="", bookmark="", options=""):
1096
- // def sowAndSubscribe(self, on_message, topic, filter,
1097
- //batch_size=10, oof_enabled=False,
1098
- //timeout=0, top_n = AMPS_DEFAULT_TOP_N,
1099
- //order_by="", bookmark="", options=""):
1100
- static PyObject* sow_and_subscribe(obj* self, PyObject* args, PyObject* kw)
1101
- {
1102
- static const char* kwlist[] = {"on_message", "topic", "filter", "batch_size", "oof_enabled", "timeout", "top_n", "order_by", "bookmark", "options", NULL};
1103
- static const char* kwlist_2[] = {"topic", "filter", "batch_size", "oof_enabled", "timeout", "top_n", "order_by", "bookmark", "options", NULL};
1104
- const char* topic = NULL, *filter = NULL;
1105
- const char* orderBy = NULL;
1106
- const char* bookmark = NULL;
1107
- const char* options = NULL;
1108
- int batch_size = 10, timeout = 0, topN = AMPS_DEFAULT_TOP_N;
1109
- PyObject* oof_enabled = Py_None;
1110
- if (messageHandlerSupplied(args, kw))
1111
- {
1112
- PyObject* handler;
1113
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Os|ziOiizzz", (char**)kwlist,
1114
- &handler, &topic, &filter, &batch_size, &oof_enabled, &timeout, &topN, &orderBy, &bookmark, &options))
1115
- {
1116
- return NULL;
1117
- }
1118
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
1119
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->sowAndSubscribe(msgHandler,
1120
- topic, filter ? filter : "", orderBy ? orderBy : "", bookmark ? bookmark : "",
1121
- batch_size, topN, optionsFor(options, oof_enabled), timeout));
1122
- }
1123
- else
1124
- {
1125
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ziOiizzz",
1126
- (char**)kwlist_2,
1127
- &topic, &filter, &batch_size, &oof_enabled, &timeout, &topN,
1128
- &orderBy, &bookmark, &options))
1129
- {
1130
- return NULL;
1131
- }
1132
- AMPSPyReference<ampspy::messagestream::obj> messageStream = createMessageStream(self, self->pClient, false, false);
1133
- Command command("sow_and_subscribe");
1134
- command.setTopic(topic).setBatchSize(batch_size).setTimeout(timeout);
1135
- if (filter)
1136
- {
1137
- command.setFilter(filter);
1138
- }
1139
- std::string optionsStr = optionsFor(options, oof_enabled);
1140
- if (optionsStr.length())
1141
- {
1142
- command.setOptions(optionsStr);
1143
- }
1144
- if (orderBy)
1145
- {
1146
- command.setOrderBy(orderBy);
1147
- }
1148
- if (bookmark)
1149
- {
1150
- command.setBookmark(bookmark);
1151
- }
1152
- if (topN > 0)
1153
- {
1154
- command.setTopN(topN);
1155
- }
1156
- CALL_AND_CAPTURE_RETURN_VALUE(((AMPS::Client*)(self->pClient))->executeAsyncNoResubscribe(
1157
- command,
1158
- messageStream->messageHandler()),
1159
- messageStream->commandId());
1160
- if (messageStream->commandId().empty())
1161
- {
1162
- messageStream.release();
1163
- return (PyObject*)createNoopMessageStream();
1164
- }
1165
- return messageStream.release();
1166
- }
1167
- }
1168
-
1169
- // def sow(self, on_message, topic, filter, batch_size=10, timeout=0, top_n=AMPS_DEFAULT_TOP_N, order_by=None, bookmark=None, options=None):
1170
- static PyObject* sow(obj* self, PyObject* args, PyObject* kw)
1171
- {
1172
- static const char* kwlist[] = {"on_message", "topic", "filter", "batch_size", "timeout", "top_n", "order_by", "bookmark", "options", NULL};
1173
- static const char* kwlist_2[] = {"topic", "filter", "batch_size", "timeout", "top_n", "order_by", "bookmark", "options", NULL};
1174
- const char* topic = NULL, *filter = NULL;
1175
- const char* orderBy = NULL;
1176
- const char* bookmark = NULL;
1177
- const char* options = NULL;
1178
- int batch_size = 10, timeout = 0, topN = AMPS_DEFAULT_TOP_N;
1179
- PyObject* handler = NULL;
1180
- if (messageHandlerSupplied(args, kw))
1181
- {
1182
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Os|ziiizzz", (char**)kwlist,
1183
- &handler, &topic, &filter, &batch_size, &timeout, &topN, &orderBy, &bookmark, &options))
1184
- {
1185
- return NULL;
1186
- }
1187
- }
1188
- else
1189
- {
1190
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ziiizzz", (char**)kwlist_2,
1191
- &topic, &filter, &batch_size, &timeout, &topN, &orderBy, &bookmark, &options))
1192
- {
1193
- return NULL;
1194
- }
1195
- }
1196
- if (handler == NULL)
1197
- {
1198
- AMPSPyReference<ampspy::messagestream::obj > messagestream = createMessageStream(self, self->pClient, true, false, false);
1199
- AMPS::Command cmd("sow");
1200
- cmd.setTopic(topic).setBatchSize(batch_size);
1201
- if (filter)
1202
- {
1203
- cmd.setFilter(filter);
1204
- }
1205
- if (orderBy)
1206
- {
1207
- cmd.setOrderBy(orderBy);
1208
- }
1209
- if (bookmark)
1210
- {
1211
- cmd.setBookmark(bookmark);
1212
- }
1213
- if (topN != AMPS_DEFAULT_TOP_N)
1214
- {
1215
- cmd.setTopN(topN);
1216
- }
1217
- if (options)
1218
- {
1219
- cmd.setOptions(options);
1220
- }
1221
- if (timeout)
1222
- {
1223
- cmd.setTimeout(timeout);
1224
- }
1225
- cmd.addAckType("completed");
1226
- CALL_AND_CAPTURE_RETURN_VALUE(((AMPS::Client*)(self->pClient))->executeAsync(cmd, messagestream->messageHandler()), messagestream->commandId());
1227
-
1228
- return messagestream.release();
1229
- }
1230
- else
1231
- {
1232
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
1233
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->sow(msgHandler,
1234
- topic, filter ? filter : "", orderBy ? orderBy : "", bookmark ? bookmark : "",
1235
- batch_size, topN, options ? options : "", timeout));
1236
- }
1237
- }
1238
- // def subscribe(self, on_message, topic, filter=None, options=None, timeout=0, sub_id=None):
1239
- static PyObject* subscribe(obj* self, PyObject* args, PyObject* kw)
1240
- {
1241
- static const char* kwlist[] = { "on_message", "topic", "filter", "options", "timeout", "sub_id", NULL };
1242
- static const char* kwlist_2[] = { "topic", "filter", "options", "timeout", "sub_id", NULL };
1243
- const char* topic = NULL, *filter = NULL, *options = NULL, *sub_id = NULL;
1244
- int timeout = 0;
1245
- if (messageHandlerSupplied(args, kw))
1246
- {
1247
- PyObject* handler;
1248
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Os|zsis", (char**)kwlist,
1249
- &handler, &topic, &filter, &options,
1250
- &timeout, &sub_id))
1251
- {
1252
- return NULL;
1253
- }
1254
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
1255
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->subscribe(msgHandler, topic, timeout,
1256
- filter ? filter : "", options ? options : "", sub_id ? sub_id : ""));
1257
- }
1258
- else
1259
- {
1260
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s|zsis", (char**)kwlist_2,
1261
- &topic, &filter, &options,
1262
- &timeout, &sub_id))
1263
- {
1264
- return NULL;
1265
- }
1266
- AMPSPyReference<ampspy::messagestream::obj> messageStream = createMessageStream(self, self->pClient, false, false);
1267
- Command command("subscribe");
1268
- command.setTopic(topic).setTimeout(timeout);
1269
- if (filter)
1270
- {
1271
- command.setFilter(filter);
1272
- }
1273
- if (options)
1274
- {
1275
- command.setOptions(options);
1276
- }
1277
- if (sub_id)
1278
- {
1279
- command.setSubId(sub_id);
1280
- }
1281
- CALL_AND_CAPTURE_RETURN_VALUE(((AMPS::Client*)(self->pClient))->executeAsyncNoResubscribe(
1282
- command,
1283
- messageStream->messageHandler()),
1284
- messageStream->commandId());
1285
- if (messageStream->commandId().empty())
1286
- {
1287
- messageStream.release();
1288
- return (PyObject*)createNoopMessageStream();
1289
- }
1290
- else if (sub_id)
1291
- {
1292
- messageStream->subId() = sub_id;
1293
- }
1294
- return messageStream.release();
1295
- }
1296
- }
1297
-
1298
- // def deltaSubscribe(self, on_message, topic, filter=None, options=0, timeout=0):
1299
- // def delta_subscribe(self, on_message, topic, filter=None, options=0, timeout=0):
1300
- static PyObject* delta_subscribe(obj* self, PyObject* args, PyObject* kw)
1301
- {
1302
- static const char* kwlist[] = { "on_message", "topic", "filter", "options", "timeout", "sub_id", NULL };
1303
- static const char* kwlist_2[] = { "topic", "filter", "options", "timeout", "sub_id", NULL };
1304
- const char* topic = NULL, *filter = NULL, *options = NULL, *sub_id = NULL;
1305
- int timeout = 0;
1306
- if (messageHandlerSupplied(args, kw))
1307
- {
1308
- PyObject* handler;
1309
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Os|zsis", (char**)kwlist,
1310
- &handler, &topic, &filter, &options,
1311
- &timeout, &sub_id))
1312
- {
1313
- return NULL;
1314
- }
1315
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
1316
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->deltaSubscribe(msgHandler,
1317
- topic, timeout, filter ? filter : "", options ? options : "", sub_id ? sub_id : ""));
1318
- }
1319
- else
1320
- {
1321
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s|zsis", (char**)kwlist_2,
1322
- &topic, &filter, &options,
1323
- &timeout, &sub_id))
1324
- {
1325
- return NULL;
1326
- }
1327
- AMPSPyReference<ampspy::messagestream::obj> messageStream = createMessageStream(self, self->pClient, false, false);
1328
- Command command("delta_subscribe");
1329
- command.setTopic(topic).setTimeout(timeout);
1330
- if (filter)
1331
- {
1332
- command.setFilter(filter);
1333
- }
1334
- if (options)
1335
- {
1336
- command.setOptions(options);
1337
- }
1338
- if (sub_id)
1339
- {
1340
- command.setSubId(sub_id);
1341
- }
1342
- CALL_AND_CAPTURE_RETURN_VALUE(((AMPS::Client*)(self->pClient))->executeAsyncNoResubscribe(
1343
- command,
1344
- messageStream->messageHandler()),
1345
- messageStream->commandId());
1346
- if (messageStream->commandId().empty())
1347
- {
1348
- messageStream.release();
1349
- return (PyObject*)createNoopMessageStream();
1350
- }
1351
- else if (sub_id)
1352
- {
1353
- messageStream->subId() = sub_id;
1354
- }
1355
- return messageStream.release();
1356
- }
1357
- }
1358
-
1359
-
1360
- // def sowDelete(self, on_message, topic, filter=None, options=0, timeout=0):
1361
- // def sow_delete(self, on_message, topic, filter=None, options=0, timeout=0):
1362
- static PyObject* sow_delete(obj* self, PyObject* args, PyObject* kw)
1363
- {
1364
- static const char* kwlist[] = { "on_message", "topic", "filter", "timeout", NULL };
1365
- static const char* kwlist_2[] = { "topic", "filter", "timeout", NULL };
1366
- const char* topic, *filter_ = "";
1367
- int timeout_ = 0;
1368
- PyObject* handler;
1369
- if (messageHandlerSupplied(args, kw))
1370
- {
1371
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Oss|i", (char**)kwlist,
1372
- &handler, &topic, &filter_, &timeout_))
1373
- {
1374
- return NULL;
1375
- }
1376
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
1377
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->sowDelete(msgHandler,
1378
- topic, filter_, timeout_));
1379
- }
1380
- else
1381
- {
1382
- if (!PyArg_ParseTupleAndKeywords(args, kw, "ss|i", (char**)kwlist_2,
1383
- &topic, &filter_, &timeout_))
1384
- {
1385
- return NULL;
1386
- }
1387
- try
1388
- {
1389
- AMPS::Message resultMessage;
1390
- {
1391
- UNLOCKGIL;
1392
- resultMessage = ((AMPS::Client*)(self->pClient))->sowDelete(topic, filter_, timeout_);
1393
- }
1394
- message::obj* message = (message::obj*)allocate_message(self, NULL);
1395
- message::setCppMessage(message, resultMessage);
1396
- return (PyObject*)message;
1397
- } DISPATCH_EXCEPTION
1398
- }
1399
- }
1400
-
1401
- // def sowDelete(self, on_message, topic, filter=None, options=0, timeout=0):
1402
- // def sow_delete(self, on_message, topic, filter=None, options=0, timeout=0):
1403
- static PyObject* sow_delete_by_keys(obj* self, PyObject* args, PyObject* kw)
1404
- {
1405
- static const char* kwlist[] = { "on_message", "topic", "keys", "timeout", NULL };
1406
- static const char* kwlist_2[] = {"topic", "keys", "timeout", NULL };
1407
- const char* topic, *keys = "";
1408
- int timeout_ = 0;
1409
- PyObject* on_message;
1410
- if (messageHandlerSupplied(args, kw))
1411
- {
1412
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Oss|i", (char**)kwlist,
1413
- &on_message, &topic, &keys, &timeout_))
1414
- {
1415
- return NULL;
1416
- }
1417
- AMPS::MessageHandler msgHandler = createMessageHandler(self, on_message);
1418
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->sowDeleteByKeys(msgHandler,
1419
- topic, keys, timeout_));
1420
- }
1421
- else
1422
- {
1423
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s|si", (char**)kwlist_2,
1424
- &topic, &keys, &timeout_))
1425
- {
1426
- return NULL;
1427
- }
1428
- try
1429
- {
1430
- AMPS::Message resultMessage;
1431
- {
1432
- UNLOCKGIL;
1433
- resultMessage = ((AMPS::Client*)(self->pClient))->sowDeleteByKeys(topic, keys, timeout_);
1434
- }
1435
- message::obj* message = (message::obj*)allocate_message(self, NULL);
1436
- message::setCppMessage(message, resultMessage);
1437
- return (PyObject*)message;
1438
- }
1439
- DISPATCH_EXCEPTION
1440
- }
1441
- }
1442
-
1443
- // def sowDelete(self, on_message, topic, data, options=0, timeout=0):
1444
- // def sow_delete(self, on_message, topic, data, options=0, timeout=0):
1445
- static PyObject* sow_delete_by_data(obj* self, PyObject* args, PyObject* kw)
1446
- {
1447
- static const char* kwlist[] = { "on_message", "topic", "data", "timeout", NULL };
1448
- static const char* kwlist_2[] = {"topic", "data", "timeout", NULL };
1449
- const char* topic, *data = "";
1450
- Py_ssize_t dataLen = 0;
1451
- int timeout_ = 0;
1452
- if (messageHandlerSupplied(args, kw))
1453
- {
1454
- PyObject* on_message;
1455
- if (!PyArg_ParseTupleAndKeywords(args, kw, "Oss#|i", (char**)kwlist,
1456
- &on_message, &topic, &data, &dataLen,
1457
- &timeout_))
1458
- {
1459
- return NULL;
1460
- }
1461
- AMPS::MessageHandler msgHandler = createMessageHandler(self, on_message);
1462
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->sowDeleteByData(msgHandler,
1463
- topic, std::string(data, dataLen), timeout_));
1464
- }
1465
- else
1466
- {
1467
- if (!PyArg_ParseTupleAndKeywords(args, kw, "ss#|i", (char**)kwlist_2,
1468
- &topic, &data, &dataLen, &timeout_))
1469
- {
1470
- return NULL;
1471
- }
1472
- try
1473
- {
1474
- AMPS::Message resultMessage;
1475
- {
1476
- UNLOCKGIL;
1477
- resultMessage = ((AMPS::Client*)(self->pClient))->sowDeleteByData(topic, std::string(data, dataLen), timeout_);
1478
- }
1479
- message::obj* message = (message::obj*)allocate_message(self, NULL);
1480
- message::setCppMessage(message, resultMessage);
1481
- return (PyObject*) message;
1482
- } DISPATCH_EXCEPTION
1483
- }
1484
- }
1485
-
1486
- // def set_heartbeat(self, interval_seconds, timeout_seconds=None):
1487
- static PyObject* set_heartbeat(obj* self, PyObject* args, PyObject* kw)
1488
- {
1489
- static const char* kwlist[] = { "interval_seconds", "timeout_seconds", NULL };
1490
- int interval_seconds = 0, timeout_seconds = -1;
1491
- if (!PyArg_ParseTupleAndKeywords(args, kw, "i|i", (char**)kwlist,
1492
- &interval_seconds, &timeout_seconds))
1493
- {
1494
- return NULL;
1495
- }
1496
- if (timeout_seconds == -1)
1497
- {
1498
- timeout_seconds = interval_seconds * 2;
1499
- }
1500
-
1501
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setHeartbeat(interval_seconds, timeout_seconds));
1502
- }
1503
-
1504
- // Deprecated
1505
- // def start_timer(self)
1506
- static PyObject* start_timer(obj* self, PyObject* args)
1507
- {
1508
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->startTimer());
1509
- }
1510
-
1511
- // Deprecated
1512
- // def stop_timer(self)
1513
- static PyObject* stop_timer(obj* self, PyObject* args)
1514
- {
1515
- PyObject* callable;
1516
- if (!PyArg_ParseTuple(args, "O", &callable))
1517
- {
1518
- return NULL;
1519
- }
1520
- if (isCallback(callable))
1521
- {
1522
- AMPS::MessageHandler msgHandler = createMessageHandler(self, callable);
1523
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->stopTimer(msgHandler));
1524
- }
1525
- else
1526
- {
1527
- PyErr_SetString(PyExc_TypeError, "argument to stop_timer must be callable.");
1528
- return NULL;
1529
- }
1530
- }
1531
-
1532
- void
1533
- call_disconnect_handler(Client& cli, void* vp)
1534
- {
1535
- LOCKGIL;
1536
- obj* c = (obj*) vp;
1537
-
1538
- PyObject* args = Py_BuildValue("(O)", c);
1539
- PyObject_Call(c->disconnectHandler, args, (PyObject*)NULL);
1540
- Py_DECREF(args);
1541
- if (PyErr_Occurred())
1542
- {
1543
- if (PyErr_ExceptionMatches(PyExc_SystemExit))
1544
- {
1545
- ampspy::unhandled_exception();
1546
- }
1547
- throw AMPSException("The disconnect handler threw an exception", AMPS_E_CONNECTION);
1548
- }
1549
- }
1550
-
1551
- // def set_disconnect_handler(self, client_disconnect_handler):
1552
- // def setDisconnectHandler(self, client_disconnect_handler):
1553
- static PyObject* set_disconnect_handler(obj* self, PyObject* args)
1554
- {
1555
- Client& client = *(self->pClient);
1556
- PyObject* callable;
1557
- if (!PyArg_ParseTuple(args, "O", &callable))
1558
- {
1559
- return NULL;
1560
- }
1561
- if (!PyCallable_Check(callable) && callable != Py_None)
1562
- {
1563
- PyErr_SetString(PyExc_TypeError, "argument must be callable.");
1564
- return NULL;
1565
- }
1566
- if (self->disconnectHandler)
1567
- {
1568
- Py_DECREF(self->disconnectHandler);
1569
- }
1570
- if (callable == Py_None)
1571
- {
1572
- self->disconnectHandler = NULL;
1573
- AMPS::DisconnectHandler no_handler;
1574
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setDisconnectHandler(no_handler));
1575
- }
1576
- else
1577
- {
1578
- Py_INCREF(callable);
1579
- self->disconnectHandler = callable;
1580
- CALL_RETURN_NONE(client.setDisconnectHandler(AMPS::DisconnectHandler(call_disconnect_handler, self)));
1581
- }
1582
- }
1583
- // def set_unhandled_message_handler(self, message_handler):
1584
- // def setUnhandledMessageHandler(self, message_handler):
1585
- static PyObject* set_last_chance_message_handler(obj* self, PyObject* args)
1586
- {
1587
- PyObject* callable;
1588
- if (!PyArg_ParseTuple(args, "O", &callable))
1589
- {
1590
- return NULL;
1591
- }
1592
- if (isCallback(callable))
1593
- {
1594
- AMPS::MessageHandler msgHandler = createMessageHandler(self, callable);
1595
- CALL_RETURN_NONE(
1596
- ((AMPS::Client*)(self->pClient))->setLastChanceMessageHandler(msgHandler));
1597
- }
1598
- else
1599
- {
1600
- if (callable == Py_None)
1601
- {
1602
- AMPS::MessageHandler no_handler;
1603
- CALL_RETURN_NONE(
1604
- ((AMPS::Client*)(self->pClient))->setLastChanceMessageHandler(no_handler));
1605
- }
1606
- else
1607
- {
1608
- PyErr_SetString(PyExc_TypeError, "argument must be callable.");
1609
- return NULL;
1610
- }
1611
- }
1612
- }
1613
-
1614
- // def set_duplicate_message_handler(self, message_handler):
1615
- // def setDuplicateMessageHandler(self, message_handler):
1616
- static PyObject* set_duplicate_message_handler(obj* self, PyObject* args)
1617
- {
1618
- PyObject* callable;
1619
- if (!PyArg_ParseTuple(args, "O", &callable))
1620
- {
1621
- return NULL;
1622
- }
1623
- if (isCallback(callable))
1624
- {
1625
- AMPS::MessageHandler msgHandler = createMessageHandler(self, callable);
1626
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setDuplicateMessageHandler(msgHandler));
1627
- }
1628
- else
1629
- {
1630
- if (callable == Py_None)
1631
- {
1632
- AMPS::MessageHandler no_handler;
1633
- CALL_RETURN_NONE(
1634
- ((AMPS::Client*)(self->pClient))->setDuplicateMessageHandler(no_handler));
1635
- }
1636
- PyErr_SetString(PyExc_TypeError, "argument must be callable.");
1637
- return NULL;
1638
- }
1639
- }
1640
-
1641
- static PyObject* get_duplicate_message_handler(obj* self, PyObject* args)
1642
- {
1643
- AMPS::MessageHandler handler = ((AMPS::Client*)(self->pClient))->getDuplicateMessageHandler();
1644
- if (handler.function() == callback_message)
1645
- {
1646
- callback_info* pCallbackInfo =
1647
- reinterpret_cast<callback_info*>(handler.userData());
1648
- if (pCallbackInfo)
1649
- {
1650
- PyObject* handler = pCallbackInfo->getHandler();
1651
- if (handler)
1652
- {
1653
- Py_INCREF(handler);
1654
- return handler;
1655
- }
1656
- }
1657
- }
1658
- NONE;
1659
- }
1660
-
1661
- // def set_exception_listener(self, exception_listener):
1662
- // def setExceptionListener(self, exception_listener):
1663
- static PyObject* set_exception_listener(obj* self, PyObject* args)
1664
- {
1665
- PyObject* callable;
1666
- if (!PyArg_ParseTuple(args, "O", &callable))
1667
- {
1668
- return NULL;
1669
- }
1670
- if (!PyCallable_Check(callable) && callable != Py_None)
1671
- {
1672
- PyErr_SetString(PyExc_TypeError, "argument must be callable.");
1673
- return NULL;
1674
- }
1675
- if (callable == Py_None)
1676
- {
1677
- self->exceptionHandler = std::make_shared<PyExceptionListener>();
1678
- }
1679
- else
1680
- {
1681
- self->exceptionHandler = std::make_shared<PyExceptionListener>(callable);
1682
- }
1683
- CALL_RETURN_NONE(
1684
- ((AMPS::Client*)(self->pClient))->setExceptionListener( self->exceptionHandler )
1685
- );
1686
- }
1687
-
1688
- static PyObject* get_exception_listener(obj* self, PyObject* args)
1689
- {
1690
- if (self->exceptionHandler)
1691
- {
1692
- PyObject* object = (PyObject*) ((PyExceptionListener*)(self->exceptionHandler.get()))->callable();
1693
- if (object)
1694
- {
1695
- Py_INCREF(object);
1696
- return object;
1697
- }
1698
- }
1699
- NONE;
1700
- }
1701
-
1702
- // def publish_flush(self, timeout=0):
1703
- static PyObject* publish_flush(obj* self, PyObject* args, PyObject* kw)
1704
- {
1705
- static const char* kwlist[] = { "timeout", "ack_type", NULL };
1706
- long timeout = 0;
1707
- unsigned long ackType = AMPS::Message::AckType::Processed;
1708
- if (!PyArg_ParseTupleAndKeywords(args, kw, "|lk", (char**)kwlist, &timeout, &ackType))
1709
- {
1710
- return NULL;
1711
- }
1712
- CALL_RETURN_NONE(
1713
- ((AMPS::Client*)(self->pClient))->publishFlush(timeout, ackType)
1714
- );
1715
- }
1716
-
1717
- static size_t _getUnpersistedCount(AMPS::Client& client)
1718
- {
1719
- Store store = client.getPublishStore();
1720
- if (store.isValid())
1721
- {
1722
- return store.unpersistedCount();
1723
- }
1724
- else
1725
- {
1726
- return 0;
1727
- }
1728
- }
1729
-
1730
- static PyObject* get_unpersisted_count(obj* self, PyObject* args)
1731
- {
1732
- AMPS::Client& client = *(AMPS::Client*)(self->pClient);
1733
- // Want to unlock GIL for all client calls and have exception safety
1734
- CALL_RETURN_SIZE_T(_getUnpersistedCount(client));
1735
- }
1736
-
1737
- static PyObject* get_error_on_publish_gap(obj* self, PyObject* args)
1738
- {
1739
- CALL_RETURN_BOOL(((AMPS::Client*)(self->pClient))->getPublishStore().getErrorOnPublishGap());
1740
- }
1741
-
1742
- static PyObject* set_error_on_publish_gap(obj* self, PyObject* args)
1743
- {
1744
- PyObject* value = NULL;
1745
- if (!PyArg_ParseTuple(args, "O!", &PyBool_Type, &value))
1746
- {
1747
- return NULL;
1748
- }
1749
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->getPublishStore().setErrorOnPublishGap(value == Py_True));
1750
- }
1751
-
1752
- static PyObject* set_bookmark_store(obj* self, PyObject* args)
1753
- {
1754
- PyObject* pBookmarkStore;
1755
- if (!PyArg_ParseTuple(args, "O", &pBookmarkStore))
1756
- {
1757
- return NULL;
1758
- }
1759
-
1760
- if (pBookmarkStore == Py_None)
1761
- {
1762
- // Unset the bookmark store.
1763
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setBookmarkStore(BookmarkStore()));
1764
- }
1765
- else if (ampspy::mmapbookmarkstore::mmapbookmarkstore_type.isInstanceOf(pBookmarkStore))
1766
- {
1767
- // A C++ bookmark store implementation; set it directly.
1768
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setBookmarkStore(*((ampspy::mmapbookmarkstore::obj*)pBookmarkStore)->impl));
1769
- }
1770
- else if (ampspy::memorybookmarkstore::memorybookmarkstore_type.isInstanceOf(pBookmarkStore))
1771
- {
1772
- // A C++ bookmark store implementation; set it directly.
1773
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setBookmarkStore(*((ampspy::memorybookmarkstore::obj*)pBookmarkStore)->impl));
1774
- }
1775
- else
1776
- {
1777
- // Assume this is a python object that implements the required bookmark
1778
- // store methods. If it does not, the first missing method will result in
1779
- // an exception.
1780
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setBookmarkStore(new ampspy::bookmarkstore::wrapper(pBookmarkStore)));
1781
- }
1782
- }
1783
-
1784
- static PyObject* set_publish_store(obj* self, PyObject* args)
1785
- {
1786
- PyObject* store;
1787
- if (!PyArg_ParseTuple(args, "O", &store))
1788
- {
1789
- return NULL;
1790
- }
1791
- if (ampspy::publishstore::publishstore_type.isInstanceOf(store))
1792
- {
1793
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setPublishStore(((ampspy::publishstore::obj*)store)->impl));
1794
- }
1795
- else if (ampspy::memorypublishstore::memorypublishstore_type.isInstanceOf(store)
1796
- || ampspy::hybridpublishstore::hybridpublishstore_type.isInstanceOf(store))
1797
- {
1798
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setPublishStore(*((ampspy::memorypublishstore::obj*)store)->impl));
1799
- }
1800
- else if (store == Py_None)
1801
- {
1802
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setPublishStore(Store()));
1803
- }
1804
- else
1805
- {
1806
- PyErr_SetString(PyExc_TypeError, "argument must be one of AMPS.PublishStore, AMPS.MemoryPublishStore, AMPS.HybridPublishStore, or None.");
1807
- return NULL;
1808
- }
1809
- }
1810
-
1811
- static PyObject* set_failed_write_handler(obj* self, PyObject* args)
1812
- {
1813
- PyObject* handler = NULL;
1814
- if (!PyArg_ParseTuple(args, "O", &handler))
1815
- {
1816
- return NULL;
1817
- }
1818
-
1819
- if (handler == Py_None)
1820
- {
1821
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setFailedWriteHandler(NULL));
1822
- }
1823
- else
1824
- {
1825
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setFailedWriteHandler(new PyFailedWriteHandler(handler)));
1826
- }
1827
- }
1828
-
1829
- static PyObject* execute_async(obj* self, PyObject* args, PyObject* kw)
1830
- {
1831
- static const char* kwlist[] = { "command", "on_message", NULL };
1832
- PyObject* on_message = NULL;
1833
- command::obj* command;
1834
-
1835
- if (!PyArg_ParseTupleAndKeywords(args, kw, "O!|O", (char**)kwlist, command::command_type.pPyObject(), &command, &on_message))
1836
- {
1837
- return NULL;
1838
- }
1839
- if (on_message == NULL || on_message == Py_None)
1840
- {
1841
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->executeAsync(command->command, AMPS::MessageHandler()));
1842
- }
1843
-
1844
- if (!isCallback(on_message))
1845
- {
1846
- PyErr_SetString(PyExc_TypeError, "on_message must be callable");
1847
- return NULL;
1848
- }
1849
- AMPS::MessageHandler msgHandler = createMessageHandler(self, on_message);
1850
- CALL_RETURN_STRING(((AMPS::Client*)(self->pClient))->executeAsync(command->command, msgHandler));
1851
- }
1852
-
1853
- static void noop_message_handler(const AMPS::Message& message_, void*)
1854
- {;}
1855
-
1856
- static PyObject* execute(obj* self, PyObject* args)
1857
- {
1858
- command::obj* pyCommand;
1859
- if (!PyArg_ParseTuple(args, "O!", command::command_type.pPyObject(), &pyCommand))
1860
- {
1861
- return NULL;
1862
- }
1863
- AMPS::Command& command = pyCommand->command;
1864
- AMPS::Message& message = command.getMessage();
1865
- const Message::Command::Type commandType = message.getCommandEnum();
1866
- unsigned requestedAcks = message.getAckTypeEnum();
1867
- // A Command returning no data and no acks needs an empty MessageStream
1868
- if ((commandType & Message::Command::NoDataCommands)
1869
- && (requestedAcks == Message::AckType::Persisted
1870
- || requestedAcks == Message::AckType::None))
1871
- {
1872
- try
1873
- {
1874
- UnlockGIL unlockGuard;
1875
- ((AMPS::Client*)(self->pClient))->executeAsync(command,
1876
- AMPS::MessageHandler(noop_message_handler, NULL));
1877
- } DISPATCH_EXCEPTION;
1878
- return (PyObject*)createNoopMessageStream();
1879
- }
1880
-
1881
- const bool isStats = command.hasStatsAck();
1882
- const bool isSow = command.isSow();
1883
- const bool sendCompleted = !isSow || (requestedAcks & AMPS::Message::AckType::Completed);
1884
- AMPSPyReference<messagestream::obj> messageStream = createMessageStream(self, self->pClient, isSow, isStats, sendCompleted);
1885
- if (isSow)
1886
- {
1887
- if (!sendCompleted)
1888
- {
1889
- command.addAckType("completed");
1890
- }
1891
- if (requestedAcks)
1892
- {
1893
- messageStream->setAcksOnly(requestedAcks | AMPS::Message::AckType::Completed);
1894
- }
1895
- }
1896
- else if (!command.isSubscribe())
1897
- {
1898
- messageStream->setAcksOnly( (commandType == Message::Command::Publish ||
1899
- commandType == Message::Command::DeltaPublish ||
1900
- commandType == Message::Command::SOWDelete)
1901
- ? requestedAcks & ~Message::AckType::Persisted
1902
- : requestedAcks);
1903
- }
1904
-
1905
- CALL_AND_CAPTURE_RETURN_VALUE(
1906
- ((AMPS::Client*)(self->pClient))->executeAsyncNoResubscribe(command,
1907
- messageStream->messageHandler()),
1908
- messageStream->commandId());
1909
- if (command.isSubscribe())
1910
- {
1911
- if (messageStream->commandId().empty())
1912
- {
1913
- messageStream.release();
1914
- return (PyObject*)createNoopMessageStream();
1915
- }
1916
- std::string subId = message.getSubscriptionId();
1917
- if (subId != messageStream->commandId())
1918
- {
1919
- messageStream->subId() = subId;
1920
- }
1921
- }
1922
- std::string queryId = message.getQueryID();
1923
- if (!queryId.empty() && queryId != messageStream->commandId()
1924
- && queryId != messageStream->subId())
1925
- {
1926
- messageStream->queryId() = queryId;
1927
- }
1928
- return messageStream.release();
1929
- }
1930
-
1931
- void TransportFilter::connectionStateChanged(AMPS::ConnectionStateListener::State newState_)
1932
- {
1933
- if (newState_ == AMPS::ConnectionStateListener::Disconnected)
1934
- {
1935
- _remain = 0;
1936
- }
1937
- }
1938
-
1939
- void TransportFilter::filter(const unsigned char* data_, size_t len_, short direction_, void* vpThis_)
1940
- {
1941
- TransportFilter* pSelf = (TransportFilter*)vpThis_;
1942
- try
1943
- {
1944
- LOCKGIL;
1945
- #if PY_MAJOR_VERSION >= 3
1946
- PyObject_CallObject(pSelf->_handler, Py_BuildValue("(y#O)", data_, len_, (direction_ ? Py_True : Py_False)));
1947
- #else
1948
- PyObject_CallObject(pSelf->_handler, Py_BuildValue("(s#O)", data_, len_, (direction_ ? Py_True : Py_False)));
1949
- #endif
1950
- }
1951
- catch (...) { } // -V565 this is a C callback function, so exceptions must not bubble up.
1952
- }
1953
- #if PY_MAJOR_VERSION >= 3 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 7)
1954
- void TransportFilter::filterModifiable(const unsigned char* data_, size_t len_, short direction_, void* vpThis_)
1955
- {
1956
- TransportFilter* pSelf = (TransportFilter*)vpThis_;
1957
- // Break up the bytes into discrete messages
1958
- size_t processed = 0;
1959
- unsigned char* start = const_cast<unsigned char*>(data_);
1960
- size_t length = len_;
1961
-
1962
- while (processed < length)
1963
- {
1964
- size_t sz = length;
1965
- if (direction_)
1966
- {
1967
- if (pSelf->_remain)
1968
- {
1969
- start = (unsigned char*)(data_ - pSelf->_remain);
1970
- length += pSelf->_remain;
1971
- pSelf->_remain = (size_t)0;
1972
- }
1973
- if (length - processed < 4)
1974
- {
1975
- break;
1976
- }
1977
- unsigned int len = *(unsigned int*)start;
1978
- sz = (size_t)ntohl(len);
1979
- if (sz == 0)
1980
- {
1981
- break;
1982
- }
1983
- if (length - processed < 4 + sz)
1984
- {
1985
- break;
1986
- }
1987
- start = (unsigned char*)(start + 4);
1988
- processed += 4;
1989
- }
1990
- try
1991
- {
1992
- LOCKGIL;
1993
- #if PY_MAJOR_VERSION >= 3
1994
- // PyBUF_WRITE currently not in limited API because it's in cpython/object.h, however, it is
1995
- // added to the stable API in 3.11 and has been stable since 2.6 and 3.0
1996
- #ifndef PyBUF_WRITE
1997
- #define PyBUF_WRITE 0x200
1998
- #endif
1999
- PyObject* data = PyMemoryView_FromMemory((char*)start, (Py_ssize_t)sz, PyBUF_WRITE);
2000
- PyObject_CallObject(pSelf->_handler, Py_BuildValue("(OO)", data, (direction_ ? Py_True : Py_False)));
2001
- #else
2002
- Py_ssize_t shape[] = { (Py_ssize_t)sz };
2003
- Py_buffer buf;
2004
- buf.buf = start;
2005
- buf.obj = NULL;
2006
- buf.len = (Py_ssize_t) sz;
2007
- buf.itemsize = 1;
2008
- buf.readonly = 0;
2009
- buf.ndim = 1;
2010
- buf.format = NULL;
2011
- buf.shape = shape;
2012
- buf.strides = NULL;
2013
- buf.suboffsets = NULL;
2014
- buf.smalltable[0] = (Py_ssize_t)sz;
2015
- buf.smalltable[1] = 1;
2016
- buf.internal = NULL;
2017
- PyObject* data = PyMemoryView_FromBuffer(&buf);
2018
- PyObject_CallObject(pSelf->_handler, Py_BuildValue("(OO)", data, (direction_ ? Py_True : Py_False)));
2019
- #endif
2020
- }
2021
- catch (...) { } // -V565 this is a C callback function, so exceptions must not bubble up.
2022
- processed += sz;
2023
- start = (unsigned char*)(start + sz);
2024
- }
2025
- if (processed < length)
2026
- {
2027
- pSelf->_remain = length - processed;
2028
- }
2029
- }
2030
- #endif
2031
-
2032
- static PyObject* set_transport_filter(obj* self, PyObject* args)
2033
- {
2034
- PyObject* filterCallback = NULL;
2035
- PyObject* modifiable = NULL;
2036
- if (!PyArg_ParseTuple(args, "O|O!", &filterCallback, &PyBool_Type, &modifiable))
2037
- {
2038
- return NULL;
2039
- }
2040
- if (filterCallback == Py_None)
2041
- {
2042
- // Note: set the filter back to NULL before losing a reference to it.
2043
- {
2044
- // seperate scopes due to CALL_AND_RETURN_ON_FAIL jump label reuse
2045
- CALL_AND_RETURN_ON_FAIL(((AMPS::Client*)(self->pClient))->setTransportFilterFunction(NULL, 0));
2046
- }
2047
- {
2048
- CALL_AND_RETURN_ON_FAIL(((AMPS::Client*)(self->pClient))->removeConnectionStateListener(self->transportFilter));
2049
- }
2050
- delete self->transportFilter;
2051
- }
2052
- else
2053
- {
2054
- if (!PyCallable_Check(filterCallback))
2055
- {
2056
- PyErr_SetString(PyExc_TypeError, "argument must be callable or None");
2057
- return NULL;
2058
- }
2059
-
2060
- TransportFilter* transportFilter = new TransportFilter(filterCallback);
2061
- #if PY_MAJOR_VERSION >= 3 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 7)
2062
- // Replace the filter that we will use before losing the reference to the old one.
2063
- if (modifiable && modifiable == Py_True)
2064
- {
2065
- if (self->transportFilter) // safe to attempt to erase a non-existant key, but not NULL
2066
- {
2067
- CALL_AND_RETURN_ON_FAIL(((AMPS::Client*)(self->pClient))->removeConnectionStateListener(self->transportFilter));
2068
- }
2069
- {
2070
- // seperate scopes due to CALL_AND_RETURN_ON_FAIL jump label reuse
2071
- CALL_AND_RETURN_ON_FAIL(((AMPS::Client*)(self->pClient))->addConnectionStateListener(transportFilter));
2072
- }
2073
- {
2074
- CALL_AND_RETURN_ON_FAIL(((AMPS::Client*)(self->pClient))->setTransportFilterFunction(TransportFilter::filterModifiable, transportFilter));
2075
- }
2076
- }
2077
- else
2078
- #endif
2079
- {
2080
- CALL_AND_RETURN_ON_FAIL(((AMPS::Client*)(self->pClient))->setTransportFilterFunction(TransportFilter::filter, transportFilter));
2081
- }
2082
- delete self->transportFilter;
2083
- self->transportFilter = transportFilter;
2084
- }
2085
- NONE;
2086
- }
2087
-
2088
- static amps_result thread_created_callback(AMPS_THREAD_T, void* void_callable_)
2089
- {
2090
- PyObject* callable = (PyObject*)void_callable_;
2091
- try
2092
- {
2093
- LOCKGIL;
2094
- PyObject_CallObject(callable, NULL);
2095
- return AMPS_E_OK;
2096
- }
2097
- catch (...)
2098
- {
2099
- // this is a C callback function, so exceptions must not bubble up.
2100
- return AMPS_E_RETRY;
2101
- }
2102
- }
2103
-
2104
- static PyObject* set_thread_created_callback(obj* self, PyObject* args)
2105
- {
2106
- PyObject* threadCreatedCallback = NULL;
2107
- if (!PyArg_ParseTuple(args, "O", &threadCreatedCallback))
2108
- {
2109
- return NULL;
2110
- }
2111
- if (threadCreatedCallback == Py_None)
2112
- {
2113
- // Note: set the filter back to NULL before losing a reference to it.
2114
- CALL_AND_RETURN_ON_FAIL(((AMPS::Client*)(self->pClient))->setThreadCreatedCallback(NULL, 0));
2115
- Py_XDECREF(self->threadCreatedCallback);
2116
- }
2117
- else
2118
- {
2119
- if (!PyCallable_Check(threadCreatedCallback))
2120
- {
2121
- PyErr_SetString(PyExc_TypeError, "argument must be callable or None");
2122
- return NULL;
2123
- }
2124
-
2125
- // Replace the filter that we will use before losing the reference to the old one.
2126
- CALL_AND_RETURN_ON_FAIL(((AMPS::Client*)(self->pClient))->setThreadCreatedCallback(thread_created_callback, threadCreatedCallback));
2127
- Py_XDECREF(self->threadCreatedCallback);
2128
- self->threadCreatedCallback = threadCreatedCallback;
2129
- Py_INCREF(self->threadCreatedCallback);
2130
- }
2131
- NONE;
2132
- }
2133
-
2134
-
2135
- static PyObject* ack(obj* self, PyObject* args)
2136
- {
2137
- char* topic = NULL;
2138
- char* bookmark = NULL;
2139
- char* options = NULL;
2140
- char* opts = NULL;
2141
- Py_ssize_t topicLen = 0;
2142
- Py_ssize_t bookmarkLen = 0;
2143
- PyObject* message = NULL;
2144
-
2145
- if (PyArg_ParseTuple(args, "O|s", &message, &options) && message->ob_type == message::message_type.pPyTypeObject())
2146
- {
2147
- AMPS::Message* pMessage = ((ampspy::message::obj*)message)->pMessage;
2148
- if (pMessage)
2149
- {
2150
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->ack(*pMessage, options));
2151
- }
2152
- PyErr_SetString(PyExc_TypeError, "This Message is not acknowledgeable.");
2153
- return NULL;
2154
- }
2155
- else if (PyArg_ParseTuple(args, "s#s#|s", &topic, &topicLen, &bookmark, &bookmarkLen, &opts))
2156
- {
2157
- Message::Field topicField(topic, topicLen);
2158
- Message::Field bookmarkField(bookmark, bookmarkLen);
2159
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->ack(topicField, bookmarkField, opts));
2160
- }
2161
- else
2162
- {
2163
- PyErr_SetString(PyExc_TypeError, "argument must be AMPS.Message or topic and bookmark string.");
2164
- return NULL;
2165
- }
2166
-
2167
- }
2168
-
2169
- static PyObject* set_auto_ack(obj* self, PyObject* args)
2170
- {
2171
- PyObject* value = NULL;
2172
- if (!PyArg_ParseTuple(args, "O!", &PyBool_Type, &value))
2173
- {
2174
- return NULL;
2175
- }
2176
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setAutoAck(value == Py_True));
2177
- }
2178
-
2179
- static PyObject* get_auto_ack(obj* self, PyObject* args)
2180
- {
2181
- CALL_RETURN_BOOL(((AMPS::Client*)(self->pClient))->getAutoAck());
2182
- }
2183
-
2184
- static PyObject* set_ack_timeout(obj* self, PyObject* args)
2185
- {
2186
- unsigned long value = 0;
2187
- if (!PyArg_ParseTuple(args, "k", &value))
2188
- {
2189
- return NULL;
2190
- }
2191
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setAckTimeout(value));
2192
- }
2193
-
2194
- static PyObject* get_ack_timeout(obj* self, PyObject* args)
2195
- {
2196
- CALL_RETURN_SIZE_T(((AMPS::Client*)(self->pClient))->getAckTimeout());
2197
- }
2198
-
2199
- static PyObject* set_retry_on_disconnect(obj* self, PyObject* args)
2200
- {
2201
- PyObject* value = NULL;
2202
- if (!PyArg_ParseTuple(args, "O!", &PyBool_Type, &value))
2203
- {
2204
- return NULL;
2205
- }
2206
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setRetryOnDisconnect(value == Py_True));
2207
- }
2208
-
2209
- static PyObject* get_retry_on_disconnect(obj* self, PyObject* args)
2210
- {
2211
- CALL_RETURN_BOOL(((AMPS::Client*)(self->pClient))->getRetryOnDisconnect());
2212
- }
2213
-
2214
- static PyObject* set_ack_batch_size(obj* self, PyObject* args)
2215
- {
2216
- unsigned long value = 0;
2217
- if (!PyArg_ParseTuple(args, "k", &value))
2218
- {
2219
- return NULL;
2220
- }
2221
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setAckBatchSize(value));
2222
- }
2223
-
2224
- static PyObject* get_ack_batch_size(obj* self, PyObject* args)
2225
- {
2226
- CALL_RETURN_SIZE_T(((AMPS::Client*)(self->pClient))->getAckBatchSize());
2227
- }
2228
-
2229
- static PyObject* set_default_max_depth(obj* self, PyObject* args)
2230
- {
2231
- unsigned long value = 0;
2232
- if (!PyArg_ParseTuple(args, "k", &value))
2233
- {
2234
- return NULL;
2235
- }
2236
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setDefaultMaxDepth((unsigned)value));
2237
- }
2238
-
2239
- static PyObject* get_default_max_depth(obj* self, PyObject* args)
2240
- {
2241
- CALL_RETURN_SIZE_T(((AMPS::Client*)(self->pClient))->getDefaultMaxDepth());
2242
- }
2243
-
2244
- // def set_global_command_type_message_handler(self, command, message_handler)
2245
- static PyObject* set_global_command_type_message_handler(obj* self, PyObject* args, PyObject* kw)
2246
- {
2247
- static const char* kwlist[] = { "command", "message_handler", NULL};
2248
- const char* cmd = NULL;
2249
- PyObject* handler = NULL;
2250
- if (!PyArg_ParseTupleAndKeywords(args, kw, "sO", (char**)kwlist, &cmd, &handler))
2251
- {
2252
- return NULL;
2253
- }
2254
- AMPS::MessageHandler msgHandler = createMessageHandler(self, handler);
2255
- CALL_RETURN_NONE(((AMPS::Client*)(self->pClient))->setGlobalCommandTypeMessageHandler(cmd,
2256
- msgHandler));
2257
- }
2258
-
2259
- ///
2260
- /// This method is used by python internals for garbage collection.
2261
- ///
2262
- static int
2263
- traverse(obj* self, visitproc visit, void* arg)
2264
- {
2265
- if (self->disconnectHandler)
2266
- {
2267
- Py_VISIT(self->disconnectHandler); //-V547
2268
- }
2269
- if (self->exceptionHandler)
2270
- {
2271
- volatile PyObject* callable = ((PyExceptionListener*)(self->exceptionHandler.get()))->callable();
2272
- if (callable)
2273
- {
2274
- Py_VISIT(callable);
2275
- }
2276
- }
2277
- if (self->transportFilter)
2278
- {
2279
- Py_VISIT(self->transportFilter->getHandler()); //-V547
2280
- }
2281
- if (self->threadCreatedCallback)
2282
- {
2283
- Py_VISIT(self->threadCreatedCallback); // -V547
2284
- }
2285
-
2286
- {
2287
- AMPS::Lock<SimpleMutex> l(_createdHandlersLock);
2288
- if ((callback_infos*)self->callbackInfos)
2289
- {
2290
- for (callback_infos::iterator i = ((callback_infos*)self->callbackInfos)->begin(),
2291
- e = ((callback_infos*)self->callbackInfos)->end();
2292
- i != e; ++i)
2293
- {
2294
- PyObject* handler = (*i)->getHandler();
2295
- Py_VISIT(handler);
2296
- }
2297
- }
2298
- }
2299
- if ((connection_state_listeners*)self->connectionStateListeners)
2300
- {
2301
- typedef connection_state_listeners::iterator conn_state_itr;
2302
- for (conn_state_itr i = ((connection_state_listeners*)self->connectionStateListeners)->begin(),
2303
- e = ((connection_state_listeners*)self->connectionStateListeners)->end();
2304
- i != e; ++i)
2305
- {
2306
- Py_VISIT(i->first);
2307
- }
2308
- }
2309
- return 0;
2310
- }
2311
-
2312
- static PyObject* get_as_parameter(obj* self, PyObject* args)
2313
- {
2314
- return PyLong_FromVoidPtr(self->pClient);
2315
- }
2316
-
2317
- static ampspy::ampspy_type_object bookmarks_type;
2318
-
2319
- void add_types(PyObject* module_)
2320
- {
2321
- connection_state_listener::add_types();
2322
- bookmarks_type.setName("Bookmarks")
2323
- .setDoc(bookmark_class_doc)
2324
- .createType()
2325
- .addStatic("EPOCH", PyString_FromString("0"))
2326
- .addStatic("MOST_RECENT", PyString_FromString("recent"))
2327
- .addStatic("NOW", PyString_FromString("0|1|"));
2328
-
2329
- client_type.setName("AMPS.Client")
2330
- .setBasicSize(sizeof(obj))
2331
- .setBaseType()
2332
- .setDoc(client_class_doc)
2333
- .setConstructorFunction((void*)_ctor)
2334
- .setDestructorFunction((void*)destructor)
2335
- .setHaveGC()
2336
- .setTraverseFunction((void*)traverse)
2337
- .setClearFunction((void*)_clear)
2338
- .setWeakListOffset(sizeof(PyObject))
2339
- .notCopyable()
2340
- .addMethod("connect", connect, connect_doc)
2341
- .addKeywordMethod("logon", logon, logon_doc)
2342
- .addMethod("execute", execute, execute_doc)
2343
- .addKeywordMethod("execute_async", execute_async, execute_async_doc)
2344
- .addMethod("name", getName, name_doc)
2345
- .addMethod("getName", getName, getName_doc)
2346
- .addMethod("get_name", getName, get_name_doc)
2347
- .addMethod("get_name_hash", get_name_hash, get_name_hash_doc)
2348
- .addMethod("get_name_hash_value", get_name_hash_value, get_name_hash_value_doc)
2349
- .addMethod("setName", setName, setName_doc)
2350
- .addMethod("set_name", setName, set_name_doc)
2351
- .addMethod("get_logon_correlation_data", get_logon_correlation_data, get_logon_correlation_data_doc)
2352
- .addMethod("set_logon_correlation_data", set_logon_correlation_data, set_logon_correlation_data_doc)
2353
- .addMethod("get_server_version", get_server_version, get_server_version_doc)
2354
- .addMethod("get_server_version_info", get_server_version_info, get_server_version_info_doc)
2355
- .addMethod("convert_version_to_number", convert_version_to_number, convert_version_to_number_doc)
2356
- .addMethod("get_unpersisted_count", get_unpersisted_count, get_unpersisted_count_doc)
2357
- .addKeywordMethod("get_uri", getURI, get_uri_doc)
2358
- .addMethod("disconnect", disconnect, disconnect_doc)
2359
- .addMethod("close", disconnect, close_doc)
2360
- .addKeywordMethod("publish", publish, publish_doc)
2361
- .addKeywordMethod("delta_publish", delta_publish, delta_publish_doc)
2362
- .addKeywordMethod("deltaPublish", delta_publish, deltaPublish_doc)
2363
- .addMethod("unsubscribe", unsubscribe, unsubscribe_doc)
2364
- .addKeywordMethod("send", send, send_doc)
2365
- .addKeywordMethod("add_message_handler", add_message_handler, add_message_handler_doc)
2366
- .addMethod("remove_message_handler", remove_message_handler, remove_message_handler_doc)
2367
- .addMethod("allocate_message", allocate_message, allocate_message_doc)
2368
- .addMethod("allocateMessage", allocate_message, allocateMessage_doc)
2369
- .addKeywordMethod("subscribe", subscribe, subscribe_doc)
2370
- .addKeywordMethod("bookmark_subscribe", bookmark_subscribe, bookmark_subscribe_doc)
2371
- .addKeywordMethod("sow", sow, sow_doc)
2372
- .addKeywordMethod("sow_and_subscribe", sow_and_subscribe, sow_and_subscribe_doc)
2373
- .addKeywordMethod("sowAndSubscribe", sow_and_subscribe, sowAndSubscribe_doc )
2374
- .addKeywordMethod("sow_and_delta_subscribe", sow_and_delta_subscribe, sow_and_delta_subscribe_doc)
2375
- .addKeywordMethod("sowAndDeltaSubscribe", sow_and_delta_subscribe, sowAndDeltaSubscribe_doc )
2376
- .addKeywordMethod("sow_delete", sow_delete, sow_delete_doc)
2377
- .addKeywordMethod("sowDelete", sow_delete, sowDelete_doc )
2378
- .addKeywordMethod("sow_delete_by_keys", sow_delete_by_keys, sow_delete_by_keys_doc)
2379
- .addKeywordMethod("sow_delete_by_data", sow_delete_by_data, sow_delete_by_data_doc)
2380
- .addKeywordMethod("delta_subscribe", delta_subscribe, delta_subscribe_doc)
2381
- .addKeywordMethod("deltaSubscribe", delta_subscribe, deltaSubscribe_doc )
2382
- .addKeywordMethod("bookmark_subscribe", bookmark_subscribe, bookmark_subscribe_doc)
2383
- .addKeywordMethod("set_heartbeat", set_heartbeat, set_heartbeat_doc)
2384
- .addMethod("start_timer", start_timer, start_timer_doc)
2385
- .addMethod("stop_timer", stop_timer, stop_timer_doc)
2386
- .addMethod("set_disconnect_handler", set_disconnect_handler, set_disconnect_handler_doc)
2387
- .addMethod("setOnDisconnectHandler", set_disconnect_handler, setOnDisconnectHandler_doc )
2388
- .addMethod("setDisconnectHandler", set_disconnect_handler, setDisconnectHandler_doc )
2389
- .addMethod("set_exception_listener", set_exception_listener, set_exception_listener_doc)
2390
- .addMethod("setExceptionListener", set_exception_listener, setExceptionListener_doc )
2391
- .addMethod("get_exception_listener", get_exception_listener, get_exception_listener_doc)
2392
- .addMethod("set_last_chance_message_handler", set_last_chance_message_handler, set_last_chance_message_handler_doc )
2393
- .addMethod("set_unhandled_message_handler", set_last_chance_message_handler, set_unhandled_message_handler_doc )
2394
- .addMethod("setUnhandledMessageHandler", set_last_chance_message_handler, setUnhandledMessageHandler_doc )
2395
- .addMethod("set_duplicate_message_handler", set_duplicate_message_handler, set_duplicate_message_handler_doc)
2396
- .addMethod("get_duplicate_message_handler", get_duplicate_message_handler, get_duplicate_message_handler_doc)
2397
- .addKeywordMethod("publish_flush", publish_flush, publish_flush_doc)
2398
- .addKeywordMethod("flush", publish_flush, flush_doc )
2399
- .addMethod("set_bookmark_store", set_bookmark_store, set_bookmark_store_doc)
2400
- .addMethod("set_publish_store", set_publish_store, set_publish_store_doc)
2401
- .addMethod("set_failed_write_handler", set_failed_write_handler, set_failed_write_handler_doc)
2402
- .addMethod("add_connection_state_listener", add_connection_state_listener, add_connection_state_listener_doc)
2403
- .addMethod("remove_connection_state_listener", remove_connection_state_listener, remove_connection_state_listener_doc)
2404
- .addMethod("set_transport_filter", set_transport_filter, set_transport_filter_doc)
2405
- .addMethod("set_thread_created_callback", set_thread_created_callback, set_thread_created_callback_doc)
2406
- .addMethod("ack", ack, ack_doc)
2407
- .addMethod("set_ack_batch_size", set_ack_batch_size, set_ack_batch_size_doc)
2408
- .addMethod("get_ack_batch_size", get_ack_batch_size, get_ack_batch_size_doc)
2409
- .addMethod("set_auto_ack", set_auto_ack, set_auto_ack_doc)
2410
- .addMethod("get_auto_ack", get_auto_ack, get_auto_ack_doc)
2411
- .addMethod("set_ack_timeout", set_ack_timeout, set_ack_timeout_doc)
2412
- .addMethod("get_ack_timeout", get_ack_timeout, get_ack_timeout_doc)
2413
- .addMethod("set_retry_on_disconnect", set_retry_on_disconnect, set_retry_on_disconnect_doc)
2414
- .addMethod("get_retry_on_disconnect", get_retry_on_disconnect, get_retry_on_disconnect_doc)
2415
- .addMethod("set_default_max_depth", set_default_max_depth, set_default_max_depth_doc)
2416
- .addMethod("get_default_max_depth", get_default_max_depth, get_default_max_depth_doc)
2417
- .addMethod("set_error_on_publish_gap", set_error_on_publish_gap, set_error_on_publish_gap_doc)
2418
- .addMethod("get_error_on_publish_gap", get_error_on_publish_gap, get_error_on_publish_gap_doc)
2419
- .addKeywordMethod("set_global_command_type_message_handler", set_global_command_type_message_handler,
2420
- set_global_command_type_message_handler_doc)
2421
- .addGetter("_as_parameter_", (void*)get_as_parameter,
2422
- "Underlying Client pointer for use with foreign functions and the ctypes module.")
2423
- .createType()
2424
- .registerType("Client", module_)
2425
- .addStatic("Bookmarks", bookmarks_type)
2426
- .addStatic("ConnectionStateListener", connection_state_listener::connection_state_listener_type);
2427
- }
2428
-
2429
- } // namespace client
2430
- } // namespace ampspy