uWSGI 2.0.27__tar.gz → 2.0.28__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 (698) hide show
  1. {uwsgi-2.0.27 → uwsgi-2.0.28}/.github/workflows/test.yml +2 -1
  2. {uwsgi-2.0.27 → uwsgi-2.0.28}/PKG-INFO +1 -1
  3. uwsgi-2.0.28/buildconf/integration-tests.ini +4 -0
  4. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/master_utils.c +0 -6
  5. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/signal.c +1 -1
  6. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/uwsgi.c +10 -2
  7. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/uwsgiplugin.py +13 -8
  8. uwsgi-2.0.28/t/cgi/hello.cgi +6 -0
  9. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/php/config.ini +1 -1
  10. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/python/manage_script_name/manage_script_name_test.ini +0 -4
  11. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/python/manage_script_name/useless_app.py +1 -1
  12. uwsgi-2.0.28/t/rack/app.ru +9 -0
  13. uwsgi-2.0.28/t/runner +258 -0
  14. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/static/config.ini +1 -1
  15. {uwsgi-2.0.27 → uwsgi-2.0.28}/uwsgi.gemspec +1 -1
  16. {uwsgi-2.0.27 → uwsgi-2.0.28}/uwsgiconfig.py +1 -1
  17. uwsgi-2.0.27/buildconf/integration-tests.ini +0 -4
  18. uwsgi-2.0.27/t/python/manage_script_name/test_manage_script_name.py +0 -59
  19. uwsgi-2.0.27/t/runner +0 -144
  20. {uwsgi-2.0.27 → uwsgi-2.0.28}/.github/workflows/compile-test.yml +0 -0
  21. {uwsgi-2.0.27 → uwsgi-2.0.28}/.gitignore +0 -0
  22. {uwsgi-2.0.27 → uwsgi-2.0.28}/CONTRIBUTORS +0 -0
  23. {uwsgi-2.0.27 → uwsgi-2.0.28}/INSTALL +0 -0
  24. {uwsgi-2.0.27 → uwsgi-2.0.28}/LICENSE +0 -0
  25. {uwsgi-2.0.27 → uwsgi-2.0.28}/Makefile +0 -0
  26. {uwsgi-2.0.27 → uwsgi-2.0.28}/README +0 -0
  27. {uwsgi-2.0.27 → uwsgi-2.0.28}/apache2/mod_Ruwsgi.c +0 -0
  28. {uwsgi-2.0.27 → uwsgi-2.0.28}/apache2/mod_proxy_uwsgi.c +0 -0
  29. {uwsgi-2.0.27 → uwsgi-2.0.28}/apache2/mod_uwsgi.c +0 -0
  30. {uwsgi-2.0.27 → uwsgi-2.0.28}/attach.py +0 -0
  31. {uwsgi-2.0.27 → uwsgi-2.0.28}/bin/uwsgi +0 -0
  32. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/all.ini +0 -0
  33. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/asyncio.ini +0 -0
  34. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/base.ini +0 -0
  35. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/cgi.ini +0 -0
  36. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/core.ini +0 -0
  37. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/coroae.ini +0 -0
  38. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/coverity.ini +0 -0
  39. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/default.ini +0 -0
  40. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/django.ini +0 -0
  41. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/embedded.ini +0 -0
  42. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/erlang.ini +0 -0
  43. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/gccgo.ini +0 -0
  44. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/gevent.ini +0 -0
  45. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/glusterfs.ini +0 -0
  46. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/gridfs.ini +0 -0
  47. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/jwsgi.ini +0 -0
  48. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/lib.ini +0 -0
  49. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/lua.ini +0 -0
  50. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/luap.ini +0 -0
  51. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/minimal.ini +0 -0
  52. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/modular.ini +0 -0
  53. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/mono.ini +0 -0
  54. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/nolang.ini +0 -0
  55. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/package.ini +0 -0
  56. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/php.ini +0 -0
  57. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/plonly.ini +0 -0
  58. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/ppa.ini +0 -0
  59. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/psgi.ini +0 -0
  60. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/pyerl.ini +0 -0
  61. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/pylua.ini +0 -0
  62. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/pyonly.ini +0 -0
  63. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/pypy.ini +0 -0
  64. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/pypyonly.ini +0 -0
  65. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/pyring.ini +0 -0
  66. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/pyuwsgi.ini +0 -0
  67. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/pyuwsginossl.ini +0 -0
  68. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/rack.ini +0 -0
  69. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/rados.ini +0 -0
  70. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/rbonly.ini +0 -0
  71. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/ring.ini +0 -0
  72. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/ruby2.ini +0 -0
  73. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/servlet.ini +0 -0
  74. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/travis.ini +0 -0
  75. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/unbit.ini +0 -0
  76. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/unbitstaff.ini +0 -0
  77. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/unittest.ini +0 -0
  78. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/uwsgi.it.ini +0 -0
  79. {uwsgi-2.0.27 → uwsgi-2.0.28}/buildconf/v8.ini +0 -0
  80. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/Uwsgi.pm +0 -0
  81. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/binder.pl +0 -0
  82. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/centos_init_script +0 -0
  83. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/cgi_python.c +0 -0
  84. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/cryptologger.rb +0 -0
  85. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/emperormon.ru +0 -0
  86. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/fdconf.pl +0 -0
  87. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/graphite_uwsgi.py +0 -0
  88. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/launchd/it.unbit.uwsgi.emperor.plist +0 -0
  89. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/launchd/it.unbit.uwsgi.plist +0 -0
  90. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/loadapp.pl +0 -0
  91. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/pypy/uwsgi_pypy_greenlets.py +0 -0
  92. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/pyuwsgi.py +0 -0
  93. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/runuwsgi.py +0 -0
  94. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/securesubscribe.pl +0 -0
  95. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/spoolqueue/producer.py +0 -0
  96. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/spoolqueue/tasks.py +0 -0
  97. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/spoolqueue/tasksconsumer.py +0 -0
  98. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/subscribe.pl +0 -0
  99. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/twuwsgi.py +0 -0
  100. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/upstart/emperor.conf +0 -0
  101. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/upstart/uwsgi.conf +0 -0
  102. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/upython +0 -0
  103. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/urack.rb +0 -0
  104. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/uwsgi-cache-monitor.py +0 -0
  105. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/uwsgi.erl +0 -0
  106. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/uwsgi.java +0 -0
  107. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/uwsgi.rb +0 -0
  108. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/uwsgi_client.c +0 -0
  109. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/uwsgi_dynamic_client.c +0 -0
  110. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/uwsgisubscribers.ru +0 -0
  111. {uwsgi-2.0.27 → uwsgi-2.0.28}/contrib/xinetd_uwsgi +0 -0
  112. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/alarm.c +0 -0
  113. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/async.c +0 -0
  114. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/buffer.c +0 -0
  115. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/cache.c +0 -0
  116. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/chunked.c +0 -0
  117. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/clang_fake.c +0 -0
  118. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/clock.c +0 -0
  119. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/config.c +0 -0
  120. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/cookie.c +0 -0
  121. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/cron.c +0 -0
  122. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/daemons.c +0 -0
  123. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/emperor.c +0 -0
  124. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/errors.c +0 -0
  125. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/event.c +0 -0
  126. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/exceptions.c +0 -0
  127. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/fifo.c +0 -0
  128. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/fsmon.c +0 -0
  129. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/gateway.c +0 -0
  130. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/hash.c +0 -0
  131. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/hooks.c +0 -0
  132. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/ini.c +0 -0
  133. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/init.c +0 -0
  134. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/io.c +0 -0
  135. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/json.c +0 -0
  136. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/legion.c +0 -0
  137. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/lock.c +0 -0
  138. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/logging. +0 -0
  139. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/logging.c +0 -0
  140. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/loop.c +0 -0
  141. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/master.c +0 -0
  142. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/master_checks.c +0 -0
  143. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/master_events.c +0 -0
  144. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/metrics.c +0 -0
  145. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/mount.c +0 -0
  146. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/mule.c +0 -0
  147. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/notify.c +0 -0
  148. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/offload.c +0 -0
  149. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/plugins.c +0 -0
  150. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/plugins_builder.c +0 -0
  151. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/progress.c +0 -0
  152. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/protocol.c +0 -0
  153. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/querystring.c +0 -0
  154. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/queue.c +0 -0
  155. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/rb_timers.c +0 -0
  156. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/reader.c +0 -0
  157. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/regexp.c +0 -0
  158. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/routing.c +0 -0
  159. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/rpc.c +0 -0
  160. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/sendfile.c +0 -0
  161. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/setup_utils.c +0 -0
  162. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/sharedarea.c +0 -0
  163. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/skel.c +0 -0
  164. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/snmp.c +0 -0
  165. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/socket.c +0 -0
  166. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/spooler.c +0 -0
  167. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/ssl.c +0 -0
  168. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/static.c +0 -0
  169. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/stats.c +0 -0
  170. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/storage.c +0 -0
  171. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/strings.c +0 -0
  172. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/subscription.c +0 -0
  173. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/timebomb.c +0 -0
  174. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/transformations.c +0 -0
  175. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/utils.c +0 -0
  176. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/websockets.c +0 -0
  177. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/writer.c +0 -0
  178. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/xmlconf.c +0 -0
  179. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/yaml.c +0 -0
  180. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/zeus.c +0 -0
  181. {uwsgi-2.0.27 → uwsgi-2.0.28}/core/zlib.c +0 -0
  182. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/bootstrap.py +0 -0
  183. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/bootstrap2.py +0 -0
  184. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/bootstrap3.py +0 -0
  185. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/bootstrap4.py +0 -0
  186. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/bootstrap5.py +0 -0
  187. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/config.lua +0 -0
  188. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/config.ru +0 -0
  189. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/config17.ru +0 -0
  190. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/config2.lua +0 -0
  191. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/config2.ru +0 -0
  192. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/config30.ru +0 -0
  193. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/corostream.pl +0 -0
  194. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/debug.ini +0 -0
  195. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/fibers.ru +0 -0
  196. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/fibers.yml +0 -0
  197. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/flaskpost.py +0 -0
  198. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/heavytest.ini +0 -0
  199. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/heavytest.py +0 -0
  200. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/info_uwsgi.php +0 -0
  201. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/logic.ini +0 -0
  202. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/mega.xml +0 -0
  203. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/mjpeg_stream.py +0 -0
  204. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/mojoapp.pl +0 -0
  205. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/multi.ini +0 -0
  206. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/multi.xml +0 -0
  207. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/multiapp.py +0 -0
  208. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/protected.ini +0 -0
  209. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/router.lua +0 -0
  210. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/simple_app.py +0 -0
  211. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/simple_app_wsgi2.py +0 -0
  212. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/simple_logger.py +0 -0
  213. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/sites.xml +0 -0
  214. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/sputnik.ws +0 -0
  215. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/staticfilesnmp.py +0 -0
  216. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/taskqueue.py +0 -0
  217. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/uwsgi.xml +0 -0
  218. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/uwsgirouter.py +0 -0
  219. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/uwsgirouter2.py +0 -0
  220. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/uwsgirouter3.py +0 -0
  221. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/uwsgirouter4.py +0 -0
  222. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/uwsgirouter5.py +0 -0
  223. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/uwsgistatus.py +0 -0
  224. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/welcome.ini +0 -0
  225. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/welcome.py +0 -0
  226. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/welcome3.py +0 -0
  227. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/werkzeug.js +0 -0
  228. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/werkzeug.yml +0 -0
  229. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/werkzeug_strict.yml +0 -0
  230. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/xmlindex-html.xsl +0 -0
  231. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/xmlindex.ini +0 -0
  232. {uwsgi-2.0.27 → uwsgi-2.0.28}/examples/zmqgevent.ini +0 -0
  233. {uwsgi-2.0.27 → uwsgi-2.0.28}/ext/uwsgi/extconf.rb +0 -0
  234. {uwsgi-2.0.27 → uwsgi-2.0.28}/install.sh +0 -0
  235. {uwsgi-2.0.27 → uwsgi-2.0.28}/lib/linux_ns.c +0 -0
  236. {uwsgi-2.0.27 → uwsgi-2.0.28}/lib/netlink.c +0 -0
  237. {uwsgi-2.0.27 → uwsgi-2.0.28}/lib/sun_fixes.c +0 -0
  238. {uwsgi-2.0.27 → uwsgi-2.0.28}/logo_uWSGI.png +0 -0
  239. {uwsgi-2.0.27 → uwsgi-2.0.28}/logo_uWSGI.svg +0 -0
  240. {uwsgi-2.0.27 → uwsgi-2.0.28}/mongrel2-uwsgi.conf +0 -0
  241. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/airbrake/airbrake_plugin.c +0 -0
  242. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/airbrake/uwsgiplugin.py +0 -0
  243. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/alarm_curl/alarm_curl_plugin.c +0 -0
  244. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/alarm_curl/uwsgiplugin.py +0 -0
  245. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/alarm_speech/alarm_speech.m +0 -0
  246. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/alarm_speech/uwsgiplugin.py +0 -0
  247. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/alarm_xmpp/alarm_xmpp_plugin.c +0 -0
  248. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/alarm_xmpp/gloox.cc +0 -0
  249. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/alarm_xmpp/uwsgiplugin.py +0 -0
  250. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/asyncio/asyncio.c +0 -0
  251. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/asyncio/uwsgiplugin.py +0 -0
  252. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cache/cache.c +0 -0
  253. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cache/uwsgiplugin.py +0 -0
  254. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/carbon/carbon.c +0 -0
  255. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/carbon/uwsgiplugin.py +0 -0
  256. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cgi/cgi_plugin.c +0 -0
  257. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cgi/uwsgiplugin.py +0 -0
  258. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cheaper_backlog2/cheaper_backlog2.c +0 -0
  259. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cheaper_backlog2/uwsgiplugin.py +0 -0
  260. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cheaper_busyness/cheaper_busyness.c +0 -0
  261. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cheaper_busyness/uwsgiplugin.py +0 -0
  262. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/clock_monotonic/clock_monotonic.c +0 -0
  263. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/clock_monotonic/uwsgiplugin.py +0 -0
  264. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/clock_realtime/clock_realtime.c +0 -0
  265. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/clock_realtime/uwsgiplugin.py +0 -0
  266. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/corerouter/corerouter.c +0 -0
  267. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/corerouter/cr.h +0 -0
  268. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/corerouter/cr_common.c +0 -0
  269. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/corerouter/cr_map.c +0 -0
  270. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/corerouter/uwsgiplugin.py +0 -0
  271. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/coroae/coroae.c +0 -0
  272. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/coroae/uwsgiplugin.py +0 -0
  273. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cplusplus/base.cc +0 -0
  274. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cplusplus/plugin.c +0 -0
  275. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/cplusplus/uwsgiplugin.py +0 -0
  276. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/curl_cron/curl_cron.c +0 -0
  277. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/curl_cron/uwsgiplugin.py +0 -0
  278. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/dumbloop/dumb.c +0 -0
  279. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/dumbloop/uwsgiplugin.py +0 -0
  280. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/dummy/dummy.c +0 -0
  281. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/dummy/uwsgiplugin.py +0 -0
  282. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/echo/echo_plugin.c +0 -0
  283. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/echo/uwsgiplugin.py +0 -0
  284. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_amqp/amqp.c +0 -0
  285. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_amqp/emperor_amqp.c +0 -0
  286. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_amqp/uwsgiplugin.py +0 -0
  287. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_mongodb/emperor_mongodb.cc +0 -0
  288. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_mongodb/plugin.c +0 -0
  289. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_mongodb/uwsgiplugin.py +0 -0
  290. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_pg/emperor_pg.c +0 -0
  291. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_pg/uwsgiplugin.py +0 -0
  292. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_zeromq/emperor_zeromq.c +0 -0
  293. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/emperor_zeromq/uwsgiplugin.py +0 -0
  294. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/example/example_plugin.c +0 -0
  295. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/example/uwsgiplugin.py +0 -0
  296. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/exception_log/exception_log.c +0 -0
  297. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/exception_log/uwsgiplugin.py +0 -0
  298. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/fastrouter/fastrouter.c +0 -0
  299. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/fastrouter/uwsgiplugin.py +0 -0
  300. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/fiber/fiber.c +0 -0
  301. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/fiber/uwsgiplugin.py +0 -0
  302. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/forkptyrouter/forkptyrouter.c +0 -0
  303. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/forkptyrouter/uwsgiplugin.py +0 -0
  304. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gccgo/gccgo_plugin.c +0 -0
  305. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gccgo/uwsgi.go +0 -0
  306. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gccgo/uwsgiplugin.py +0 -0
  307. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/geoip/geoip.c +0 -0
  308. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/geoip/uwsgiplugin.py +0 -0
  309. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gevent/gevent.c +0 -0
  310. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gevent/gevent.h +0 -0
  311. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gevent/hooks.c +0 -0
  312. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gevent/uwsgiplugin.py +0 -0
  313. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/glusterfs/glusterfs.c +0 -0
  314. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/glusterfs/uwsgiplugin.py +0 -0
  315. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/graylog2/graylog2_plugin.c +0 -0
  316. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/graylog2/uwsgiplugin.py +0 -0
  317. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/greenlet/greenlet.c +0 -0
  318. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/greenlet/uwsgiplugin.py +0 -0
  319. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gridfs/gridfs.cc +0 -0
  320. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gridfs/plugin.c +0 -0
  321. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/gridfs/uwsgiplugin.py +0 -0
  322. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/http/common.h +0 -0
  323. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/http/http.c +0 -0
  324. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/http/https.c +0 -0
  325. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/http/keepalive.c +0 -0
  326. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/http/spdy3.c +0 -0
  327. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/http/spdy3.h +0 -0
  328. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/http/uwsgiplugin.py +0 -0
  329. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/jvm/jvm.h +0 -0
  330. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/jvm/jvm_plugin.c +0 -0
  331. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/jvm/uwsgi.java +0 -0
  332. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/jvm/uwsgiplugin.py +0 -0
  333. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/jwsgi/jwsgi_plugin.c +0 -0
  334. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/jwsgi/uwsgiplugin.py +0 -0
  335. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ldap/ldap.c +0 -0
  336. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ldap/uwsgiplugin.py +0 -0
  337. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/legion_cache_fetch/legion_cache_fetch.c +0 -0
  338. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/legion_cache_fetch/uwsgiplugin.py +0 -0
  339. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/libffi/libffi.c +0 -0
  340. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/libffi/uwsgiplugin.py +0 -0
  341. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/libtcc/libtcc.c +0 -0
  342. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/libtcc/uwsgiplugin.py +0 -0
  343. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logcrypto/logcrypto.c +0 -0
  344. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logcrypto/uwsgiplugin.py +0 -0
  345. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logfile/logfile.c +0 -0
  346. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logfile/uwsgiplugin.py +0 -0
  347. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logpipe/logpipe.c +0 -0
  348. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logpipe/uwsgiplugin.py +0 -0
  349. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logsocket/logsocket_plugin.c +0 -0
  350. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logsocket/uwsgiplugin.py +0 -0
  351. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logzmq/plugin.c +0 -0
  352. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/logzmq/uwsgiplugin.py +0 -0
  353. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/lua/lua_plugin.c +0 -0
  354. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/lua/uwsgiplugin.py +0 -0
  355. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/matheval/math.c +0 -0
  356. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/matheval/uwsgiplugin.py +0 -0
  357. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mongodb/plugin.c +0 -0
  358. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mongodb/uwsgiplugin.py +0 -0
  359. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mongodblog/mongodblog_plugin.c +0 -0
  360. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mongodblog/uwsgiplugin.py +0 -0
  361. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mongrel2/mongrel2.c +0 -0
  362. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mongrel2/uwsgiplugin.py +0 -0
  363. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mono/mono_plugin.c +0 -0
  364. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mono/uwsgi.cs +0 -0
  365. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/mono/uwsgiplugin.py +0 -0
  366. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/msgpack/msgpack.c +0 -0
  367. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/msgpack/uwsgiplugin.py +0 -0
  368. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/nagios/nagios.c +0 -0
  369. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/nagios/uwsgiplugin.py +0 -0
  370. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/notfound/notfound.c +0 -0
  371. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/notfound/uwsgiplugin.py +0 -0
  372. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/objc_gc/objc_gc.m +0 -0
  373. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/objc_gc/uwsgiplugin.py +0 -0
  374. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pam/pam.c +0 -0
  375. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pam/uwsgiplugin.py +0 -0
  376. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/php/common.h +0 -0
  377. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/php/php_plugin.c +0 -0
  378. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/php/session.c +0 -0
  379. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/php/uwsgiplugin.py +0 -0
  380. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ping/ping_plugin.c +0 -0
  381. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ping/uwsgiplugin.py +0 -0
  382. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/psgi/psgi.h +0 -0
  383. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/psgi/psgi_loader.c +0 -0
  384. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/psgi/psgi_plugin.c +0 -0
  385. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/psgi/psgi_response.c +0 -0
  386. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/psgi/uwsgi_plmodule.c +0 -0
  387. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/psgi/uwsgiplugin.py +0 -0
  388. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pty/pty.c +0 -0
  389. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pty/uwsgiplugin.py +0 -0
  390. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pypy/README +0 -0
  391. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pypy/pypy_plugin.c +0 -0
  392. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pypy/pypy_setup.py +0 -0
  393. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pypy/uwsgiplugin.py +0 -0
  394. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/gil.c +0 -0
  395. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/profiler.c +0 -0
  396. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/pump_subhandler.c +0 -0
  397. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/pyloader.c +0 -0
  398. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/python_plugin.c +0 -0
  399. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/pyutils.c +0 -0
  400. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/raw.c +0 -0
  401. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/symimporter.c +0 -0
  402. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/tracebacker.c +0 -0
  403. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/uwsgi_pymodule.c +0 -0
  404. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/uwsgi_python.h +0 -0
  405. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/web3_subhandler.c +0 -0
  406. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/wsgi_handlers.c +0 -0
  407. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/wsgi_headers.c +0 -0
  408. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/python/wsgi_subhandler.c +0 -0
  409. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pyuwsgi/pyuwsgi.c +0 -0
  410. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/pyuwsgi/uwsgiplugin.py +0 -0
  411. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rack/rack_api.c +0 -0
  412. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rack/rack_plugin.c +0 -0
  413. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rack/uwsgi_rack.h +0 -0
  414. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rack/uwsgiplugin.py +0 -0
  415. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rados/rados.c +0 -0
  416. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rados/uwsgiplugin.py +0 -0
  417. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rawrouter/rawrouter.c +0 -0
  418. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rawrouter/uwsgiplugin.py +0 -0
  419. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rbthreads/rbthreads.c +0 -0
  420. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rbthreads/uwsgiplugin.py +0 -0
  421. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/redislog/redislog_plugin.c +0 -0
  422. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/redislog/uwsgiplugin.py +0 -0
  423. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ring/ring_plugin.c +0 -0
  424. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ring/uwsgiplugin.py +0 -0
  425. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_access/router_access.c +0 -0
  426. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_access/uwsgiplugin.py +0 -0
  427. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_basicauth/router_basicauth.c +0 -0
  428. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_basicauth/uwsgiplugin.py +0 -0
  429. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_cache/router_cache.c +0 -0
  430. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_cache/uwsgiplugin.py +0 -0
  431. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_expires/expires.c +0 -0
  432. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_expires/uwsgiplugin.py +0 -0
  433. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_hash/router_hash.c +0 -0
  434. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_hash/uwsgiplugin.py +0 -0
  435. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_http/router_http.c +0 -0
  436. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_http/uwsgiplugin.py +0 -0
  437. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_memcached/router_memcached.c +0 -0
  438. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_memcached/uwsgiplugin.py +0 -0
  439. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_metrics/plugin.c +0 -0
  440. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_metrics/uwsgiplugin.py +0 -0
  441. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_radius/radius.c +0 -0
  442. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_radius/uwsgiplugin.py +0 -0
  443. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_redirect/router_redirect.c +0 -0
  444. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_redirect/uwsgiplugin.py +0 -0
  445. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_redis/router_redis.c +0 -0
  446. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_redis/uwsgiplugin.py +0 -0
  447. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_rewrite/router_rewrite.c +0 -0
  448. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_rewrite/uwsgiplugin.py +0 -0
  449. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_spnego/router_spnego.c +0 -0
  450. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_spnego/uwsgiplugin.py +0 -0
  451. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_static/router_static.c +0 -0
  452. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_static/uwsgiplugin.py +0 -0
  453. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_uwsgi/router_uwsgi.c +0 -0
  454. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_uwsgi/uwsgiplugin.py +0 -0
  455. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_xmldir/router_xmldir.c +0 -0
  456. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/router_xmldir/uwsgiplugin.py +0 -0
  457. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rpc/rpc_plugin.c +0 -0
  458. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rpc/uwsgiplugin.py +0 -0
  459. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rrdtool/rrdtool.c +0 -0
  460. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rrdtool/uwsgiplugin.py +0 -0
  461. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rsyslog/rsyslog_plugin.c +0 -0
  462. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/rsyslog/uwsgiplugin.py +0 -0
  463. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ruby19/uwsgiplugin.py +0 -0
  464. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/servlet/servlet_plugin.c +0 -0
  465. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/servlet/uwsgi_servlet.java +0 -0
  466. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/servlet/uwsgiplugin.py +0 -0
  467. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/signal/signal_plugin.c +0 -0
  468. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/signal/uwsgiplugin.py +0 -0
  469. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/spooler/spooler_plugin.c +0 -0
  470. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/spooler/uwsgiplugin.py +0 -0
  471. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/sqlite3/plugin.c +0 -0
  472. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/sqlite3/uwsgiplugin.py +0 -0
  473. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ssi/ssi.c +0 -0
  474. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ssi/uwsgiplugin.py +0 -0
  475. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/sslrouter/sslrouter.c +0 -0
  476. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/sslrouter/uwsgiplugin.py +0 -0
  477. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stackless/stackless.c +0 -0
  478. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stackless/uwsgiplugin.py +0 -0
  479. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_file/plugin.c +0 -0
  480. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_file/uwsgiplugin.py +0 -0
  481. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_mongodb/plugin.c +0 -0
  482. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_mongodb/stats_pusher_mongodb.cc +0 -0
  483. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_mongodb/uwsgiplugin.py +0 -0
  484. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_socket/plugin.c +0 -0
  485. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_socket/uwsgiplugin.py +0 -0
  486. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_statsd/plugin.c +0 -0
  487. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/stats_pusher_statsd/uwsgiplugin.py +0 -0
  488. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/symcall/symcall_plugin.c +0 -0
  489. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/symcall/uwsgiplugin.py +0 -0
  490. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/syslog/syslog_plugin.c +0 -0
  491. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/syslog/uwsgiplugin.py +0 -0
  492. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/systemd_logger/systemd_logger.c +0 -0
  493. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/systemd_logger/uwsgiplugin.py +0 -0
  494. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/tornado/tornado.c +0 -0
  495. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/tornado/uwsgiplugin.py +0 -0
  496. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_chunked/chunked.c +0 -0
  497. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_chunked/uwsgiplugin.py +0 -0
  498. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_gzip/gzip.c +0 -0
  499. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_gzip/uwsgiplugin.py +0 -0
  500. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_offload/offload.c +0 -0
  501. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_offload/uwsgiplugin.py +0 -0
  502. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_template/tt.c +0 -0
  503. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_template/uwsgiplugin.py +0 -0
  504. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_tofile/tofile.c +0 -0
  505. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_tofile/uwsgiplugin.py +0 -0
  506. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_toupper/toupper.c +0 -0
  507. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/transformation_toupper/uwsgiplugin.py +0 -0
  508. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/tuntap/common.c +0 -0
  509. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/tuntap/common.h +0 -0
  510. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/tuntap/firewall.c +0 -0
  511. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/tuntap/tuntap.c +0 -0
  512. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/tuntap/uwsgiplugin.py +0 -0
  513. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ugreen/ugreen.c +0 -0
  514. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/ugreen/uwsgiplugin.py +0 -0
  515. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/v8/plugin.c +0 -0
  516. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/v8/uwsgiplugin.py +0 -0
  517. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/v8/v8_commonjs.cc +0 -0
  518. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/v8/v8_jsgi.cc +0 -0
  519. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/v8/v8_uwsgi.cc +0 -0
  520. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/v8/v8_uwsgi.h +0 -0
  521. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/webdav/uwsgiplugin.py +0 -0
  522. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/webdav/webdav.c +0 -0
  523. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/xattr/uwsgiplugin.py +0 -0
  524. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/xattr/xattr.c +0 -0
  525. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/xslt/uwsgiplugin.py +0 -0
  526. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/xslt/xslt.c +0 -0
  527. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/zabbix/plugin.c +0 -0
  528. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/zabbix/uwsgiplugin.py +0 -0
  529. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/zergpool/uwsgiplugin.py +0 -0
  530. {uwsgi-2.0.27 → uwsgi-2.0.28}/plugins/zergpool/zergpool.c +0 -0
  531. {uwsgi-2.0.27 → uwsgi-2.0.28}/proto/BUILD +0 -0
  532. {uwsgi-2.0.27 → uwsgi-2.0.28}/proto/base.c +0 -0
  533. {uwsgi-2.0.27 → uwsgi-2.0.28}/proto/fastcgi.c +0 -0
  534. {uwsgi-2.0.27 → uwsgi-2.0.28}/proto/http.c +0 -0
  535. {uwsgi-2.0.27 → uwsgi-2.0.28}/proto/puwsgi.c +0 -0
  536. {uwsgi-2.0.27 → uwsgi-2.0.28}/proto/scgi.c +0 -0
  537. {uwsgi-2.0.27 → uwsgi-2.0.28}/proto/uwsgi.c +0 -0
  538. {uwsgi-2.0.27 → uwsgi-2.0.28}/setup.cpyext.py +0 -0
  539. {uwsgi-2.0.27 → uwsgi-2.0.28}/setup.py +0 -0
  540. {uwsgi-2.0.27 → uwsgi-2.0.28}/setup.pyuwsgi.py +0 -0
  541. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/cachebitmap.ini +0 -0
  542. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/cachebitmap.py +0 -0
  543. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/cachetest.py +0 -0
  544. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/clojure/myapp.clj +0 -0
  545. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/core/apps/read_body_and_send.pl +0 -0
  546. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/core/read_body_and_send.pl +0 -0
  547. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/core/url_sanitize.pl +0 -0
  548. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/go/cachetest.go +0 -0
  549. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/go/complextest.go +0 -0
  550. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/go/uploadtest.go +0 -0
  551. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/java/rpc.java +0 -0
  552. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/lua/basic.lua +0 -0
  553. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/mono/cache.aspx +0 -0
  554. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/mules/mulebrain.py +0 -0
  555. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/mules/reload.py +0 -0
  556. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/mules/signal_management.py +0 -0
  557. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/active_workers_signal.pl +0 -0
  558. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/apps/input_with_offset.pl +0 -0
  559. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/test.psgi +0 -0
  560. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/test_benchmark.pl +0 -0
  561. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/test_harakiri.psgi +0 -0
  562. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/test_hello.psgi +0 -0
  563. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/test_input_with_offset.pl +0 -0
  564. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/test_post.psgi +0 -0
  565. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/test_sleepy.psgi +0 -0
  566. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/perl/test_streaming.psgi +0 -0
  567. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/pypy/config.ini +0 -0
  568. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/pypy/t_continulet1.py +0 -0
  569. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/pypy/t_continulet2.py +0 -0
  570. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/python/forcecl.py +0 -0
  571. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/python/helloapp.py +0 -0
  572. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/python/spooler_decorators/spooler_decorator_test.ini +0 -0
  573. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/python/spooler_decorators/spooler_decorator_tests.py +0 -0
  574. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/python/spooler_decorators/spooler_handlers.py +0 -0
  575. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/python/testba.py +0 -0
  576. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/ring/README.md +0 -0
  577. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/ring/config.ini +0 -0
  578. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/ring/project.clj +0 -0
  579. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/ring/src/uwsgi/ring/tests/app.clj +0 -0
  580. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/ring/src/uwsgi/ring/tests/basic.clj +0 -0
  581. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/ring/src/uwsgi/ring/tests/body.clj +0 -0
  582. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/ring/src/uwsgi/ring/tests/simple.clj +0 -0
  583. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/ring/src/uwsgi/ring/tests/upload.clj +0 -0
  584. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/routing/auth.ini +0 -0
  585. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/routing/errorlimiter.ini +0 -0
  586. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/routing/limiter.ini +0 -0
  587. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/sharedarea/bigranges.ini +0 -0
  588. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/sharedarea/bigranges.py +0 -0
  589. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/sharedarea/sharedarea_incdec.ini +0 -0
  590. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/sharedarea/sharedarea_incdec.py +0 -0
  591. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/spooler/read.py +0 -0
  592. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/spooler/reload.py +0 -0
  593. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/spooler/spooldir/.gitignore +0 -0
  594. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/webdav/carddav.ini +0 -0
  595. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/xslt/cd.xml +0 -0
  596. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/xslt/cd.xml.xslt +0 -0
  597. {uwsgi-2.0.27 → uwsgi-2.0.28}/t/xslt/routex.ini +0 -0
  598. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/Responder.pm +0 -0
  599. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/__init__.py +0 -0
  600. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/badthread.py +0 -0
  601. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/badwrites.py +0 -0
  602. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/cpubound_async.py +0 -0
  603. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/cpubound_green.py +0 -0
  604. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/cpubound_stackless.py +0 -0
  605. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/main.py +0 -0
  606. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/master-nothreads.ini +0 -0
  607. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/master-singleinterpreter-threads-10workers.ini +0 -0
  608. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/master-singleinterpreter-threads-1worker.ini +0 -0
  609. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/master-threads-10workers.ini +0 -0
  610. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/master-threads-1worker.ini +0 -0
  611. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/nomaster-threads-10workers.ini +0 -0
  612. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/nomaster-threads-1worker.ini +0 -0
  613. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/deadlocks/sitecustomize.py +0 -0
  614. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/decoratortest.py +0 -0
  615. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/fileserve_async.py +0 -0
  616. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/gevent_spool.py +0 -0
  617. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/gh-deadlocks.sh +0 -0
  618. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/gh-python.sh +0 -0
  619. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/gh-rack.sh +0 -0
  620. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/gh-shared.sh +0 -0
  621. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/grunter.py +0 -0
  622. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/harakiri.py +0 -0
  623. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/iobound_async.py +0 -0
  624. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/iobound_async_unix.py +0 -0
  625. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/iobound_green.py +0 -0
  626. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/logger.py +0 -0
  627. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/mako_ugreen.py +0 -0
  628. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/mulefunc.py +0 -0
  629. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/multiapp.txt +0 -0
  630. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/myadmin.py +0 -0
  631. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/pgbound_async.py +0 -0
  632. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/picazzo.py +0 -0
  633. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/psycogreen_green.py +0 -0
  634. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/psycopg2_green.py +0 -0
  635. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/pump.py +0 -0
  636. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/queue.py +0 -0
  637. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/refcount.py +0 -0
  638. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/rpc.lua +0 -0
  639. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/rpc.py +0 -0
  640. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/runningthread.py +0 -0
  641. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/sendchunked.py +0 -0
  642. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/sharedarea.py +0 -0
  643. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/sig.lua +0 -0
  644. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/signals.py +0 -0
  645. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/sigwait.py +0 -0
  646. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/sleeping_async.py +0 -0
  647. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/sleeping_green.py +0 -0
  648. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/sleepthreadasync.py +0 -0
  649. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/slow.py +0 -0
  650. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/spoolme.py +0 -0
  651. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/static/test.txt +0 -0
  652. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/static/test2.txt +0 -0
  653. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/staticfile.py +0 -0
  654. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/streamer.psgi +0 -0
  655. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/t/static.pl +0 -0
  656. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/templates/queue.html +0 -0
  657. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/testapp.py +0 -0
  658. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/testfilewrapper.py +0 -0
  659. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/testgevent.py +0 -0
  660. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/testpy3.py +0 -0
  661. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/testrpc.py +0 -0
  662. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/testsignals.py +0 -0
  663. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/testworkers.py +0 -0
  664. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/testyieldnone.py +0 -0
  665. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/threads.py +0 -0
  666. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/threads_atexit.py +0 -0
  667. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/threads_heavy.py +0 -0
  668. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/travis.sh +0 -0
  669. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/ugevent.py +0 -0
  670. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/web3.py +0 -0
  671. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets.py +0 -0
  672. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets_chat.pl +0 -0
  673. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets_chat.py +0 -0
  674. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets_chat_async.py +0 -0
  675. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets_chat_asyncio.py +0 -0
  676. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets_echo.lua +0 -0
  677. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets_echo.pl +0 -0
  678. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets_echo.py +0 -0
  679. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/websockets_echo.ru +0 -0
  680. {uwsgi-2.0.27 → uwsgi-2.0.28}/tests/werkzeug_app.py +0 -0
  681. {uwsgi-2.0.27 → uwsgi-2.0.28}/unittest/Makefile +0 -0
  682. {uwsgi-2.0.27 → uwsgi-2.0.28}/unittest/check_core.c +0 -0
  683. {uwsgi-2.0.27 → uwsgi-2.0.28}/unittest/check_regexp.c +0 -0
  684. {uwsgi-2.0.27 → uwsgi-2.0.28}/uwsgi.h +0 -0
  685. {uwsgi-2.0.27 → uwsgi-2.0.28}/uwsgi_main.c +0 -0
  686. {uwsgi-2.0.27 → uwsgi-2.0.28}/uwsgidecorators.py +0 -0
  687. {uwsgi-2.0.27 → uwsgi-2.0.28}/uwsgidsl.rb +0 -0
  688. {uwsgi-2.0.27 → uwsgi-2.0.28}/valgrind/README +0 -0
  689. {uwsgi-2.0.27 → uwsgi-2.0.28}/valgrind/valgrind-generate-sups.sh +0 -0
  690. {uwsgi-2.0.27 → uwsgi-2.0.28}/vassals/broodlord.ini +0 -0
  691. {uwsgi-2.0.27 → uwsgi-2.0.28}/vassals/cc.ini +0 -0
  692. {uwsgi-2.0.27 → uwsgi-2.0.28}/vassals/multi.xml +0 -0
  693. {uwsgi-2.0.27 → uwsgi-2.0.28}/vhosttest/flask001/app1.py +0 -0
  694. {uwsgi-2.0.27 → uwsgi-2.0.28}/vhosttest/flask002/app2.py +0 -0
  695. {uwsgi-2.0.27 → uwsgi-2.0.28}/vhosttest/flask003/app3.py +0 -0
  696. {uwsgi-2.0.27 → uwsgi-2.0.28}/vhosttest/flask004/app4.py +0 -0
  697. {uwsgi-2.0.27 → uwsgi-2.0.28}/vhosttest/flask005/app5.py +0 -0
  698. {uwsgi-2.0.27 → uwsgi-2.0.28}/vhosttest/nginx.conf +0 -0
@@ -30,7 +30,8 @@ jobs:
30
30
  sudo apt install --no-install-recommends -qqyf \
31
31
  libpcre2-dev libjansson-dev libcap2-dev \
32
32
  php-dev libphp-embed libargon2-dev libsodium-dev \
33
- pypy3
33
+ pypy3 default-jdk-headless libperl-dev \
34
+ ruby-dev ruby-rack
34
35
  - uses: actions/checkout@v4
35
36
  - name: Set env
36
37
  run: echo "PROFILE=integration-tests" >> $GITHUB_ENV
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: uWSGI
3
- Version: 2.0.27
3
+ Version: 2.0.28
4
4
  Summary: The uWSGI server
5
5
  Home-page: https://uwsgi-docs.readthedocs.io/en/latest/
6
6
  Author: Unbit
@@ -0,0 +1,4 @@
1
+ [uwsgi]
2
+ inherit = base
3
+ main_plugin =
4
+ plugins = notfound,python,php,pypy,jvm,jwsgi,psgi,cgi,rack
@@ -54,12 +54,6 @@ void uwsgi_destroy_processes() {
54
54
 
55
55
  uwsgi_detach_daemons();
56
56
 
57
- for (i = 1; i <= uwsgi.numproc; i++) {
58
- if (uwsgi.workers[i].pid > 0) {
59
- waitpid(uwsgi.workers[i].pid, &waitpid_status, 0);
60
- }
61
- }
62
-
63
57
  for (i = 0; i < ushared->gateways_cnt; i++) {
64
58
  if (ushared->gateways[i].pid > 0) {
65
59
  kill(ushared->gateways[i].pid, SIGKILL);
@@ -495,7 +495,7 @@ void uwsgi_receive_signal(int fd, char *name, int id) {
495
495
 
496
496
  destroy:
497
497
  // better to kill the whole worker...
498
- uwsgi_log_verbose("uWSGI %s %d screams: UAAAAAAH my master disconnected: i will kill myself !!!\n", name, id);
498
+ uwsgi_log_verbose("uWSGI %s %d error: the master disconnected from this worker. Shutting down the worker.\n", name, id);
499
499
  end_me(0);
500
500
 
501
501
  }
@@ -208,7 +208,7 @@ static struct uwsgi_option uwsgi_base_options[] = {
208
208
  {"procname-master", required_argument, 0, "set master process name", uwsgi_opt_set_str, &uwsgi.procname_master, UWSGI_OPT_PROCNAME},
209
209
 
210
210
  {"single-interpreter", no_argument, 'i', "do not use multiple interpreters (where available)", uwsgi_opt_true, &uwsgi.single_interpreter, 0},
211
- {"need-app", no_argument, 0, "exit if no app can be loaded", uwsgi_opt_true, &uwsgi.need_app, 0},
211
+ {"need-app", optional_argument, 0, "exit if no app can be loaded", uwsgi_opt_true, &uwsgi.need_app, 0},
212
212
  {"master", no_argument, 'M', "enable master process", uwsgi_opt_true, &uwsgi.master_process, 0},
213
213
  {"honour-stdin", no_argument, 0, "do not remap stdin to /dev/null", uwsgi_opt_true, &uwsgi.honour_stdin, 0},
214
214
  {"emperor", required_argument, 0, "run the Emperor", uwsgi_opt_add_string_list, &uwsgi.emperor, 0},
@@ -1319,6 +1319,8 @@ void kill_them_all(int signum) {
1319
1319
  // gracefully destroy
1320
1320
  void gracefully_kill_them_all(int signum) {
1321
1321
 
1322
+ int waitpid_status;
1323
+
1322
1324
  if (uwsgi_instance_is_dying) return;
1323
1325
  uwsgi.status.gracefully_destroying = 1;
1324
1326
 
@@ -1341,6 +1343,12 @@ void gracefully_kill_them_all(int signum) {
1341
1343
  }
1342
1344
  }
1343
1345
 
1346
+ for (i = 1; i <= uwsgi.numproc; i++) {
1347
+ if (uwsgi.workers[i].pid > 0) {
1348
+ waitpid(uwsgi.workers[i].pid, &waitpid_status, 0);
1349
+ }
1350
+ }
1351
+
1344
1352
  uwsgi_destroy_processes();
1345
1353
  }
1346
1354
 
@@ -1442,7 +1450,7 @@ void reap_them_all(int signum) {
1442
1450
 
1443
1451
  void harakiri() {
1444
1452
 
1445
- uwsgi_log("\nF*CK !!! i must kill myself (pid: %d app_id: %d)...\n", uwsgi.mypid, uwsgi.wsgi_req->app_id);
1453
+ uwsgi_log("\nKilling the current process (pid: %d app_id: %d)...\n", uwsgi.mypid, uwsgi.wsgi_req->app_id);
1446
1454
 
1447
1455
  if (!uwsgi.master_process) {
1448
1456
  uwsgi_log("*** if you want your workers to be automatically respawned consider enabling the uWSGI master process ***\n");
@@ -45,7 +45,8 @@ LDFLAGS = []
45
45
  if not 'UWSGI_PYTHON_NOLIB' in os.environ:
46
46
  LIBS = sysconfig.get_config_var('LIBS').split() + sysconfig.get_config_var('SYSLIBS').split()
47
47
  # check if it is a non-shared build (but please, add --enable-shared to your python's ./configure script)
48
- if not sysconfig.get_config_var('Py_ENABLE_SHARED'):
48
+ use_static_lib = not sysconfig.get_config_var('Py_ENABLE_SHARED')
49
+ if use_static_lib:
49
50
  libdir = sysconfig.get_config_var('LIBPL')
50
51
  # libdir does not exists, try to get it from the venv
51
52
  version = get_python_version()
@@ -75,13 +76,17 @@ if not 'UWSGI_PYTHON_NOLIB' in os.environ:
75
76
  libpath = '%s/%s' % (libdir, sysconfig.get_config_var('LIBRARY'))
76
77
  if not os.path.exists(libpath):
77
78
  libpath = '%s/libpython%s.a' % (libdir, version)
78
- LIBS.append(libpath)
79
- # hack for messy linkers/compilers
80
- if '-lutil' in LIBS:
81
- LIBS.append('-lutil')
82
- if '-lrt' in LIBS:
83
- LIBS.append('-lrt')
84
- else:
79
+
80
+ if os.path.exists(libpath):
81
+ LIBS.append(libpath)
82
+ # hack for messy linkers/compilers
83
+ if '-lutil' in LIBS:
84
+ LIBS.append('-lutil')
85
+ if '-lrt' in LIBS:
86
+ LIBS.append('-lrt')
87
+ else:
88
+ use_static_lib = False
89
+ if not use_static_lib:
85
90
  try:
86
91
  libdir = sysconfig.get_config_var('LIBDIR')
87
92
  except:
@@ -0,0 +1,6 @@
1
+ #!/bin/sh
2
+
3
+ echo "Content-Type: text/plain"
4
+ echo
5
+ echo "Hello world!"
6
+ echo "PATH_INFO=${PATH_INFO}"
@@ -10,4 +10,4 @@ cache2 = name=session,items=1000,store=/tmp/uwsgi-session-cache,bitmap=1
10
10
  php-set = session.save_handler=uwsgi
11
11
  php-set = session.save_path=session
12
12
 
13
- php-docroot = t/php/
13
+ php-docroot = %d
@@ -1,8 +1,4 @@
1
1
  [uwsgi]
2
- http-socket = :8080
3
-
4
- master = 1
5
-
6
2
  ; Three apps on three mountpoints
7
3
  wsgi-file = %d/useless_app.py
8
4
 
@@ -1,3 +1,3 @@
1
1
  def application(env, start_response):
2
2
  start_response('200 OK', [('Content-Type', 'text/html')])
3
- return env['SCRIPT_NAME']
3
+ return [env['SCRIPT_NAME'].encode('ascii'), ]
@@ -0,0 +1,9 @@
1
+ class App
2
+
3
+ def call(environ)
4
+ [200, {'Content-Type' => 'text/html'}, ['Hello']]
5
+ end
6
+
7
+ end
8
+
9
+ run App.new
uwsgi-2.0.28/t/runner ADDED
@@ -0,0 +1,258 @@
1
+ #!/usr/bin/python3
2
+ #
3
+ # This test suite runner runs some integration tests for uwsgi, that is
4
+ # each test launches a test server with a specific configuration and
5
+ # verifies (usually using a HTTP request) that this test server behaves as
6
+ # expected.
7
+ #
8
+ # buildconf/integration-tests.ini holds the build configuration for this
9
+ # to run fine.
10
+
11
+
12
+ import os
13
+ import requests
14
+ import signal
15
+ import socket
16
+ import subprocess
17
+ import sys
18
+ import time
19
+ import unittest
20
+
21
+
22
+ TESTS_DIR = os.path.dirname(__file__)
23
+ UWSGI_BINARY = os.getenv("UWSGI_BINARY", os.path.join(TESTS_DIR, "..", "uwsgi"))
24
+ UWSGI_PLUGINS = os.getenv("UWSGI_PLUGINS_TEST", "all").split(" ")
25
+ UWSGI_ADDR = "127.0.0.1"
26
+ UWSGI_PORT = 8000
27
+ UWSGI_HTTP = f"{UWSGI_ADDR}:{UWSGI_PORT}"
28
+
29
+
30
+ def plugins_available(plugins):
31
+ available = False
32
+ if "all" in UWSGI_PLUGINS:
33
+ available = True
34
+ else:
35
+ available = all([plugin in UWSGI_PLUGINS for plugin in plugins])
36
+ return available, f"{plugins} plugins not available but required for this test case"
37
+
38
+
39
+ class UwsgiTest(unittest.TestCase):
40
+
41
+ def start_server(self, args):
42
+ self.testserver = subprocess.Popen(
43
+ [UWSGI_BINARY] + args,
44
+ stdout=subprocess.PIPE,
45
+ stderr=subprocess.STDOUT,
46
+ text=True,
47
+ )
48
+
49
+ def uwsgi_ready(self):
50
+ try:
51
+ s = socket.socket()
52
+ s.connect(
53
+ (
54
+ UWSGI_ADDR,
55
+ UWSGI_PORT,
56
+ )
57
+ )
58
+ except socket.error:
59
+ return False
60
+ else:
61
+ return True
62
+ finally:
63
+ s.close()
64
+
65
+ def start_listen_server(self, args):
66
+ self.start_server(["--http-socket", UWSGI_HTTP] + args)
67
+
68
+ # ensure server is ready
69
+ retries = 10
70
+ while not self.uwsgi_ready() and retries > 0:
71
+ time.sleep(0.1)
72
+ retries = retries - 1
73
+ if retries == 0:
74
+ raise RuntimeError("uwsgi test server is not available")
75
+
76
+ def tearDown(self):
77
+ if hasattr(self._outcome, "errors"):
78
+ # Python 3.4 - 3.10 (These two methods have no side effects)
79
+ result = self.defaultTestResult()
80
+ self._feedErrorsToResult(result, self._outcome.errors)
81
+ else:
82
+ # Python 3.11+
83
+ result = self._outcome.result
84
+ ok = not (result.errors + result.failures)
85
+
86
+ if hasattr(self, "testserver"):
87
+ self.testserver.send_signal(signal.SIGTERM)
88
+ if not ok:
89
+ print(self.testserver.stdout.read(), file=sys.stderr)
90
+
91
+ self.testserver.wait()
92
+ self.testserver.stdout.close()
93
+
94
+ def assert_GET_body(self, url_path, body_expected):
95
+ with requests.get(f"http://{UWSGI_HTTP}{url_path}") as r:
96
+ self.assertEqual(r.text, body_expected)
97
+
98
+ def test_static_expires(self):
99
+ self.start_listen_server(
100
+ [
101
+ "--plugin",
102
+ "notfound",
103
+ os.path.join(TESTS_DIR, "static", "config.ini"),
104
+ ]
105
+ )
106
+
107
+ with requests.get(f"http://{UWSGI_HTTP}/foobar/config.ini") as r:
108
+ self.assertTrue("Expires" in r.headers)
109
+
110
+ @unittest.skipUnless(*plugins_available(["python"]))
111
+ def test_mountpoints(self):
112
+ self.start_listen_server(
113
+ [
114
+ "--plugin",
115
+ "python",
116
+ os.path.join(
117
+ TESTS_DIR,
118
+ "python",
119
+ "manage_script_name",
120
+ "manage_script_name_test.ini",
121
+ ),
122
+ ]
123
+ )
124
+
125
+ mps = {"/foo", "/foobis/", "/footris/"}
126
+
127
+ for mp in mps:
128
+ # Requests to /foo should kick-in the managed script name.
129
+ self.assert_GET_body(mp, mp)
130
+
131
+ ends = mp.endswith("/")
132
+
133
+ # And equally requests to /foo/
134
+ self.assert_GET_body(f"{mp}/" if not ends else f"{mp}"[:-1], mp)
135
+
136
+ # Or correct requests (/foo/resource)
137
+ self.assert_GET_body(f"{mp}/resource" if not ends else f"{mp}resource", mp)
138
+
139
+ mps = {
140
+ "/fooanything",
141
+ "/foobisis/",
142
+ "/foofighters",
143
+ }
144
+
145
+ for mp in mps:
146
+ self.assert_GET_body(mp, "")
147
+
148
+ @unittest.skipUnless(*plugins_available(["python"]))
149
+ def test_python3_helloworld(self):
150
+ self.start_listen_server(
151
+ [
152
+ "--plugin",
153
+ "python",
154
+ "--wsgi-file",
155
+ os.path.join(TESTS_DIR, "python", "helloapp.py"),
156
+ ]
157
+ )
158
+
159
+ self.assert_GET_body("/", "Hello World")
160
+
161
+ @unittest.skipUnless(*plugins_available(["pypy"]))
162
+ def test_pypy3_helloworld(self):
163
+ self.start_listen_server(
164
+ [
165
+ os.path.join(TESTS_DIR, "pypy", "config.ini"),
166
+ ]
167
+ )
168
+
169
+ self.assert_GET_body("/", "Hello World")
170
+
171
+ @unittest.skipUnless(*plugins_available(["php"]))
172
+ def test_php_session(self):
173
+ self.start_listen_server(
174
+ [
175
+ os.path.join(TESTS_DIR, "php", "config.ini"),
176
+ ]
177
+ )
178
+
179
+ self.assert_GET_body("/test.php", "PASS\n")
180
+
181
+ @unittest.skipUnless(*plugins_available(["jvm"]))
182
+ def test_jvm_hellworld(self):
183
+ classpath = ":".join(
184
+ [
185
+ "/usr/share/java/uwsgi.jar",
186
+ os.path.join(TESTS_DIR, "java"),
187
+ os.path.join(TESTS_DIR, "..", "plugins", "jvm"),
188
+ ]
189
+ )
190
+
191
+ subprocess.call(
192
+ [
193
+ "javac",
194
+ "-classpath",
195
+ classpath,
196
+ os.path.join(TESTS_DIR, "java", "rpc.java"),
197
+ ]
198
+ )
199
+
200
+ self.start_listen_server(
201
+ [
202
+ "--need-app=0",
203
+ "--plugins",
204
+ "0:jvm,jwsgi",
205
+ "--jvm-classpath",
206
+ classpath,
207
+ "--jwsgi",
208
+ "rpc:application",
209
+ ]
210
+ )
211
+
212
+ self.assert_GET_body("/", "<h1>null</h1>")
213
+
214
+ @unittest.skipUnless(*plugins_available(["psgi"]))
215
+ def test_psgi_helloworld(self):
216
+ self.start_listen_server(
217
+ [
218
+ "--plugins",
219
+ "psgi",
220
+ "--psgi",
221
+ os.path.join(TESTS_DIR, "perl", "test_hello.psgi"),
222
+ ]
223
+ )
224
+
225
+ self.assert_GET_body("/", "Hello, world!")
226
+
227
+ @unittest.skipUnless(*plugins_available(["cgi"]))
228
+ def test_cgi_helloworld(self):
229
+ self.start_listen_server(
230
+ [
231
+ "--need-app=0",
232
+ "--plugins",
233
+ "0:cgi",
234
+ "--cgi",
235
+ os.path.join(TESTS_DIR, "cgi", "hello.cgi"),
236
+ ]
237
+ )
238
+
239
+ self.assert_GET_body(
240
+ "/foobar/say_hello", "Hello world!\nPATH_INFO=/foobar/say_hello\n"
241
+ )
242
+
243
+ @unittest.skipUnless(*plugins_available(["rack"]))
244
+ def test_rack_helloworld(self):
245
+ self.start_listen_server(
246
+ [
247
+ "--plugins",
248
+ "0:rack",
249
+ "--rack",
250
+ os.path.join(TESTS_DIR, "rack", "app.ru"),
251
+ ]
252
+ )
253
+
254
+ self.assert_GET_body("/", "Hello")
255
+
256
+
257
+ if __name__ == "__main__":
258
+ unittest.main()
@@ -1,4 +1,4 @@
1
1
  [uwsgi]
2
2
  need-app = False
3
- static-map = /foobar=t/static
3
+ static-map = /foobar=%d
4
4
  static-expires-uri = ^/foobar/ 315360000
@@ -2,7 +2,7 @@ Gem::Specification.new do |s|
2
2
  s.name = 'uwsgi'
3
3
  s.license = 'GPL-2'
4
4
  s.version = `python -c "import uwsgiconfig as uc; print uc.uwsgi_version"`.sub(/-dev-.*/,'')
5
- s.date = '2024-09-23'
5
+ s.date = '2024-10-26'
6
6
  s.summary = "uWSGI"
7
7
  s.description = "The uWSGI server for Ruby/Rack"
8
8
  s.authors = ["Unbit"]
@@ -1,6 +1,6 @@
1
1
  # uWSGI build system
2
2
 
3
- uwsgi_version = '2.0.27'
3
+ uwsgi_version = '2.0.28'
4
4
 
5
5
  import os
6
6
  import re
@@ -1,4 +0,0 @@
1
- [uwsgi]
2
- inherit = base
3
- main_plugin =
4
- plugins = python,php,pypy
@@ -1,59 +0,0 @@
1
- #! /usr/bin/env python3
2
- # coding = utf-8
3
- # author = Adriano Di Luzio
4
-
5
- # I require requests!
6
-
7
- """
8
- First run:
9
- $ ./uwsgi t/python/manage_script_name/manage_script_name_test.ini
10
-
11
- Then run me!
12
- """
13
-
14
- import unittest
15
- import requests
16
-
17
- HOST = "http://127.0.0.1:8080"
18
-
19
-
20
- class ManageScriptNameTest(unittest.TestCase):
21
-
22
- def test_classic_mountpoints(self):
23
- mps = {
24
- "/foo",
25
- "/foobis/",
26
- "/footris/"
27
- }
28
-
29
- for mp in mps:
30
- # Requests to /foo should kick-in the managed script name.
31
- r = requests.get(HOST + mp)
32
- self.assertEqual(r.text, mp)
33
-
34
- ends = mp.endswith("/")
35
-
36
- # And equally requests to /foo/
37
- r = requests.get(
38
- HOST + mp + "/") if not ends else requests.get(HOST + mp[:-1])
39
- self.assertEqual(r.text, mp)
40
-
41
- # Or correct requests (/foo/resource)
42
- r = requests.get(
43
- HOST + mp + "/" + "resource") if not ends else requests.get(HOST + mp + "resource")
44
- self.assertEqual(r.text, mp)
45
-
46
- def test_intriguing_mountpoints(self):
47
- mps = {
48
- "/fooanything",
49
- "/foobisis/",
50
- "/foofighters",
51
- }
52
-
53
- for mp in mps:
54
- r = requests.get(HOST + mp)
55
- self.assertEqual(r.text, "")
56
-
57
-
58
- if __name__ == '__main__':
59
- unittest.main(verbosity=2)
uwsgi-2.0.27/t/runner DELETED
@@ -1,144 +0,0 @@
1
- #!/usr/bin/python3
2
- #
3
- # This test suite runner runs some integration tests for uwsgi, that is
4
- # each test launches a test server with a specific configuration and
5
- # verifies (usually using a HTTP request) that this test server behaves as
6
- # expected.
7
- #
8
- # buildconf/integration-tests.ini holds the build configuration for this
9
- # to run fine.
10
-
11
-
12
- import os
13
- import requests
14
- import signal
15
- import socket
16
- import subprocess
17
- import sys
18
- import time
19
- import unittest
20
-
21
-
22
- TESTS_DIR = os.path.dirname(__file__)
23
- UWSGI_BINARY = os.getenv("UWSGI_BINARY", os.path.join(TESTS_DIR, "..", "uwsgi"))
24
- UWSGI_PLUGINS = os.getenv("UWSGI_PLUGINS", "all").split(" ")
25
- UWSGI_ADDR = "127.0.0.1"
26
- UWSGI_PORT = 8000
27
- UWSGI_HTTP = f"{UWSGI_ADDR}:{UWSGI_PORT}"
28
-
29
-
30
- def plugins_available(plugins):
31
- available = False
32
- if "all" in UWSGI_PLUGINS:
33
- available = True
34
- else:
35
- available = all([plugin in UWSGI_PLUGINS for plugin in plugins])
36
- return available, f"{plugins} plugins not available but required for this test case"
37
-
38
-
39
- class UwsgiTest(unittest.TestCase):
40
-
41
- def start_server(self, args):
42
- self.testserver = subprocess.Popen(
43
- [UWSGI_BINARY] + args,
44
- stdout=subprocess.PIPE,
45
- stderr=subprocess.STDOUT,
46
- text=True,
47
- )
48
-
49
- def uwsgi_ready(self):
50
- try:
51
- s = socket.socket()
52
- s.connect(
53
- (
54
- UWSGI_ADDR,
55
- UWSGI_PORT,
56
- )
57
- )
58
- except socket.error:
59
- return False
60
- else:
61
- return True
62
- finally:
63
- s.close()
64
-
65
- def start_listen_server(self, args):
66
- self.start_server(["--http-socket", UWSGI_HTTP] + args)
67
-
68
- # ensure server is ready
69
- retries = 10
70
- while not self.uwsgi_ready() and retries > 0:
71
- time.sleep(0.1)
72
- retries = retries - 1
73
- if retries == 0:
74
- raise RuntimeError("uwsgi test server is not available")
75
-
76
- def tearDown(self):
77
- if hasattr(self._outcome, "errors"):
78
- # Python 3.4 - 3.10 (These two methods have no side effects)
79
- result = self.defaultTestResult()
80
- self._feedErrorsToResult(result, self._outcome.errors)
81
- else:
82
- # Python 3.11+
83
- result = self._outcome.result
84
- ok = not (result.errors + result.failures)
85
-
86
- self.testserver.send_signal(signal.SIGTERM)
87
- if not ok:
88
- print(self.testserver.stdout.read(), file=sys.stderr)
89
-
90
- self.testserver.wait()
91
- self.testserver.stdout.close()
92
-
93
- @unittest.skipUnless(*plugins_available(["python"]))
94
- def test_static_expires(self):
95
- self.start_listen_server(
96
- [
97
- "--plugin",
98
- "python", # provide a request plugin
99
- os.path.join(TESTS_DIR, "static", "config.ini"),
100
- ]
101
- )
102
-
103
- with requests.get(f"http://{UWSGI_HTTP}/foobar/config.ini") as r:
104
- self.assertTrue("Expires" in r.headers)
105
-
106
- @unittest.skipUnless(*plugins_available(["python"]))
107
- def test_python3_helloworld(self):
108
- self.start_listen_server(
109
- [
110
- "--plugin",
111
- "python",
112
- "--wsgi-file",
113
- os.path.join(TESTS_DIR, "python", "helloapp.py"),
114
- ]
115
- )
116
-
117
- with requests.get(f"http://{UWSGI_HTTP}/") as r:
118
- self.assertEqual(r.text, "Hello World")
119
-
120
- @unittest.skipUnless(*plugins_available(["pypy"]))
121
- def test_pypy3_helloworld(self):
122
- self.start_listen_server(
123
- [
124
- os.path.join(TESTS_DIR, "pypy", "config.ini"),
125
- ]
126
- )
127
-
128
- with requests.get(f"http://{UWSGI_HTTP}/") as r:
129
- self.assertEqual(r.text, "Hello World")
130
-
131
- @unittest.skipUnless(*plugins_available(["php"]))
132
- def test_php_session(self):
133
- self.start_listen_server(
134
- [
135
- os.path.join(TESTS_DIR, "php", "config.ini"),
136
- ]
137
- )
138
-
139
- with requests.get(f"http://{UWSGI_HTTP}/test.php") as r:
140
- self.assertEqual(r.text, "PASS\n")
141
-
142
-
143
- if __name__ == "__main__":
144
- unittest.main()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes