PyGObject 3.49.0.dev0__tar.gz → 3.50.1__tar.gz

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 (353) hide show
  1. pygobject-3.50.1/.flake8 +3 -0
  2. pygobject-3.50.1/.gitlab-ci/build-sdists.sh +20 -0
  3. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/test-msys2.sh +12 -6
  4. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci.yml +51 -88
  5. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/NEWS +11 -0
  6. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/PKG-INFO +1 -1
  7. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/events.py +32 -8
  8. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/meson.build +1 -1
  9. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/pyproject.toml +4 -1
  10. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_events.py +136 -1
  11. pygobject-3.49.0.dev0/.flake8 +0 -3
  12. pygobject-3.49.0.dev0/.gitlab-ci/build-sdists.sh +0 -28
  13. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.coveragerc +0 -0
  14. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitignore +0 -0
  15. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/Dockerfile +0 -0
  16. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/Dockerfile.old +0 -0
  17. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/README.rst +0 -0
  18. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/coverage-docker.sh +0 -0
  19. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/fixup-lcov-paths.py +0 -0
  20. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/lcovrc +0 -0
  21. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/run-docker-old.sh +0 -0
  22. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/run-docker-runtime.sh +0 -0
  23. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/run-docker.sh +0 -0
  24. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/set_env.sh +0 -0
  25. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/test-docker-old.sh +0 -0
  26. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/test-docker.sh +0 -0
  27. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/.gitlab-ci/test-flatpak.sh +0 -0
  28. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/COPYING +0 -0
  29. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/METADATA.in +0 -0
  30. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/README.rst +0 -0
  31. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/Makefile +0 -0
  32. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/bugs_repo.rst +0 -0
  33. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/changelog.rst +0 -0
  34. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/conf.py +0 -0
  35. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/contact.rst +0 -0
  36. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/devguide/dev_environ.rst +0 -0
  37. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/devguide/index.rst +0 -0
  38. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/devguide/override_guidelines.rst +0 -0
  39. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/devguide/overview.rst +0 -0
  40. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/devguide/style_guide.rst +0 -0
  41. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/extra.css +0 -0
  42. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/further.rst +0 -0
  43. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/getting_started.rst +0 -0
  44. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/api.rst +0 -0
  45. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/basic_types.rst +0 -0
  46. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/error_handling.rst +0 -0
  47. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/flags_enums.rst +0 -0
  48. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/gobject.rst +0 -0
  49. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/index.rst +0 -0
  50. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/properties.rst +0 -0
  51. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/signals.rst +0 -0
  52. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/api/weakrefs.rst +0 -0
  53. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/cairo_integration.rst +0 -0
  54. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/code/cairo-demo.py +0 -0
  55. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/debug_profile.rst +0 -0
  56. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/deploy.rst +0 -0
  57. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/faq.rst +0 -0
  58. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/flatpaking.rst +0 -0
  59. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/gtk_template.rst +0 -0
  60. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/images/cairo_integration.png +0 -0
  61. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/imports.rst +0 -0
  62. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/index.rst +0 -0
  63. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/porting.rst +0 -0
  64. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/sysdeps.rst +0 -0
  65. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/testing.rst +0 -0
  66. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/guide/threading.rst +0 -0
  67. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/icons.rst +0 -0
  68. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/LICENSE +0 -0
  69. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/favicon.ico +0 -0
  70. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/logo.svg +0 -0
  71. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/overview-dark.svg +0 -0
  72. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/overview.dia +0 -0
  73. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/overview.svg +0 -0
  74. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/pygobject-small.svg +0 -0
  75. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/pygobject.svg +0 -0
  76. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/start_linux.png +0 -0
  77. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/start_macos.png +0 -0
  78. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/images/start_windows.png +0 -0
  79. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/index.rst +0 -0
  80. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/maintguide.rst +0 -0
  81. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/packagingguide.rst +0 -0
  82. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/_static/custom.css +0 -0
  83. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gobject/basics.rst +0 -0
  84. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gobject/examples/listmodel.py +0 -0
  85. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gobject/interfaces.rst +0 -0
  86. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gobject/subclassing.rst +0 -0
  87. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gobject.rst +0 -0
  88. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk3.rst +0 -0
  89. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/application.rst +0 -0
  90. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/basics.rst +0 -0
  91. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/clipboard.rst +0 -0
  92. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/buttons.rst +0 -0
  93. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/check-radio-buttons.rst +0 -0
  94. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/dropdown.rst +0 -0
  95. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/entries.rst +0 -0
  96. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/examples/button.py +0 -0
  97. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/examples/check_radio_buttons.py +0 -0
  98. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/examples/dropdown.py +0 -0
  99. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/examples/entries.py +0 -0
  100. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/examples/linkbutton.py +0 -0
  101. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/examples/spinbutton.py +0 -0
  102. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/examples/switch.py +0 -0
  103. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/examples/togglebutton.py +0 -0
  104. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/images/button.png +0 -0
  105. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/images/check_radio_buttons.png +0 -0
  106. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/images/dropdown.png +0 -0
  107. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/images/entries.png +0 -0
  108. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/images/linkbutton.png +0 -0
  109. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/images/spinbutton.png +0 -0
  110. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/images/switch.png +0 -0
  111. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/images/togglebutton.png +0 -0
  112. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/scale.rst +0 -0
  113. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/spinbutton.rst +0 -0
  114. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls/switch.rst +0 -0
  115. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/controls.rst +0 -0
  116. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/examples/label.py +0 -0
  117. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/examples/picture.py +0 -0
  118. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/examples/progressbar.py +0 -0
  119. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/examples/spinner.py +0 -0
  120. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/examples/spinner_ext.py +0 -0
  121. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/image.rst +0 -0
  122. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/images/label.png +0 -0
  123. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/images/picture.png +0 -0
  124. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/images/progressbar.png +0 -0
  125. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/images/spinner.png +0 -0
  126. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/images/spinner_ext.png +0 -0
  127. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/label.rst +0 -0
  128. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/picture.rst +0 -0
  129. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/progressbar.rst +0 -0
  130. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets/spinner.rst +0 -0
  131. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/display-widgets.rst +0 -0
  132. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/drag-and-drop.rst +0 -0
  133. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/application.py +0 -0
  134. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/clipboard.py +0 -0
  135. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/drag_and_drop.py +0 -0
  136. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/extended_example.py +0 -0
  137. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/layout_box.py +0 -0
  138. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/layout_center.py +0 -0
  139. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/layout_flowbox.py +0 -0
  140. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/layout_grid.py +0 -0
  141. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/layout_headerbar.py +0 -0
  142. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/layout_listbox.py +0 -0
  143. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/layout_notebook.py +0 -0
  144. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/layout_stack.py +0 -0
  145. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/popover.py +0 -0
  146. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/popover_menu.py +0 -0
  147. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/simple_example.py +0 -0
  148. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/examples/textview.py +0 -0
  149. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/application.png +0 -0
  150. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/basic_example.png +0 -0
  151. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/clipboard.png +0 -0
  152. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/drag_and_drop.png +0 -0
  153. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/extended_example.png +0 -0
  154. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/layout_box.png +0 -0
  155. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/layout_center.png +0 -0
  156. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/layout_flowbox.png +0 -0
  157. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/layout_grid.png +0 -0
  158. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/layout_headerbar.png +0 -0
  159. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/layout_listbox.png +0 -0
  160. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/layout_notebook.png +0 -0
  161. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/layout_stack.png +0 -0
  162. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/popover.png +0 -0
  163. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/popover_menu.png +0 -0
  164. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/images/textview.png +0 -0
  165. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/introduction.rst +0 -0
  166. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/layout-widgets.rst +0 -0
  167. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/popovers.rst +0 -0
  168. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4/textview.rst +0 -0
  169. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/gtk4.rst +0 -0
  170. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/index.rst +0 -0
  171. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/libadwaita/application.rst +0 -0
  172. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/docs/tutorials/libadwaita.rst +0 -0
  173. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/__init__.py +0 -0
  174. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/_constants.py +0 -0
  175. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/_error.py +0 -0
  176. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/_gtktemplate.py +0 -0
  177. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/_option.py +0 -0
  178. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/_ossighelper.py +0 -0
  179. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/_propertyhelper.py +0 -0
  180. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/_signalhelper.py +0 -0
  181. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/docstring.py +0 -0
  182. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/gimodule.c +0 -0
  183. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/gimodule.h +0 -0
  184. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/importer.py +0 -0
  185. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/meson.build +0 -0
  186. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/module.py +0 -0
  187. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/GIMarshallingTests.py +0 -0
  188. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/GLib.py +0 -0
  189. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/GObject.py +0 -0
  190. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/Gdk.py +0 -0
  191. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/GdkPixbuf.py +0 -0
  192. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/Gio.py +0 -0
  193. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/Gtk.py +0 -0
  194. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/Pango.py +0 -0
  195. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/__init__.py +0 -0
  196. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/keysyms.py +0 -0
  197. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/overrides/meson.build +0 -0
  198. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygboxed.c +0 -0
  199. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygboxed.h +0 -0
  200. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygenum.c +0 -0
  201. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygenum.h +0 -0
  202. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygflags.c +0 -0
  203. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygflags.h +0 -0
  204. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-argument.c +0 -0
  205. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-argument.h +0 -0
  206. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-array.c +0 -0
  207. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-array.h +0 -0
  208. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-async.c +0 -0
  209. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-async.h +0 -0
  210. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-basictype.c +0 -0
  211. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-basictype.h +0 -0
  212. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-boxed.c +0 -0
  213. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-boxed.h +0 -0
  214. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-cache.c +0 -0
  215. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-cache.h +0 -0
  216. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-ccallback.c +0 -0
  217. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-ccallback.h +0 -0
  218. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-closure.c +0 -0
  219. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-closure.h +0 -0
  220. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-enum-marshal.c +0 -0
  221. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-enum-marshal.h +0 -0
  222. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-error.c +0 -0
  223. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-error.h +0 -0
  224. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-foreign-api.h +0 -0
  225. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-foreign-cairo.c +0 -0
  226. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-foreign.c +0 -0
  227. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-foreign.h +0 -0
  228. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-fundamental.c +0 -0
  229. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-fundamental.h +0 -0
  230. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-hashtable.c +0 -0
  231. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-hashtable.h +0 -0
  232. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-info.c +0 -0
  233. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-info.h +0 -0
  234. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-invoke-state-struct.h +0 -0
  235. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-invoke.c +0 -0
  236. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-invoke.h +0 -0
  237. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-list.c +0 -0
  238. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-list.h +0 -0
  239. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-marshal-cleanup.c +0 -0
  240. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-marshal-cleanup.h +0 -0
  241. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-object.c +0 -0
  242. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-object.h +0 -0
  243. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-property.c +0 -0
  244. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-property.h +0 -0
  245. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-repository.c +0 -0
  246. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-repository.h +0 -0
  247. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-resulttuple.c +0 -0
  248. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-resulttuple.h +0 -0
  249. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-signal-closure.c +0 -0
  250. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-signal-closure.h +0 -0
  251. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-source.c +0 -0
  252. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-source.h +0 -0
  253. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-struct-marshal.c +0 -0
  254. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-struct-marshal.h +0 -0
  255. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-struct.c +0 -0
  256. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-struct.h +0 -0
  257. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-type.c +0 -0
  258. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-type.h +0 -0
  259. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-util.c +0 -0
  260. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-util.h +0 -0
  261. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-value.c +0 -0
  262. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygi-value.h +0 -0
  263. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pyginterface.c +0 -0
  264. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pyginterface.h +0 -0
  265. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygobject-internal.h +0 -0
  266. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygobject-object.c +0 -0
  267. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygobject-object.h +0 -0
  268. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygobject.h +0 -0
  269. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygoptioncontext.c +0 -0
  270. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygoptioncontext.h +0 -0
  271. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygoptiongroup.c +0 -0
  272. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygoptiongroup.h +0 -0
  273. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygpointer.c +0 -0
  274. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygpointer.h +0 -0
  275. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygspawn.c +0 -0
  276. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygspawn.h +0 -0
  277. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/pygtkcompat.py +0 -0
  278. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/repository/__init__.py +0 -0
  279. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/repository/meson.build +0 -0
  280. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/gi/types.py +0 -0
  281. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/meson_options.txt +0 -0
  282. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/pygobject-3.0.pc.in +0 -0
  283. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/pygobject.doap +0 -0
  284. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/pygtkcompat/__init__.py +0 -0
  285. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/pygtkcompat/generictreemodel.py +0 -0
  286. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/pygtkcompat/meson.build +0 -0
  287. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/pygtkcompat/pygtkcompat.py +0 -0
  288. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/subprojects/.gitignore +0 -0
  289. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/subprojects/glib.wrap +0 -0
  290. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/subprojects/gobject-introspection.wrap +0 -0
  291. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/subprojects/libffi.wrap +0 -0
  292. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/subprojects/pycairo.wrap +0 -0
  293. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/conftest.py +0 -0
  294. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/gi/overrides/Regress.py +0 -0
  295. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/gi/overrides/__init__.py +0 -0
  296. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/gimarshallingtestsextra.c +0 -0
  297. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/gimarshallingtestsextra.h +0 -0
  298. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/helper.py +0 -0
  299. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/meson.build +0 -0
  300. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/org.gnome.test.gschema.xml +0 -0
  301. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/regressextra.c +0 -0
  302. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/regressextra.h +0 -0
  303. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test-floating.c +0 -0
  304. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test-floating.h +0 -0
  305. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test-thread.c +0 -0
  306. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test-thread.h +0 -0
  307. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test-unknown.c +0 -0
  308. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test-unknown.h +0 -0
  309. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_async.py +0 -0
  310. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_atoms.py +0 -0
  311. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_cairo.py +0 -0
  312. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_docstring.py +0 -0
  313. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_error.py +0 -0
  314. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_everything.py +0 -0
  315. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_fields.py +0 -0
  316. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_fundamental.py +0 -0
  317. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_gdbus.py +0 -0
  318. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_generictreemodel.py +0 -0
  319. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_gi.py +0 -0
  320. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_gio.py +0 -0
  321. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_glib.py +0 -0
  322. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_gobject.py +0 -0
  323. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_gtk_template.py +0 -0
  324. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_gtype.py +0 -0
  325. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_import_machinery.py +0 -0
  326. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_interface.py +0 -0
  327. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_internal_api.py +0 -0
  328. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_iochannel.py +0 -0
  329. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_mainloop.py +0 -0
  330. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_object_marshaling.py +0 -0
  331. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_option.py +0 -0
  332. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_ossig.py +0 -0
  333. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_overrides_gdk.py +0 -0
  334. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_overrides_gdkpixbuf.py +0 -0
  335. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_overrides_gio.py +0 -0
  336. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_overrides_glib.py +0 -0
  337. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_overrides_gobject.py +0 -0
  338. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_overrides_gtk.py +0 -0
  339. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_overrides_pango.py +0 -0
  340. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_properties.py +0 -0
  341. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_pycapi.py +0 -0
  342. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_pygtkcompat.py +0 -0
  343. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_repository.py +0 -0
  344. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_resulttuple.py +0 -0
  345. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_signal.py +0 -0
  346. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_source.py +0 -0
  347. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_subprocess.py +0 -0
  348. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_thread.py +0 -0
  349. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_typeclass.py +0 -0
  350. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/test_unknown.py +0 -0
  351. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/testhelpermodule.c +0 -0
  352. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tests/valgrind.supp +0 -0
  353. {pygobject-3.49.0.dev0 → pygobject-3.50.1}/tools/pygi-convert.sh +0 -0
@@ -0,0 +1,3 @@
1
+ [flake8]
2
+ ignore=E501,E123,E124,E402,E731,E722,W504,F824
3
+ exclude=subprojects,build,.venv
@@ -0,0 +1,20 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ python -m pip install --upgrade pdm
6
+ python -m pdm build
7
+
8
+ VERSION=$(grep version meson.build | head -1 | sed "s/^.*'\([0-9\.]*\)'.*$/\1/")
9
+
10
+ if [[ "$VERSION" =~ ^[0-9]\.[0-9]*[13579]\. ]]
11
+ then
12
+ cat << EOF
13
+
14
+ ****************** ATTENTION ******************
15
+ This is an UNstable release.
16
+ Do NOT upload this release to PyPI.
17
+ ****************** ATTENTION ******************
18
+
19
+ EOF
20
+ fi
@@ -24,28 +24,34 @@ pacman --noconfirm -S --needed \
24
24
  # ccache setup
25
25
  export PATH="$MSYSTEM/lib/ccache/bin:$PATH"
26
26
  mkdir -p _ccache
27
- export CCACHE_BASEDIR="$(pwd)"
28
- export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
27
+ CCACHE_BASEDIR="$(pwd)"
28
+ export CCACHE_BASEDIR
29
+ CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
30
+ export CCACHE_DIR
29
31
 
30
32
  # coverage setup
31
33
  COV_DIR="$(pwd)/coverage"
32
- COV_KEY="${CI_JOB_NAME}"
34
+ COV_KEY="${CI_JOB_NAME_SLUG}"
33
35
  mkdir -p "${COV_DIR}"
34
36
  export COVERAGE_FILE="${COV_DIR}/.coverage.${COV_KEY}"
35
37
 
38
+ # Test results
39
+ JUNIT_XML="test-results.xml"
40
+
36
41
  # https://docs.python.org/3/using/cmdline.html#envvar-PYTHONDEVMODE
37
42
  export PYTHONDEVMODE=1
38
43
 
39
44
 
40
- MSYSTEM= CFLAGS="-coverage -ftest-coverage -fprofile-arcs -Werror" meson setup _build
45
+ MSYSTEM='' CFLAGS="-coverage -ftest-coverage -fprofile-arcs -Werror" meson setup _build
41
46
 
42
47
  lcov \
43
48
  --config-file .gitlab-ci/lcovrc \
44
49
  --directory "$(pwd)" --capture --initial --output-file \
45
50
  "${COV_DIR}/${COV_KEY}-baseline.lcov"
46
51
 
47
- MSYSTEM= PYTEST_ADDOPTS="--cov" meson test --suite pygobject --timeout-multiplier 4 -C _build -v
48
- MSYSTEM= python -m coverage lcov -o "${COV_DIR}/${COV_KEY}.py.lcov"
52
+ MSYSTEM='' meson compile -C _build -v
53
+ MSYSTEM='' PYTEST_ADDOPTS="--cov -sv --junit-xml=${JUNIT_XML}" meson test --suite pygobject --timeout-multiplier 4 -C _build -v
54
+ MSYSTEM='' python -m coverage lcov -o "${COV_DIR}/${COV_KEY}.py.lcov"
49
55
 
50
56
  lcov \
51
57
  --config-file .gitlab-ci/lcovrc \
@@ -1,29 +1,63 @@
1
- image: registry.gitlab.gnome.org/gnome/pygobject/main:v23
1
+ include:
2
+ - component: gitlab.gnome.org/GNOME/citemplates/release-service@master
3
+ inputs:
4
+ dist-job-name: "sdist"
5
+ tarball-artifact-path: "${TARBALL_ARTIFACT_PATH}"
2
6
 
3
7
  stages:
4
8
  - build_and_test
5
9
  - coverage
6
10
  - deploy
7
11
 
8
- cache:
9
- paths:
10
- - _ccache/
12
+ variables:
13
+ TARBALL_ARTIFACT_PATH: "dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.gz"
11
14
 
12
- .defaults: &defaults
15
+ default:
16
+ image: registry.gitlab.gnome.org/gnome/pygobject/main:v23
17
+ cache:
18
+ paths:
19
+ - _ccache/
20
+
21
+ linux:
13
22
  stage: build_and_test
23
+ parallel:
24
+ matrix:
25
+ - PYTHON_VERSION:
26
+ - "3.9"
27
+ - "3.10"
28
+ - "3.11"
29
+ - "3.12"
30
+ - "pypy3"
31
+ TEST_GTK_VERSION: "3.0"
32
+ - PYTHON_VERSION: "3.11"
33
+ TEST_GTK_VERSION: "4.0"
14
34
  artifacts:
35
+ when: always
15
36
  paths:
16
37
  - coverage/
38
+ - test-results.xml
39
+ reports:
40
+ junit: test-results.xml
17
41
  script:
18
42
  - bash -x ./.gitlab-ci/test-docker.sh
19
43
 
20
- .mingw-defaults: &mingw-defaults
44
+ windows:
21
45
  stage: build_and_test
22
46
  tags:
23
47
  - win32-ps
48
+ parallel:
49
+ matrix:
50
+ - MSYSTEM:
51
+ - "MINGW32"
52
+ - "MINGW64"
24
53
  artifacts:
54
+ when: always
25
55
  paths:
26
56
  - coverage/
57
+ - _build/meson-logs
58
+ - test-results.xml
59
+ reports:
60
+ junit: test-results.xml
27
61
  script:
28
62
  - $env:CHERE_INVOKING = 'yes'
29
63
  - C:\msys64\usr\bin\pacman --noconfirm -Syyuu
@@ -54,8 +88,9 @@ pages:
54
88
  paths:
55
89
  - public
56
90
  expire_in: 30 days
57
- only:
58
- - main
91
+ rules:
92
+ - if: $CI_COMMIT_BRANCH == "main"
93
+ - if: $CI_COMMIT_TAG
59
94
 
60
95
  sdist:
61
96
  stage: build_and_test
@@ -66,91 +101,19 @@ sdist:
66
101
  - git config --global --add safe.directory "$CI_PROJECT_DIR"
67
102
  - bash -x ./.gitlab-ci/build-sdists.sh
68
103
 
69
- mingw32:
70
- variables:
71
- MSYSTEM: "MINGW32"
72
- <<: *mingw-defaults
73
-
74
- mingw64:
75
- variables:
76
- MSYSTEM: "MINGW64"
77
- <<: *mingw-defaults
78
-
79
- python3.9:
80
- variables:
81
- PYTHON_VERSION: "3.9"
82
- TEST_GTK_VERSION: "3.0"
83
- <<: *defaults
84
-
85
- python3.10:
86
- variables:
87
- PYTHON_VERSION: "3.10"
88
- TEST_GTK_VERSION: "3.0"
89
- <<: *defaults
90
-
91
- python3.11:
92
- variables:
93
- PYTHON_VERSION: "3.11"
94
- TEST_GTK_VERSION: "3.0"
95
- <<: *defaults
96
-
97
- python3.11-gtk4:
98
- variables:
99
- PYTHON_VERSION: "3.11"
100
- TEST_GTK_VERSION: "4.0"
101
- <<: *defaults
102
-
103
- python3.12:
104
- variables:
105
- PYTHON_VERSION: "3.12"
106
- TEST_GTK_VERSION: "3.0"
107
- <<: *defaults
108
-
109
- pypy3:
110
- variables:
111
- PYTHON_VERSION: "pypy3"
112
- TEST_GTK_VERSION: "3.0"
113
- <<: *defaults
114
-
115
- old-i386-py3:
116
- stage: build_and_test
117
- image: registry.gitlab.gnome.org/gnome/pygobject/old:v6
118
- artifacts:
119
- paths:
120
- - coverage/
121
- script:
122
- - bash -x ./.gitlab-ci/test-docker-old.sh
123
- # This build sometimes fails with message:
124
- # ninja: error: loading 'build.ninja': Value too large for defined data type
125
- retry:
126
- max: 2
127
- when: runner_system_failure
128
- exit_codes: 1
129
-
130
104
  gnome-master:
131
105
  stage: build_and_test
132
106
  image: quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master
133
107
  tags:
134
108
  - flatpak
109
+ parallel:
110
+ matrix:
111
+ - TEST_GTK_VERSION:
112
+ - "3.0"
113
+ - "4.0"
135
114
  artifacts:
136
115
  paths:
137
116
  - coverage/
138
- variables:
139
- TEST_GTK_VERSION: "3.0"
140
- script:
141
- - bash -x ./.gitlab-ci/test-flatpak.sh
142
-
143
- gnome-master-gtk4:
144
- allow_failure: true
145
- stage: build_and_test
146
- image: quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master
147
- tags:
148
- - flatpak
149
- artifacts:
150
- paths:
151
- - coverage/
152
- variables:
153
- TEST_GTK_VERSION: "4.0"
154
117
  script:
155
118
  - bash -x ./.gitlab-ci/test-flatpak.sh
156
119
 
@@ -168,10 +131,10 @@ python3.12-pdm:
168
131
  minimal-meson:
169
132
  allow_failure: true
170
133
  stage: build_and_test
171
- image: quay.io/fedora/fedora:39
134
+ image: quay.io/fedora/fedora:40
172
135
  before_script:
173
- - dnf install --assumeyes gcc meson git flex bison diffutils python3-devel python3-pytest
136
+ - dnf install --assumeyes gcc meson git flex bison diffutils python3-devel python3-pytest gobject-introspection-devel
174
137
  script:
175
138
  - meson setup _build
176
139
  - meson compile -C _build
177
- - PYTEST_ADDOPTS="-k 'not test_cairo'" meson test -C _build --verbose
140
+ - PYTEST_ADDOPTS="-sv -k 'not test_cairo'" meson test -C _build --suite pygobject --verbose
@@ -1,3 +1,14 @@
1
+ 3.50.1 - 2025-05-25
2
+ -------------------
3
+
4
+ * Backport: Fix event loop selector with Python 3.13 :mr:`423`
5
+
6
+ 3.50.0 - 2024-09-12
7
+ -------------------
8
+
9
+ * tests: Fix event test errors when GTK is not installed :mr:`347`
10
+
11
+
1
12
  3.49.0 - 2024-09-06 (pre-release)
2
13
  ---------------------------------
3
14
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyGObject
3
- Version: 3.49.0.dev0
3
+ Version: 3.50.1
4
4
  Summary: Python bindings for GObject Introspection
5
5
  Author-Email: James Henstridge <james@daa.com.au>
6
6
  Maintainer-Email: Christoph Reiter <creiter@src.gnome.org>, Arjan Molenaar <amolenaar@gnome.org>, Dan Yeaw <danyeaw@gnome.org>, Ignacio Casal Quinteiro <icq@gnome.org>
@@ -28,6 +28,7 @@ import threading
28
28
  import selectors
29
29
  import weakref
30
30
  import warnings
31
+ from collections.abc import Mapping
31
32
  from contextlib import contextmanager
32
33
  from . import _ossighelper
33
34
 
@@ -381,9 +382,33 @@ if sys.platform != 'win32':
381
382
  # Subclass to attach _tag
382
383
  pass
383
384
 
385
+ class _FileObjectMapping(Mapping):
386
+ def __init__(self, fd_dict):
387
+ self.fd_dict = fd_dict
388
+
389
+ def __len__(self):
390
+ return len(self.fd_dict)
391
+
392
+ def get(self, fileobj, default=None):
393
+ fd = _fileobj_to_fd(fileobj)
394
+ return self.fd_dict.get(fd, default)
395
+
396
+ def __getitem__(self, fileobj):
397
+ value = self.get(fileobj)
398
+ if value is None:
399
+ raise KeyError("{!r} is not registered".format(fileobj))
400
+ return value
401
+
402
+ def __iter__(self):
403
+ return iter(self.fd_dict)
404
+
384
405
  class _Selector(_SelectorMixin, selectors.BaseSelector):
385
406
  """A Selector for gi.events.GLibEventLoop registering python IO with GLib."""
386
407
 
408
+ def __init__(self, context, loop):
409
+ super().__init__(context, loop)
410
+ self._map = _FileObjectMapping(self._fd_to_key)
411
+
387
412
  def attach(self):
388
413
  self._source.attach(self._loop._context)
389
414
 
@@ -407,7 +432,9 @@ if sys.platform != 'win32':
407
432
  raise ValueError("Invalid events: {!r}".format(events))
408
433
 
409
434
  fd = _fileobj_to_fd(fileobj)
410
- assert fd not in self._fd_to_key
435
+ if fd in self._fd_to_key:
436
+ raise KeyError("{!r} (FD {}) is already registered"
437
+ .format(fileobj, fd))
411
438
 
412
439
  key = _SelectorKey(fileobj, fd, events, data)
413
440
 
@@ -430,15 +457,12 @@ if sys.platform != 'win32':
430
457
  # We could override modify, but it is only slightly when the "events" change.
431
458
 
432
459
  def get_key(self, fileobj):
433
- fd = _fileobj_to_fd(fileobj)
434
- return self._fd_to_key[fd]
460
+ return self._map[fileobj]
435
461
 
436
462
  def get_map(self):
437
- """Return a mapping of file objects to selector keys."""
438
- # Horribly inefficient
439
- # It should never be called and exists just to prevent issues if e.g.
440
- # python decides to use it for debug purposes.
441
- return {k.fileobj: k for k in self._fd_to_key.values()}
463
+ """Return a mapping of file objects or file descriptors to
464
+ selector keys."""
465
+ return self._map
442
466
 
443
467
 
444
468
  else:
@@ -1,7 +1,7 @@
1
1
  project(
2
2
  'pygobject',
3
3
  'c',
4
- version : '3.49.0.dev0',
4
+ version : '3.50.1',
5
5
  meson_version : '>= 0.64.0',
6
6
  default_options : ['warning_level=1', 'buildtype=debugoptimized']
7
7
  )
@@ -59,7 +59,10 @@ install = [
59
59
  "--config-setting=setup-args=-Dbuildtype=debug",
60
60
  "--config-setting=editable-verbose=true",
61
61
  ]
62
- build = ["--no-wheel"]
62
+ build = [
63
+ "--no-wheel",
64
+ "--config-setting=setup-args=-Dtests=true",
65
+ ]
63
66
 
64
67
  [tool.meson-python.args]
65
68
  setup = ["-Dtests=false", "-Dwheel=true", "--wrap-mode=nofallback"]
@@ -45,8 +45,14 @@ import sys
45
45
  import gi
46
46
  import gi.events
47
47
  import asyncio
48
+ import socket
48
49
  import threading
49
- from gi.repository import GLib, Gtk
50
+ from gi.repository import GLib
51
+
52
+ try:
53
+ from gi.repository import Gtk
54
+ except ImportError:
55
+ Gtk = None
50
56
 
51
57
 
52
58
  GTK4 = (Gtk and Gtk._version == "4.0")
@@ -75,6 +81,74 @@ class SubprocessWatcherTests(SubprocessMixin, TestCase):
75
81
  self.loop.close()
76
82
  super().tearDown()
77
83
 
84
+ # Fix broken test for Python 3.12
85
+ @unittest.skipUnless(sys.version_info >= (3, 12), "test is added in Python 3.12")
86
+ def test_subprocess_consistent_callbacks(self):
87
+ # gh-108973: Test that all subprocess protocol methods are called.
88
+ # The protocol methods are not called in a determistic order.
89
+ # The order depends on the event loop and the operating system.
90
+ events = []
91
+ fds = [1, 2]
92
+ expected = [
93
+ ('pipe_data_received', 1, b'stdout'),
94
+ ('pipe_data_received', 2, b'stderr'),
95
+ ('pipe_connection_lost', 1),
96
+ ('pipe_connection_lost', 2),
97
+ 'process_exited',
98
+ ]
99
+ per_fd_expected = [
100
+ 'pipe_data_received',
101
+ 'pipe_connection_lost',
102
+ ]
103
+
104
+ class MyProtocol(asyncio.SubprocessProtocol):
105
+ def __init__(self, exit_future: asyncio.Future) -> None:
106
+ self.exit_future = exit_future
107
+
108
+ def pipe_data_received(self, fd, data) -> None:
109
+ events.append(('pipe_data_received', fd, data))
110
+ self.exit_maybe()
111
+
112
+ def pipe_connection_lost(self, fd, exc) -> None:
113
+ events.append(('pipe_connection_lost', fd))
114
+ self.exit_maybe()
115
+
116
+ def process_exited(self) -> None:
117
+ events.append('process_exited')
118
+ self.exit_maybe()
119
+
120
+ def exit_maybe(self):
121
+ # Only exit when we got all expected events
122
+ if len(events) >= len(expected):
123
+ self.exit_future.set_result(True)
124
+
125
+ async def main() -> None:
126
+ loop = asyncio.get_running_loop()
127
+ exit_future = asyncio.Future()
128
+ code = 'import sys; sys.stdout.write("stdout"); sys.stderr.write("stderr")'
129
+ transport, _ = await loop.subprocess_exec(lambda: MyProtocol(exit_future),
130
+ sys.executable, '-c', code, stdin=None)
131
+ await exit_future
132
+ transport.close()
133
+
134
+ return events
135
+
136
+ events = self.loop.run_until_complete(main())
137
+
138
+ # First, make sure that we received all events
139
+ self.assertSetEqual(set(events), set(expected))
140
+
141
+ # Second, check order of pipe events per file descriptor
142
+ per_fd_events = {fd: [] for fd in fds}
143
+ for event in events:
144
+ if event == 'process_exited':
145
+ continue
146
+ name, fd = event[:2]
147
+ per_fd_events[fd].append(name)
148
+
149
+ for fd in fds:
150
+ self.assertEqual(per_fd_events[fd], per_fd_expected, (fd, events))
151
+
78
152
 
79
153
  class GLibEventLoopPolicyTests(unittest.TestCase):
80
154
 
@@ -232,6 +306,7 @@ class GLibEventLoopPolicyTests(unittest.TestCase):
232
306
  loop.close()
233
307
  self.assertEqual(called, True)
234
308
 
309
+ @unittest.skipUnless(Gtk, 'no Gtk')
235
310
  def test_recursive_stop(self):
236
311
  """Calling stop() on the EventLoop will quit it, even if iteration
237
312
  is done recursively."""
@@ -256,3 +331,63 @@ class GLibEventLoopPolicyTests(unittest.TestCase):
256
331
  GLib.MainLoop().run()
257
332
 
258
333
  loop.close()
334
+
335
+ @unittest.skipIf(sys.platform == 'win32', 'add reader/writer not implemented')
336
+ def test_source_fileobj_fd(self):
337
+ """Regression test for
338
+ https://gitlab.gnome.org/GNOME/pygobject/-/issues/689
339
+ """
340
+ class Echo:
341
+ def __init__(self, sock, expect_bytes):
342
+ self.sock = sock
343
+ self.sent_bytes = 0
344
+ self.expect_bytes = expect_bytes
345
+ self.done = asyncio.Future()
346
+ self.data = bytes()
347
+
348
+ def send(self):
349
+ if self.done.done():
350
+ return
351
+ if self.sent_bytes < len(self.data):
352
+ self.sent_bytes += self.sock.send(
353
+ self.data[self.sent_bytes:])
354
+ print('sent', self.data)
355
+ if self.sent_bytes >= self.expect_bytes:
356
+ self.done.set_result(None)
357
+ self.sock.shutdown(socket.SHUT_WR)
358
+
359
+ def recv(self):
360
+ if self.done.done():
361
+ return
362
+ self.data += self.sock.recv(self.expect_bytes)
363
+ print('received', self.data)
364
+ if len(self.data) >= self.expect_bytes:
365
+ self.sock.shutdown(socket.SHUT_RD)
366
+
367
+ async def run():
368
+ loop = asyncio.get_running_loop()
369
+ s1, s2 = socket.socketpair()
370
+ sample = b'Hello!'
371
+ e = Echo(s1, len(sample))
372
+ # register using file object and file descriptor
373
+ loop.add_reader(s1, e.recv)
374
+ loop.add_writer(s1.fileno(), e.send)
375
+ s2.sendall(sample)
376
+ await asyncio.wait_for(e.done, timeout=2.0)
377
+ echo = bytes()
378
+ for _ in range(len(sample)):
379
+ echo += s2.recv(len(sample))
380
+ if len(echo) == len(sample):
381
+ break
382
+ # remove using file object and file descriptor
383
+ loop.remove_reader(s1)
384
+ loop.remove_writer(s1.fileno())
385
+ s1.close()
386
+ s2.close()
387
+ # check if the data was echoed correctly
388
+ self.assertEqual(sample, echo)
389
+
390
+ policy = self.create_policy()
391
+ loop = policy.get_event_loop()
392
+ loop.run_until_complete(run())
393
+ loop.close()
@@ -1,3 +0,0 @@
1
- [flake8]
2
- ignore=E501,E123,E124,E402,E731,E722,W504
3
- exclude=subprojects,build,.venv
@@ -1,28 +0,0 @@
1
- #!/bin/bash
2
-
3
- set -e
4
-
5
- rm -Rf _venv_sdist
6
- python3 -m venv _venv_sdist
7
- source _venv_sdist/bin/activate
8
- mkdir -p dist
9
-
10
- # First we create a tarball for GNOME
11
- python -m pip install --upgrade meson pycairo
12
- rm -Rf _sdist_build
13
- meson setup _sdist_build
14
- meson dist --no-tests --allow-dirty -C _sdist_build
15
- mv _sdist_build/meson-dist/*.tar.xz dist/
16
-
17
- VERSION=$(meson introspect --projectinfo --indent _sdist_build | awk -F'"' '/version/ { print $4 }')
18
-
19
- rm -Rf _sdist_build
20
-
21
- # Now the sdist for pypi
22
- # Mark odd versions as PEP440 development versions (e.g. 0.1.0 -> 0.1.0.dev0)
23
- [[ "$VERSION" =~ ^[0-9]\.[0-9]*[13579]\. ]] && meson rewrite kwargs set project / version ${VERSION}.dev0
24
-
25
- python -m pip install --upgrade build
26
- python -m build --sdist
27
-
28
- meson rewrite kwargs set project / version ${VERSION}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes