wxPython 4.3.2__cp315-cp315-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. wx/WebView2Loader.dll +0 -0
  2. wx/__init__.py +22 -0
  3. wx/__init__.pyi +10 -0
  4. wx/__version__.py +9 -0
  5. wx/__version__.pyi +15 -0
  6. wx/_adv.cp315-win_amd64.pyd +0 -0
  7. wx/_aui.cp315-win_amd64.pyd +0 -0
  8. wx/_core.cp315-win_amd64.pyd +0 -0
  9. wx/_dataview.cp315-win_amd64.pyd +0 -0
  10. wx/_glcanvas.cp315-win_amd64.pyd +0 -0
  11. wx/_grid.cp315-win_amd64.pyd +0 -0
  12. wx/_html.cp315-win_amd64.pyd +0 -0
  13. wx/_html2.cp315-win_amd64.pyd +0 -0
  14. wx/_media.cp315-win_amd64.pyd +0 -0
  15. wx/_msw.cp315-win_amd64.pyd +0 -0
  16. wx/_propgrid.cp315-win_amd64.pyd +0 -0
  17. wx/_ribbon.cp315-win_amd64.pyd +0 -0
  18. wx/_richtext.cp315-win_amd64.pyd +0 -0
  19. wx/_stc.cp315-win_amd64.pyd +0 -0
  20. wx/_xml.cp315-win_amd64.pyd +0 -0
  21. wx/_xrc.cp315-win_amd64.pyd +0 -0
  22. wx/adv.py +127 -0
  23. wx/adv.pyi +5931 -0
  24. wx/aui.py +70 -0
  25. wx/aui.pyi +4805 -0
  26. wx/core.py +3417 -0
  27. wx/core.pyi +62949 -0
  28. wx/dataview.py +176 -0
  29. wx/dataview.pyi +3828 -0
  30. wx/gizmos.py +18 -0
  31. wx/glcanvas.py +13 -0
  32. wx/glcanvas.pyi +544 -0
  33. wx/grid.py +237 -0
  34. wx/grid.pyi +5678 -0
  35. wx/html.py +38 -0
  36. wx/html.pyi +3283 -0
  37. wx/html2.py +46 -0
  38. wx/html2.pyi +1301 -0
  39. wx/include/wxPython/sip.h +1938 -0
  40. wx/include/wxPython/wxpy_api.h +418 -0
  41. wx/lib/CDate.py +201 -0
  42. wx/lib/ClickableHtmlWindow.py +57 -0
  43. wx/lib/__init__.py +0 -0
  44. wx/lib/activex.py +178 -0
  45. wx/lib/activexwrapper.py +153 -0
  46. wx/lib/agw/__init__.py +128 -0
  47. wx/lib/agw/advancedsplash.py +563 -0
  48. wx/lib/agw/aquabutton.py +1127 -0
  49. wx/lib/agw/artmanager.py +2110 -0
  50. wx/lib/agw/aui/__init__.py +295 -0
  51. wx/lib/agw/aui/aui_constants.py +2616 -0
  52. wx/lib/agw/aui/aui_switcherdialog.py +1232 -0
  53. wx/lib/agw/aui/aui_utilities.py +648 -0
  54. wx/lib/agw/aui/auibar.py +4045 -0
  55. wx/lib/agw/aui/auibook.py +6288 -0
  56. wx/lib/agw/aui/dockart.py +1198 -0
  57. wx/lib/agw/aui/framemanager.py +10485 -0
  58. wx/lib/agw/aui/tabart.py +2749 -0
  59. wx/lib/agw/aui/tabmdi.py +679 -0
  60. wx/lib/agw/balloontip.py +1157 -0
  61. wx/lib/agw/buttonpanel.py +2787 -0
  62. wx/lib/agw/cubecolourdialog.py +3529 -0
  63. wx/lib/agw/customtreectrl.py +9908 -0
  64. wx/lib/agw/data/ShortcutEditor_1.png +0 -0
  65. wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
  66. wx/lib/agw/data/ShortcutEditor_2.png +0 -0
  67. wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
  68. wx/lib/agw/data/ShortcutEditor_3.png +0 -0
  69. wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
  70. wx/lib/agw/data/ShortcutEditor_4.png +0 -0
  71. wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
  72. wx/lib/agw/data/default_help_text.html +105 -0
  73. wx/lib/agw/flatmenu.py +7392 -0
  74. wx/lib/agw/flatnotebook.py +6669 -0
  75. wx/lib/agw/floatspin.py +1820 -0
  76. wx/lib/agw/fmcustomizedlg.py +535 -0
  77. wx/lib/agw/fmresources.py +407 -0
  78. wx/lib/agw/foldpanelbar.py +2282 -0
  79. wx/lib/agw/fourwaysplitter.py +1130 -0
  80. wx/lib/agw/genericmessagedialog.py +1549 -0
  81. wx/lib/agw/gradientbutton.py +731 -0
  82. wx/lib/agw/hyperlink.py +664 -0
  83. wx/lib/agw/hypertreelist.py +5756 -0
  84. wx/lib/agw/infobar.py +885 -0
  85. wx/lib/agw/knobctrl.py +944 -0
  86. wx/lib/agw/labelbook.py +3028 -0
  87. wx/lib/agw/multidirdialog.py +581 -0
  88. wx/lib/agw/peakmeter.py +1028 -0
  89. wx/lib/agw/persist/__init__.py +188 -0
  90. wx/lib/agw/persist/persist_constants.py +283 -0
  91. wx/lib/agw/persist/persist_handlers.py +2614 -0
  92. wx/lib/agw/persist/persistencemanager.py +863 -0
  93. wx/lib/agw/piectrl.py +1082 -0
  94. wx/lib/agw/pybusyinfo.py +399 -0
  95. wx/lib/agw/pycollapsiblepane.py +940 -0
  96. wx/lib/agw/pygauge.py +570 -0
  97. wx/lib/agw/pyprogress.py +916 -0
  98. wx/lib/agw/ribbon/__init__.py +198 -0
  99. wx/lib/agw/ribbon/art.py +219 -0
  100. wx/lib/agw/ribbon/art_aui.py +1283 -0
  101. wx/lib/agw/ribbon/art_default.py +81 -0
  102. wx/lib/agw/ribbon/art_internal.py +248 -0
  103. wx/lib/agw/ribbon/art_msw.py +2735 -0
  104. wx/lib/agw/ribbon/art_osx.py +52 -0
  105. wx/lib/agw/ribbon/bar.py +1259 -0
  106. wx/lib/agw/ribbon/buttonbar.py +1317 -0
  107. wx/lib/agw/ribbon/control.py +205 -0
  108. wx/lib/agw/ribbon/gallery.py +973 -0
  109. wx/lib/agw/ribbon/page.py +946 -0
  110. wx/lib/agw/ribbon/panel.py +1170 -0
  111. wx/lib/agw/ribbon/toolbar.py +1441 -0
  112. wx/lib/agw/rulerctrl.py +1885 -0
  113. wx/lib/agw/scrolledthumbnail.py +2116 -0
  114. wx/lib/agw/shapedbutton.py +1809 -0
  115. wx/lib/agw/shortcuteditor.py +2642 -0
  116. wx/lib/agw/speedmeter.py +1800 -0
  117. wx/lib/agw/supertooltip.py +1443 -0
  118. wx/lib/agw/thumbnailctrl.py +529 -0
  119. wx/lib/agw/toasterbox.py +1327 -0
  120. wx/lib/agw/ultimatelistctrl.py +13671 -0
  121. wx/lib/agw/xlsgrid.py +2111 -0
  122. wx/lib/agw/zoombar.py +1336 -0
  123. wx/lib/analogclock/__init__.py +140 -0
  124. wx/lib/analogclock/analogclock.py +630 -0
  125. wx/lib/analogclock/helpers.py +986 -0
  126. wx/lib/analogclock/lib_setup/__init__.py +0 -0
  127. wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
  128. wx/lib/analogclock/lib_setup/fontselect.py +57 -0
  129. wx/lib/analogclock/setup.py +490 -0
  130. wx/lib/analogclock/styles.py +47 -0
  131. wx/lib/anchors.py +103 -0
  132. wx/lib/art/__init__.py +4 -0
  133. wx/lib/art/flagart.py +1583 -0
  134. wx/lib/art/img2pyartprov.py +56 -0
  135. wx/lib/busy.py +152 -0
  136. wx/lib/buttons.py +1140 -0
  137. wx/lib/calendar.py +1596 -0
  138. wx/lib/checkbox.py +837 -0
  139. wx/lib/colourchooser/__init__.py +36 -0
  140. wx/lib/colourchooser/canvas.py +145 -0
  141. wx/lib/colourchooser/intl.py +24 -0
  142. wx/lib/colourchooser/pycolourbox.py +89 -0
  143. wx/lib/colourchooser/pycolourchooser.py +626 -0
  144. wx/lib/colourchooser/pycolourslider.py +98 -0
  145. wx/lib/colourchooser/pypalette.py +208 -0
  146. wx/lib/colourdb.py +740 -0
  147. wx/lib/colourselect.py +385 -0
  148. wx/lib/colourutils.py +118 -0
  149. wx/lib/combotreebox.py +944 -0
  150. wx/lib/delayedresult.py +420 -0
  151. wx/lib/dialogs.py +510 -0
  152. wx/lib/docview.py +3210 -0
  153. wx/lib/dragscroller.py +79 -0
  154. wx/lib/editor/README.txt +77 -0
  155. wx/lib/editor/__init__.py +24 -0
  156. wx/lib/editor/editor.py +974 -0
  157. wx/lib/editor/images.py +15 -0
  158. wx/lib/editor/selection.py +44 -0
  159. wx/lib/embeddedimage.py +76 -0
  160. wx/lib/eventStack.py +136 -0
  161. wx/lib/eventwatcher.py +440 -0
  162. wx/lib/evtmgr.py +521 -0
  163. wx/lib/expando.py +393 -0
  164. wx/lib/fancytext.py +494 -0
  165. wx/lib/filebrowsebutton.py +461 -0
  166. wx/lib/flashwin.py +262 -0
  167. wx/lib/flashwin_old.py +651 -0
  168. wx/lib/floatcanvas/FCEvents.py +53 -0
  169. wx/lib/floatcanvas/FCObjects.py +2910 -0
  170. wx/lib/floatcanvas/FloatCanvas.py +1025 -0
  171. wx/lib/floatcanvas/GUIMode.py +396 -0
  172. wx/lib/floatcanvas/NavCanvas.py +162 -0
  173. wx/lib/floatcanvas/Resources.py +319 -0
  174. wx/lib/floatcanvas/ScreenShot.py +1788 -0
  175. wx/lib/floatcanvas/Utilities/BBox.py +313 -0
  176. wx/lib/floatcanvas/Utilities/Colors.py +137 -0
  177. wx/lib/floatcanvas/Utilities/GUI.py +91 -0
  178. wx/lib/floatcanvas/Utilities/__init__.py +7 -0
  179. wx/lib/floatcanvas/__init__.py +124 -0
  180. wx/lib/foldmenu.py +89 -0
  181. wx/lib/gestures.py +310 -0
  182. wx/lib/gizmos/__init__.py +18 -0
  183. wx/lib/gizmos/dynamicsash.py +1202 -0
  184. wx/lib/gizmos/ledctrl.py +299 -0
  185. wx/lib/gizmos/treelistctrl.py +87 -0
  186. wx/lib/graphics.py +1942 -0
  187. wx/lib/gridmovers.py +516 -0
  188. wx/lib/iewin.py +249 -0
  189. wx/lib/iewin_old.py +894 -0
  190. wx/lib/imagebrowser.py +853 -0
  191. wx/lib/imageutils.py +163 -0
  192. wx/lib/infoframe.py +490 -0
  193. wx/lib/inspection.py +1254 -0
  194. wx/lib/intctrl.py +990 -0
  195. wx/lib/itemspicker.py +256 -0
  196. wx/lib/langlistctrl.py +480 -0
  197. wx/lib/layoutf.py +271 -0
  198. wx/lib/masked/__init__.py +27 -0
  199. wx/lib/masked/combobox.py +839 -0
  200. wx/lib/masked/ctrl.py +108 -0
  201. wx/lib/masked/ipaddrctrl.py +241 -0
  202. wx/lib/masked/maskededit.py +7262 -0
  203. wx/lib/masked/numctrl.py +2000 -0
  204. wx/lib/masked/textctrl.py +465 -0
  205. wx/lib/masked/timectrl.py +1465 -0
  206. wx/lib/mixins/__init__.py +17 -0
  207. wx/lib/mixins/grid.py +47 -0
  208. wx/lib/mixins/gridlabelrenderer.py +277 -0
  209. wx/lib/mixins/imagelist.py +77 -0
  210. wx/lib/mixins/inspection.py +184 -0
  211. wx/lib/mixins/listctrl.py +893 -0
  212. wx/lib/mixins/rubberband.py +403 -0
  213. wx/lib/mixins/treemixin.py +678 -0
  214. wx/lib/msgpanel.py +95 -0
  215. wx/lib/multisash.py +746 -0
  216. wx/lib/myole4ax.idl +178 -0
  217. wx/lib/myole4ax.tlb +0 -0
  218. wx/lib/newevent.py +229 -0
  219. wx/lib/newevent.pyi +25 -0
  220. wx/lib/nvdlg.py +156 -0
  221. wx/lib/ogl/__init__.py +13 -0
  222. wx/lib/ogl/basic.py +3989 -0
  223. wx/lib/ogl/bmpshape.py +86 -0
  224. wx/lib/ogl/canvas.py +467 -0
  225. wx/lib/ogl/composit.py +1576 -0
  226. wx/lib/ogl/diagram.py +230 -0
  227. wx/lib/ogl/divided.py +482 -0
  228. wx/lib/ogl/drawn.py +898 -0
  229. wx/lib/ogl/lines.py +1809 -0
  230. wx/lib/ogl/oglmisc.py +607 -0
  231. wx/lib/pdfviewer/__init__.py +113 -0
  232. wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
  233. wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
  234. wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
  235. wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
  236. wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
  237. wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
  238. wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
  239. wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
  240. wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
  241. wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
  242. wx/lib/pdfviewer/bitmaps/Save.png +0 -0
  243. wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
  244. wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
  245. wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
  246. wx/lib/pdfviewer/buttonpanel.py +285 -0
  247. wx/lib/pdfviewer/images.py +240 -0
  248. wx/lib/pdfviewer/viewer.py +1118 -0
  249. wx/lib/pdfwin.py +295 -0
  250. wx/lib/pdfwin_old.py +789 -0
  251. wx/lib/platebtn.py +789 -0
  252. wx/lib/plot/CHANGELOG.md +150 -0
  253. wx/lib/plot/README.md +16 -0
  254. wx/lib/plot/__init__.py +46 -0
  255. wx/lib/plot/__main__.py +5 -0
  256. wx/lib/plot/examples/__init__.py +0 -0
  257. wx/lib/plot/examples/demo.py +1010 -0
  258. wx/lib/plot/examples/simple_example.py +56 -0
  259. wx/lib/plot/plotcanvas.py +2985 -0
  260. wx/lib/plot/polyobjects.py +1524 -0
  261. wx/lib/plot/utils.py +334 -0
  262. wx/lib/popupctl.py +251 -0
  263. wx/lib/printout.py +1155 -0
  264. wx/lib/progressindicator.py +151 -0
  265. wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
  266. wx/lib/pubsub/README_WxPython.txt +22 -0
  267. wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
  268. wx/lib/pubsub/__init__.py +25 -0
  269. wx/lib/pubsub/core/__init__.py +92 -0
  270. wx/lib/pubsub/core/arg1/__init__.py +16 -0
  271. wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
  272. wx/lib/pubsub/core/arg1/publisher.py +40 -0
  273. wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
  274. wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
  275. wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
  276. wx/lib/pubsub/core/callables.py +198 -0
  277. wx/lib/pubsub/core/imp2.py +62 -0
  278. wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
  279. wx/lib/pubsub/core/kwargs/__init__.py +16 -0
  280. wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
  281. wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
  282. wx/lib/pubsub/core/kwargs/publisher.py +77 -0
  283. wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
  284. wx/lib/pubsub/core/kwargs/topicargspecimpl.py +216 -0
  285. wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
  286. wx/lib/pubsub/core/listener.py +40 -0
  287. wx/lib/pubsub/core/listenerbase.py +185 -0
  288. wx/lib/pubsub/core/notificationmgr.py +185 -0
  289. wx/lib/pubsub/core/publisherbase.py +189 -0
  290. wx/lib/pubsub/core/topicargspec.py +77 -0
  291. wx/lib/pubsub/core/topicdefnprovider.py +631 -0
  292. wx/lib/pubsub/core/topicexc.py +72 -0
  293. wx/lib/pubsub/core/topicmgr.py +454 -0
  294. wx/lib/pubsub/core/topicobj.py +472 -0
  295. wx/lib/pubsub/core/topictreetraverser.py +143 -0
  296. wx/lib/pubsub/core/topicutils.py +119 -0
  297. wx/lib/pubsub/core/treeconfig.py +21 -0
  298. wx/lib/pubsub/core/validatedefnargs.py +29 -0
  299. wx/lib/pubsub/core/weakmethod.py +102 -0
  300. wx/lib/pubsub/policies.py +24 -0
  301. wx/lib/pubsub/pub.py +199 -0
  302. wx/lib/pubsub/setuparg1.py +47 -0
  303. wx/lib/pubsub/setupkwargs.py +29 -0
  304. wx/lib/pubsub/utils/__init__.py +27 -0
  305. wx/lib/pubsub/utils/exchandling.py +100 -0
  306. wx/lib/pubsub/utils/misc.py +99 -0
  307. wx/lib/pubsub/utils/notification.py +331 -0
  308. wx/lib/pubsub/utils/topictreeprinter.py +195 -0
  309. wx/lib/pubsub/utils/xmltopicdefnprovider.py +286 -0
  310. wx/lib/pydocview.py +3300 -0
  311. wx/lib/rcsizer.py +227 -0
  312. wx/lib/resizewidget.py +357 -0
  313. wx/lib/scrolledpanel.py +243 -0
  314. wx/lib/sheet.py +350 -0
  315. wx/lib/sized_controls.py +691 -0
  316. wx/lib/softwareupdate.py +355 -0
  317. wx/lib/splitter.py +925 -0
  318. wx/lib/statbmp.py +199 -0
  319. wx/lib/stattext.py +321 -0
  320. wx/lib/throbber.py +424 -0
  321. wx/lib/ticker.py +306 -0
  322. wx/lib/ticker_xrc.py +48 -0
  323. wx/lib/utils.py +89 -0
  324. wx/lib/wordwrap.py +97 -0
  325. wx/lib/wxcairo/__init__.py +139 -0
  326. wx/lib/wxcairo/wx_cairocffi.py +200 -0
  327. wx/lib/wxcairo/wx_pycairo.py +455 -0
  328. wx/lib/wxpTag.py +274 -0
  329. wx/libcairo-2.dll +0 -0
  330. wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
  331. wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
  332. wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
  333. wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
  334. wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
  335. wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
  336. wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
  337. wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
  338. wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
  339. wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
  340. wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
  341. wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
  342. wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
  343. wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
  344. wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
  345. wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
  346. wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
  347. wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
  348. wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
  349. wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
  350. wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
  351. wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
  352. wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
  353. wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
  354. wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
  355. wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
  356. wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
  357. wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
  358. wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
  359. wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
  360. wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
  361. wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
  362. wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
  363. wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
  364. wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
  365. wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
  366. wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
  367. wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
  368. wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
  369. wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
  370. wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
  371. wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
  372. wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
  373. wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
  374. wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
  375. wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
  376. wx/media.py +30 -0
  377. wx/media.pyi +272 -0
  378. wx/msw.py +16 -0
  379. wx/msw.pyi +91 -0
  380. wx/propgrid.py +498 -0
  381. wx/propgrid.pyi +7427 -0
  382. wx/py/CHANGES.txt +796 -0
  383. wx/py/Py.ico +0 -0
  384. wx/py/PyAlaCarte.py +34 -0
  385. wx/py/PyAlaMode.py +34 -0
  386. wx/py/PyAlaModeTest.py +33 -0
  387. wx/py/PyCrust.ico +0 -0
  388. wx/py/PyCrust.py +78 -0
  389. wx/py/PyCrust_16.png +0 -0
  390. wx/py/PyCrust_32.png +0 -0
  391. wx/py/PyFilling.py +35 -0
  392. wx/py/PyShell.py +78 -0
  393. wx/py/PySlices.ico +0 -0
  394. wx/py/PySlices.py +98 -0
  395. wx/py/PySlicesShell.py +94 -0
  396. wx/py/PySlices_16.png +0 -0
  397. wx/py/PySlices_32.png +0 -0
  398. wx/py/PyWrap.py +52 -0
  399. wx/py/README.txt +77 -0
  400. wx/py/__init__.py +20 -0
  401. wx/py/buffer.py +136 -0
  402. wx/py/crust.py +403 -0
  403. wx/py/crustslices.py +403 -0
  404. wx/py/dispatcher.py +259 -0
  405. wx/py/document.py +37 -0
  406. wx/py/editor.py +844 -0
  407. wx/py/editwindow.py +316 -0
  408. wx/py/filling.py +358 -0
  409. wx/py/frame.py +976 -0
  410. wx/py/images.py +212 -0
  411. wx/py/interpreter.py +161 -0
  412. wx/py/introspect.py +402 -0
  413. wx/py/magic.py +98 -0
  414. wx/py/parse.py +134 -0
  415. wx/py/path.py +36 -0
  416. wx/py/pseudo.py +99 -0
  417. wx/py/shell.py +1579 -0
  418. wx/py/sliceshell.py +3805 -0
  419. wx/py/tests/test_interpreter.py +71 -0
  420. wx/py/tests/test_introspect.py +810 -0
  421. wx/py/tests/test_pseudo.py +70 -0
  422. wx/py/tests/test_version.py +36 -0
  423. wx/py/tests/testall.py +22 -0
  424. wx/py/version.py +7 -0
  425. wx/py.typed +0 -0
  426. wx/ribbon.py +48 -0
  427. wx/ribbon.pyi +3099 -0
  428. wx/richtext.py +141 -0
  429. wx/richtext.pyi +13581 -0
  430. wx/siplib.cp315-win_amd64.pyd +0 -0
  431. wx/siplib.pyi +19 -0
  432. wx/stc.py +59 -0
  433. wx/stc.pyi +9918 -0
  434. wx/svg/__init__.py +363 -0
  435. wx/svg/_nanosvg.cp315-win_amd64.pyd +0 -0
  436. wx/tools/__init__.py +18 -0
  437. wx/tools/dbg.py +268 -0
  438. wx/tools/genaxmodule.py +50 -0
  439. wx/tools/helpviewer.py +92 -0
  440. wx/tools/img2img.py +85 -0
  441. wx/tools/img2png.py +54 -0
  442. wx/tools/img2py.py +306 -0
  443. wx/tools/img2xpm.py +54 -0
  444. wx/tools/pywxrc.py +951 -0
  445. wx/tools/wxget.py +254 -0
  446. wx/tools/wxget_docs_demo.py +183 -0
  447. wx/wxbase334u_net_vc140_x64.dll +0 -0
  448. wx/wxbase334u_vc140_x64.dll +0 -0
  449. wx/wxbase334u_xml_vc140_x64.dll +0 -0
  450. wx/wxmsw334u_adv_vc140_x64.dll +0 -0
  451. wx/wxmsw334u_aui_vc140_x64.dll +0 -0
  452. wx/wxmsw334u_core_vc140_x64.dll +0 -0
  453. wx/wxmsw334u_gl_vc140_x64.dll +0 -0
  454. wx/wxmsw334u_html_vc140_x64.dll +0 -0
  455. wx/wxmsw334u_media_vc140_x64.dll +0 -0
  456. wx/wxmsw334u_propgrid_vc140_x64.dll +0 -0
  457. wx/wxmsw334u_qa_vc140_x64.dll +0 -0
  458. wx/wxmsw334u_ribbon_vc140_x64.dll +0 -0
  459. wx/wxmsw334u_richtext_vc140_x64.dll +0 -0
  460. wx/wxmsw334u_stc_vc140_x64.dll +0 -0
  461. wx/wxmsw334u_webview_vc140_x64.dll +0 -0
  462. wx/wxmsw334u_xrc_vc140_x64.dll +0 -0
  463. wx/xml.py +18 -0
  464. wx/xml.pyi +728 -0
  465. wx/xrc.py +68 -0
  466. wx/xrc.pyi +896 -0
  467. wxpython-4.3.2.dist-info/METADATA +71 -0
  468. wxpython-4.3.2.dist-info/RECORD +472 -0
  469. wxpython-4.3.2.dist-info/WHEEL +5 -0
  470. wxpython-4.3.2.dist-info/entry_points.txt +13 -0
  471. wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
  472. wxpython-4.3.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,810 @@
1
+ #!/usr/bin/env python
2
+
3
+ __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
4
+
5
+ import sys
6
+ import os
7
+
8
+ import unittest
9
+ from wx.py import introspect
10
+
11
+ """
12
+ These unittest methods are preferred:
13
+ -------------------------------------
14
+ self.assertTrue(expr, msg=None)
15
+ self.assertEqual(first, second, msg=None)
16
+ self.assertRaises(excClass, callableObj, *args, **kwargs)
17
+ self.fail(msg=None)
18
+ self.failIf(expr, msg=None)
19
+ """
20
+
21
+
22
+ class ModuleTestCase(unittest.TestCase):
23
+
24
+ def test_module(self):
25
+ module = introspect
26
+ self.assertTrue(module.__author__)
27
+ self.assertTrue(module.getAllAttributeNames)
28
+ self.assertTrue(module.getAttributeNames)
29
+ self.assertTrue(module.getAutoCompleteList)
30
+ self.assertTrue(module.getBaseObject)
31
+ self.assertTrue(module.getCallTip)
32
+ self.assertTrue(module.getConstructor)
33
+ self.assertTrue(module.getRoot)
34
+ self.assertTrue(module.rtrimTerminus)
35
+
36
+
37
+ class RtrimTerminusTestCase(unittest.TestCase):
38
+
39
+ def test_rtrimTerminus(self):
40
+ values = (
41
+ ('', '', ''),
42
+ ('', None, ''),
43
+ ('', '.', ''),
44
+ ('', '(', ''),
45
+
46
+ ('.', '', '.'),
47
+ ('.', None, '.'),
48
+ ('.', '.', '.'),
49
+ ('.', '(', '.'),
50
+
51
+ ('(', '', '('),
52
+ ('(', None, '('),
53
+ ('(', '.', '('),
54
+ ('(', '(', '('),
55
+
56
+ ('spam', '', 'spam'),
57
+ ('spam', None, 'spam'),
58
+ ('spam', '.', 'spam'),
59
+ ('spam', '(', 'spam'),
60
+
61
+ ('spam.', '', 'spam.'),
62
+ ('spam.', None, 'spam.'),
63
+ ('spam.', '.', 'spam.'),
64
+ ('spam.', '(', 'spam.'),
65
+
66
+ ('spam(', '', 'spam('),
67
+ ('spam(', None, 'spam('),
68
+ ('spam(', '.', 'spam('),
69
+ ('spam(', '(', 'spam('),
70
+
71
+ ('spam.eggs', '.', 'spam.'),
72
+ ('spam.eggs.', '.', 'spam.eggs.'),
73
+ ('spam.eggs(', '(', 'spam.eggs('),
74
+ ('spam.eggs.', '(', 'spam.eggs.'),
75
+ ('spam.eggs(', '.', 'spam.'),
76
+
77
+ ('x = spam.', '.', 'x = spam.'),
78
+ ('x = spam.eggs', '.', 'x = spam.'),
79
+ ('x = spam.eggs.', '.', 'x = spam.eggs.'),
80
+ ('x = spam.eggs(', '(', 'x = spam.eggs('),
81
+ )
82
+ for input, terminator, output in values:
83
+ result = introspect.rtrimTerminus(input, terminator)
84
+ self.assertEqual(result, output,
85
+ ':in: %r :t: %r :out: %r :result: %r' %
86
+ (input, terminator, output, result))
87
+
88
+
89
+ class GetRootTestCase(unittest.TestCase):
90
+
91
+ def _checkRoot(self, input, terminator, output):
92
+ root = introspect.getRoot(command=input, terminator=terminator)
93
+ self.assertEqual(root, output,
94
+ ':in: %r :t: %r :out: %r :root: %r' %
95
+ (input, terminator, output, root))
96
+
97
+ def test_getRoot(self):
98
+ values = (
99
+ ('', '', ''),
100
+ ('', None, ''),
101
+ ('', '.', ''),
102
+ ('', '(', ''),
103
+
104
+ ('.', '', '.'),
105
+ ('.', None, '.'),
106
+ ('.', '.', ''),
107
+ ('.', '(', '.'),
108
+
109
+ ('(', '', ''),
110
+ ('(', None, ''),
111
+ ('(', '.', ''),
112
+ ('(', '(', ''),
113
+
114
+ ('spam', '', 'spam'),
115
+ ('spam', None, 'spam'),
116
+ ('spam', '.', ''),
117
+ ('spam', '(', 'spam'),
118
+
119
+ ('spam.', '', 'spam.'),
120
+ ('spam.', None, 'spam.'),
121
+ ('spam.', '.', 'spam'),
122
+ ('spam.', '(', 'spam.'),
123
+
124
+ ('spam(', '', ''),
125
+ ('spam(', None, ''),
126
+ ('spam(', '.', ''),
127
+ ('spam(', '(', 'spam'),
128
+
129
+ ('spam.eggs', '.', 'spam'),
130
+ ('spam.eggs.', '.', 'spam.eggs'),
131
+ ('spam.eggs(', '(', 'spam.eggs'),
132
+ ('spam.eggs.', '(', 'spam.eggs.'),
133
+ ('spam.eggs(', '.', 'spam'),
134
+
135
+ ('x = spam.', '.', 'spam'),
136
+ ('x = spam.eggs', '.', 'spam'),
137
+ ('x = spam.eggs.', '.', 'spam.eggs'),
138
+ ('x = spam.eggs(', '(', 'spam.eggs'),
139
+
140
+ ('for n in range(3):\n d.', '.', 'd'),
141
+ ('for n in range(3):\n... d.', '.', 'd'),
142
+ )
143
+ for input, terminator, output in values:
144
+ self._checkRoot(input, terminator, output)
145
+
146
+ def test_getRoot_Advanced(self):
147
+ values = (
148
+ ('spam_', '', 'spam_'),
149
+ ('spam_', None, 'spam_'),
150
+ ('spam_', '.', ''),
151
+ ('spam_', '(', 'spam_'),
152
+
153
+ ('_spam', '', '_spam'),
154
+ ('_spam', None, '_spam'),
155
+ ('_spam', '.', ''),
156
+ ('_spam', '(', '_spam'),
157
+
158
+ ('spam_eggs', '', 'spam_eggs'),
159
+ ('spam_eggs', None, 'spam_eggs'),
160
+ ('spam_eggs', '.', ''),
161
+ ('spam_eggs', '(', 'spam_eggs'),
162
+
163
+ ('spam123', '', 'spam123'),
164
+ ('spam123', None, 'spam123'),
165
+ ('spam123', '.', ''),
166
+ ('spam123', '(', 'spam123'),
167
+
168
+ ('spam_123', '', 'spam_123'),
169
+ ('spam_123', None, 'spam_123'),
170
+ ('spam_123', '.', ''),
171
+ ('spam_123', '(', 'spam_123'),
172
+ )
173
+ for input, terminator, output in values:
174
+ self._checkRoot(input, terminator, output)
175
+
176
+ ## The original intent was to detect when we were inside a string.
177
+ ## That has proven to be very difficult, for little benefit.
178
+ ## The fact that autocomplete or calltips might be triggered inside
179
+ ## a string is not a big deal. Sometimes it is even helpful.
180
+
181
+ ## def test_getRoot_InsideStrings(self):
182
+ ## values = (
183
+ ## ('x = ".', '.', ''),
184
+ ## ("x = '.", '.', ''),
185
+ ## ('x = """.', '.', ''),
186
+ ## ("x = '''.", '.', ''),
187
+ ##
188
+ ## ('x = "(', '(', ''),
189
+ ## ("x = '(", '(', ''),
190
+ ## ('x = """(', '(', ''),
191
+ ## ("x = '''(", '(', ''),
192
+ ##
193
+ ## ('x = "spam', '.', ''),
194
+ ## ('x = "spam.', '.', ''),
195
+ ## ("x = 'spam.", '.', ''),
196
+ ## ('x = """spam.', '.', ''),
197
+ ## ("x = '''spam.", '.', ''),
198
+ ##
199
+ ## ('x = "spam', '(', ''),
200
+ ## ('x = "spam(', '(', ''),
201
+ ## ("x = 'spam(", '(', ''),
202
+ ## ('x = """spam(', '(', ''),
203
+ ## ("x = '''spam(", '(', ''),
204
+ ##
205
+ ## ('x = "spam.eggs.', '.', ''),
206
+ ## ("x = 'spam.eggs.", '.', ''),
207
+ ## ('x = """spam.eggs.', '.', ''),
208
+ ## ("x = '''spam.eggs.", '.', ''),
209
+ ##
210
+ ## ('x = "spam.eggs(', '(', ''),
211
+ ## ("x = 'spam.eggs(", '(', ''),
212
+ ## ('x = """spam.eggs(', '(', ''),
213
+ ## ("x = '''spam.eggs(", '(', ''),
214
+ ## )
215
+ ## for input, terminator, output in values:
216
+ ## self._checkRoot(input, terminator, output)
217
+
218
+ def test_getRoot_EmptyTypes(self):
219
+ values = (
220
+ ("''.", '.', "''"),
221
+ ('"".', '.', '""'),
222
+ ('"""""".', '.', '""""""'),
223
+ ("''''''.", '.', "''''''"),
224
+
225
+ ('[].', '.', '[]'),
226
+ ('().', '.', '()'),
227
+ ('{}.', '.', '{}'),
228
+
229
+ ('[](', '(', '[]'),
230
+ ('()(', '(', '()'),
231
+ ('{}(', '(', '{}'),
232
+
233
+ ("x = ''.", '.', "''"),
234
+ ('x = "".', '.', '""'),
235
+ ('x = """""".', '.', '""""""'),
236
+ ("x = ''''''.", '.', "''''''"),
237
+
238
+ ('x = [].', '.', '[]'),
239
+ ('x = ().', '.', '()'),
240
+ ('x = {}.', '.', '{}'),
241
+
242
+ ('x = [](', '(', '[]'),
243
+ ('x = ()(', '(', '()'),
244
+ ('x = {}(', '(', '{}'),
245
+
246
+ ('print [].', '.', '[]'),
247
+ ('print ().', '.', '()'),
248
+ ('print {}.', '.', '{}'),
249
+
250
+ ('print [](', '(', '[]'),
251
+ ('print ()(', '(', '()'),
252
+ ('print {}(', '(', '{}'),
253
+
254
+ ("''.attr.", '.', "''.attr"),
255
+ ('"".attr.', '.', '"".attr'),
256
+ ('"""""".attr.', '.', '"""""".attr'),
257
+ ("''''''.attr.", '.', "''''''.attr"),
258
+
259
+ ('[].attr.', '.', '[].attr'),
260
+ ('().attr.', '.', '().attr'),
261
+ ('{}.attr.', '.', '{}.attr'),
262
+
263
+ ('[].attr(', '(', '[].attr'),
264
+ ('().attr(', '(', '().attr'),
265
+ ('{}.attr(', '(', '{}.attr'),
266
+
267
+ ('spam().', '.', ''),
268
+ ('spam_().', '.', ''),
269
+ ('spam5().', '.', ''),
270
+ ('spam[]().', '.', ''),
271
+ ('spam()[].', '.', ''),
272
+ ('spam[]{}.', '.', ''),
273
+
274
+ ("spam(''.", '.', "''"),
275
+ ('spam("".', '.', '""'),
276
+ ('spam("""""".', '.', '""""""'),
277
+ ("spam(''''''.", '.', "''''''"),
278
+
279
+ ('spam([].', '.', '[]'),
280
+ ('spam(().', '.', '()'),
281
+ ('spam({}.', '.', '{}'),
282
+ ('spam[[].', '.', '[]'),
283
+ ('spam[().', '.', '()'),
284
+ ('spam[{}.', '.', '{}'),
285
+ ('x = {[].', '.', '[]'),
286
+ ('x = {().', '.', '()'),
287
+ ('x = {{}.', '.', '{}'),
288
+
289
+ ('spam,[].', '.', '[]'),
290
+ ('spam+[].', '.', '[]'),
291
+ ('spam-[].', '.', '[]'),
292
+ ('spam*[].', '.', '[]'),
293
+ ('spam/[].', '.', '[]'),
294
+ ('spam=[].', '.', '[]'),
295
+ ('spam%[].', '.', '[]'),
296
+ ('spam<[].', '.', '[]'),
297
+ ('spam>[].', '.', '[]'),
298
+ ('spam&[].', '.', '[]'),
299
+ ('spam|[].', '.', '[]'),
300
+ ('spam^[].', '.', '[]'),
301
+ ('spam~[].', '.', '[]'),
302
+ ('spam:[].', '.', '[]'),
303
+
304
+ ('spam,().', '.', '()'),
305
+ ('spam+().', '.', '()'),
306
+ ('spam-().', '.', '()'),
307
+ ('spam*().', '.', '()'),
308
+ ('spam/().', '.', '()'),
309
+ ('spam=().', '.', '()'),
310
+ ('spam%().', '.', '()'),
311
+ ('spam<().', '.', '()'),
312
+ ('spam>().', '.', '()'),
313
+ ('spam&().', '.', '()'),
314
+ ('spam|().', '.', '()'),
315
+ ('spam^().', '.', '()'),
316
+ ('spam~().', '.', '()'),
317
+ ('spam:().', '.', '()'),
318
+
319
+ ('spam,{}.', '.', '{}'),
320
+ ('spam+{}.', '.', '{}'),
321
+ ('spam-{}.', '.', '{}'),
322
+ ('spam*{}.', '.', '{}'),
323
+ ('spam/{}.', '.', '{}'),
324
+ ('spam={}.', '.', '{}'),
325
+ ('spam%{}.', '.', '{}'),
326
+ ('spam<{}.', '.', '{}'),
327
+ ('spam>{}.', '.', '{}'),
328
+ ('spam&{}.', '.', '{}'),
329
+ ('spam|{}.', '.', '{}'),
330
+ ('spam^{}.', '.', '{}'),
331
+ ('spam~{}.', '.', '{}'),
332
+ ('spam:{}.', '.', '{}'),
333
+ )
334
+ for input, terminator, output in values:
335
+ self._checkRoot(input, terminator, output)
336
+
337
+
338
+ # Support for GetBaseObjectTestCase and GetAttributeNamesTestCase.
339
+
340
+ class Foo:
341
+ def __init__(self):
342
+ pass
343
+
344
+ def __del__(self):
345
+ pass
346
+
347
+ def _private(self):
348
+ pass
349
+
350
+ class Bar:
351
+ pass
352
+
353
+ class Spam:
354
+ def __call__(self):
355
+ pass
356
+
357
+ def foo(self):
358
+ pass
359
+
360
+ def bar(spam):
361
+ # It shouldn't matter what we call "self".
362
+ pass
363
+
364
+ def eggs(self):
365
+ pass
366
+
367
+ def ham(eggs):
368
+ pass
369
+
370
+ class GetBaseObjectTestCase(unittest.TestCase):
371
+
372
+ def test_getBaseObject(self):
373
+ spam = Spam()
374
+ eggs = Spam.eggs
375
+ listappend = [].append
376
+ spamda = lambda: None
377
+ values = [
378
+ ('spam', 'spam', 0),
379
+ (123, 123, 0),
380
+ (12.3, 12.3, 0),
381
+ ([], [], 0),
382
+ ((), (), 0),
383
+ ({}, {}, 0),
384
+ # Builtin function.
385
+ (len, len, 0),
386
+ # Builtin method.
387
+ (listappend, listappend, 0),
388
+ # User function.
389
+ (ham, ham, 0),
390
+ # Lambda.
391
+ (spamda, spamda, 0),
392
+ # Class with no init.
393
+ (Bar, Bar, 0),
394
+ ]
395
+ for object, baseObject, dropSelf in values:
396
+ result = introspect.getBaseObject(object)
397
+ self.assertEqual(result, (baseObject, dropSelf))
398
+
399
+
400
+ class GetAttributeTestCase(unittest.TestCase):
401
+ """Base class for other test case classes."""
402
+
403
+ def setUp(self):
404
+ self.values = (
405
+ '__abs__',
406
+ '__add__',
407
+ '__and__',
408
+ '__base__',
409
+ '__bases__',
410
+ '__basicsize__',
411
+ '__builtins__',
412
+ '__call__',
413
+ '__class__',
414
+ '__closure__',
415
+ '__cmp__',
416
+ '__code__',
417
+ '__coerce__',
418
+ '__contains__',
419
+ '__defaults__',
420
+ '__del__',
421
+ '__delattr__',
422
+ '__delitem__',
423
+ '__delslice__',
424
+ '__dict__',
425
+ '__dictoffset__',
426
+ '__div__',
427
+ '__divmod__',
428
+ '__doc__',
429
+ '__eq__',
430
+ '__file__',
431
+ '__flags__',
432
+ '__float__',
433
+ '__floordiv__',
434
+ '__func__',
435
+ '__ge__',
436
+ '__get__',
437
+ '__getattr__',
438
+ '__getattribute__',
439
+ '__getitem__',
440
+ '__getslice__',
441
+ '__globals__',
442
+ '__gt__',
443
+ '__hash__',
444
+ '__hex__',
445
+ '__iadd__',
446
+ '__imul__',
447
+ '__init__',
448
+ '__int__',
449
+ '__invert__',
450
+ '__itemsize__',
451
+ '__iter__',
452
+ '__kwdefaults__',
453
+ '__le__',
454
+ '__len__',
455
+ '__long__',
456
+ '__lshift__',
457
+ '__lt__',
458
+ '__mod__',
459
+ '__module__',
460
+ '__mro__',
461
+ '__mul__',
462
+ '__name__',
463
+ '__ne__',
464
+ '__neg__',
465
+ '__new__',
466
+ '__nonzero__',
467
+ '__oct__',
468
+ '__or__',
469
+ '__path__',
470
+ '__pos__',
471
+ '__pow__',
472
+ '__qualname__',
473
+ '__radd__',
474
+ '__rand__',
475
+ '__rdiv__',
476
+ '__rdivmod__',
477
+ '__reduce__',
478
+ '__repr__',
479
+ '__rfloordiv__',
480
+ '__rlshift__',
481
+ '__rmod__',
482
+ '__rmul__',
483
+ '__ror__',
484
+ '__rpow__',
485
+ '__rrshift__',
486
+ '__rshift__',
487
+ '__rsub__',
488
+ '__rtruediv__',
489
+ '__rxor__',
490
+ '__self__',
491
+ '__setattr__',
492
+ '__setitem__',
493
+ '__setslice__',
494
+ '__str__',
495
+ '__sub__',
496
+ '__subclasses__',
497
+ '__truediv__',
498
+ '__warningregistry__',
499
+ '__weakrefoffset__',
500
+ '__xor__',
501
+ 'append',
502
+ 'capitalize',
503
+ 'center',
504
+ 'clear',
505
+ 'close',
506
+ 'closed',
507
+ 'co_argcount',
508
+ 'co_cellvars',
509
+ 'co_code',
510
+ 'co_consts',
511
+ 'co_filename',
512
+ 'co_firstlineno',
513
+ 'co_flags',
514
+ 'co_freevars',
515
+ 'co_lnotab',
516
+ 'co_name',
517
+ 'co_names',
518
+ 'co_nlocals',
519
+ 'co_stacksize',
520
+ 'co_varnames',
521
+ 'conjugate',
522
+ 'copy',
523
+ 'count',
524
+ 'decode',
525
+ 'encode',
526
+ 'endswith',
527
+ 'expandtabs',
528
+ 'extend',
529
+ 'fileno',
530
+ 'find',
531
+ 'flush',
532
+ 'get',
533
+ 'has_key',
534
+ 'imag',
535
+ 'index',
536
+ 'insert',
537
+ 'isalnum',
538
+ 'isalpha',
539
+ 'isatty',
540
+ 'isdigit',
541
+ 'islower',
542
+ 'isspace',
543
+ 'istitle',
544
+ 'isupper',
545
+ 'items',
546
+ 'iteritems',
547
+ 'iterkeys',
548
+ 'itervalues',
549
+ 'join',
550
+ 'keys',
551
+ 'ljust',
552
+ 'lower',
553
+ 'lstrip',
554
+ 'mode',
555
+ 'mro',
556
+ 'name',
557
+ 'pop',
558
+ 'popitem',
559
+ 'real',
560
+ 'read',
561
+ 'readinto',
562
+ 'readline',
563
+ 'readlines',
564
+ 'remove',
565
+ 'replace',
566
+ 'reverse',
567
+ 'rfind',
568
+ 'rindex',
569
+ 'rjust',
570
+ 'rstrip',
571
+ 'seek',
572
+ 'setdefault',
573
+ 'softspace',
574
+ 'sort',
575
+ 'split',
576
+ 'splitlines',
577
+ 'start',
578
+ 'startswith',
579
+ 'step',
580
+ 'stop',
581
+ 'strip',
582
+ 'swapcase',
583
+ 'tell',
584
+ 'title',
585
+ 'tolist',
586
+ 'translate',
587
+ 'truncate',
588
+ 'update',
589
+ 'upper',
590
+ 'values',
591
+ 'write',
592
+ 'writelines',
593
+ 'xreadlines',
594
+ )
595
+
596
+ # Since getAllAttributeNames() calls str(object),
597
+ # we need to test for a broken __str__ method.
598
+ class BrokenStr:
599
+ def __str__(self):
600
+ raise Exception
601
+
602
+ brokenStr = BrokenStr()
603
+
604
+ class GetAttributeNamesTestCase(GetAttributeTestCase):
605
+
606
+ def setUp(self):
607
+ GetAttributeTestCase.setUp(self)
608
+ from wx import py
609
+ spam = Spam()
610
+ self.f = open(os.path.join(os.path.dirname(__file__), 'test_introspect.py'))
611
+ self.items = [
612
+ None,
613
+ int(123),
614
+ float(123),
615
+ complex(123),
616
+ "",
617
+ [],
618
+ (),
619
+ {},
620
+ # Builtin function.
621
+ len,
622
+ # Builtin method.
623
+ [].append,
624
+ # User function.
625
+ ham,
626
+ # Lambda.
627
+ lambda: None,
628
+ # Class with no init.
629
+ Bar,
630
+ # Instance with no init.
631
+ Bar(),
632
+ # Class with init and del.
633
+ Foo,
634
+ # Instance with init and del.
635
+ Foo(),
636
+ # Bound method.
637
+ spam.foo,
638
+ # Unbound method.
639
+ Spam.eggs,
640
+ # Callable instance.
641
+ spam,
642
+ # Module.
643
+ introspect,
644
+ # Package.
645
+ py,
646
+ # File.
647
+ self.f,
648
+ # Slice.
649
+ slice(0),
650
+ # Ellipsis.
651
+ Ellipsis,
652
+ # BrokenStr class.
653
+ BrokenStr,
654
+ # BrokenStr instance.
655
+ brokenStr,
656
+ ]
657
+
658
+ def tearDown(self):
659
+ self.items = None
660
+ self.f.close()
661
+
662
+ def test_getAttributeNames(self):
663
+ for item in self.items:
664
+ self._checkAttributeNames(item)
665
+ if 'object' in __builtins__ if isinstance(__builtins__, dict) else vars(__builtins__):
666
+ self._checkAttributeNames(object)
667
+
668
+ def test_getAttributeNames_NoSingle(self):
669
+ for item in self.items:
670
+ result = list(introspect.getAttributeNames(item, includeSingle=0))
671
+ attributes = [attribute for attribute in result \
672
+ if attribute[0] != '_' or attribute[:2] == '__']
673
+ self.assertEqual(result, attributes,
674
+ ':item: %r' % (item,))
675
+
676
+ def test_getAttributeNames_NoDouble(self):
677
+ for item in self.items:
678
+ result = list(introspect.getAttributeNames(item, includeDouble=0))
679
+ attributes = [attribute for attribute in result \
680
+ if attribute[:2] != '__']
681
+ self.assertEqual(result, attributes,
682
+ ':item: %r' % (item,))
683
+
684
+ def test_getAttributeNames_NoSingleOrDouble(self):
685
+ for item in self.items:
686
+ result = list(introspect.getAttributeNames(item, includeSingle=0,
687
+ includeDouble=0))
688
+ attributes = [attribute for attribute in result \
689
+ if attribute[0] != '_']
690
+ self.assertEqual(result, attributes,
691
+ ':item: %r' % (item,))
692
+
693
+ def _checkAttributeNames(self, item):
694
+ result = introspect.getAttributeNames(item)
695
+ attributes = [attribute for attribute in self.values \
696
+ if hasattr(item, attribute)]
697
+ for attribute in attributes:
698
+ self.assertTrue(attribute in result,
699
+ ':item: %r :attribute: %r' % (item, attribute))
700
+
701
+
702
+ class GetAutoCompleteListTestCase(GetAttributeTestCase):
703
+
704
+ def setUp(self):
705
+ GetAttributeTestCase.setUp(self)
706
+ self.items = (
707
+ 'None.',
708
+ '123 .',
709
+ '"".',
710
+ '[].',
711
+ '().',
712
+ '{}.',
713
+ # Builtin function.
714
+ 'len.',
715
+ # Builtin method.
716
+ '[].append.',
717
+ )
718
+
719
+ def test_getAutoCompleteList(self):
720
+ for item in self.items:
721
+ result = introspect.getAutoCompleteList(item)
722
+ object = eval(item[:-1])
723
+ attributes = [attribute for attribute in self.values \
724
+ if hasattr(object, attribute)]
725
+ for attribute in attributes:
726
+ self.assertTrue(attribute in result,
727
+ ':item: %r :attribute: %r' % (item, attribute))
728
+
729
+ def test_getAutoCompleteList_NoSingle(self):
730
+ for item in self.items:
731
+ result = list(introspect.getAutoCompleteList(item, includeSingle=0))
732
+ attributes = [attribute for attribute in result \
733
+ if attribute[0] != '_' or attribute[:2] == '__']
734
+ self.assertEqual(result, attributes,
735
+ ':item: %r' % (item,))
736
+
737
+ def test_getAutoCompleteList_NoDouble(self):
738
+ for item in self.items:
739
+ result = list(introspect.getAutoCompleteList(item, includeDouble=0))
740
+ attributes = [attribute for attribute in result \
741
+ if attribute[:2] != '__']
742
+ self.assertEqual(result, attributes,
743
+ ':item: %r' % (item,))
744
+
745
+ def test_getAutoCompleteList_NoSingleOrDouble(self):
746
+ for item in self.items:
747
+ result = list(introspect.getAutoCompleteList(item, includeSingle=0,
748
+ includeDouble=0))
749
+ attributes = [attribute for attribute in result \
750
+ if attribute[0] != '_']
751
+ self.assertEqual(result, attributes,
752
+ ':item: %r' % (item,))
753
+
754
+
755
+ # Support for GetConstructorTestCase.
756
+
757
+ class A1:
758
+ def __init__(self, a):
759
+ self.a = a
760
+
761
+ class B1(A1):
762
+ def __init__(self, b):
763
+ self.b = b
764
+
765
+ class C1(A1):
766
+ pass
767
+
768
+ class D1(C1, B1):
769
+ pass
770
+
771
+ if 'object' in __builtins__ if isinstance(__builtins__, dict) else vars(__builtins__):
772
+ class A2(object):
773
+ def __init__(self, a):
774
+ self.a = a
775
+
776
+ class B2(A2):
777
+ def __init__(self, b):
778
+ self.b = b
779
+
780
+ class C2(A2):
781
+ pass
782
+
783
+ class D2(C2, B2):
784
+ pass
785
+
786
+ class N:
787
+ pass
788
+
789
+ class O:
790
+ def __init__(self, a, b=2, *args, **kwargs):
791
+ pass
792
+
793
+ class P(O):
794
+ pass
795
+
796
+ class Q(P):
797
+ def __init__(self, c, d=4):
798
+ pass
799
+
800
+ class GetConstructorTestCase(unittest.TestCase):
801
+
802
+ def test_getConstructor_None(self):
803
+ values = (N, 1, 'spam', {}, [], (), dir)
804
+ for value in values:
805
+ self.assertEqual(introspect.getConstructor(N), None)
806
+
807
+
808
+ if __name__ == '__main__':
809
+ sys.ps2 = '... '
810
+ unittest.main()