mod-wsgi 6.0.2__tar.gz → 6.0.3.dev1__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 (95) hide show
  1. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/PKG-INFO +1 -1
  2. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/PKG-INFO +1 -1
  3. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/setup.py +1 -1
  4. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/cli.py +27 -5
  5. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/platform.py +1 -1
  6. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/reloader.py +11 -0
  7. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/server.py +10 -7
  8. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_version.h +2 -2
  9. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/CREDITS.rst +0 -0
  10. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/LICENSE +0 -0
  11. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/MANIFEST.in +0 -0
  12. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/Makefile.in +0 -0
  13. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/README-express.rst +0 -0
  14. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/README-standalone.rst +0 -0
  15. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/README.rst +0 -0
  16. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/configure +0 -0
  17. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/configure.ac +0 -0
  18. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/images/__init__.py +0 -0
  19. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/images/snake-whiskey.jpg +0 -0
  20. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/SOURCES.txt +0 -0
  21. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/dependency_links.txt +0 -0
  22. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/entry_points.txt +0 -0
  23. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/not-zip-safe +0 -0
  24. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/top_level.txt +0 -0
  25. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/setup.cfg +0 -0
  26. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/__init__.py +0 -0
  27. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/diagnostics/__init__.py +0 -0
  28. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/diagnostics/environ.py +0 -0
  29. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/diagnostics/hello.py +0 -0
  30. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/__init__.py +0 -0
  31. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/apache.py +0 -0
  32. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/management/__init__.py +0 -0
  33. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/management/commands/__init__.py +0 -0
  34. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/management/commands/runmodwsgi.py +0 -0
  35. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/options.py +0 -0
  36. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/runtime.py +0 -0
  37. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/scripts.py +0 -0
  38. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/__init__.py +0 -0
  39. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/management/__init__.py +0 -0
  40. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/management/commands/__init__.py +0 -0
  41. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/management/commands/runmodwsgi.py +0 -0
  42. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/mod_wsgi.c +0 -0
  43. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_adapter.c +0 -0
  44. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_adapter.h +0 -0
  45. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_apache.c +0 -0
  46. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_apache.h +0 -0
  47. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_auth.c +0 -0
  48. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_auth.h +0 -0
  49. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_buckets.c +0 -0
  50. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_buckets.h +0 -0
  51. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_config.c +0 -0
  52. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_config.h +0 -0
  53. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_convert.c +0 -0
  54. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_convert.h +0 -0
  55. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_daemon.c +0 -0
  56. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_daemon.h +0 -0
  57. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_dispatch.c +0 -0
  58. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_dispatch.h +0 -0
  59. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_environ.c +0 -0
  60. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_environ.h +0 -0
  61. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_execute.c +0 -0
  62. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_execute.h +0 -0
  63. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_gc.c +0 -0
  64. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_gc.h +0 -0
  65. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_input.c +0 -0
  66. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_input.h +0 -0
  67. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_interp.c +0 -0
  68. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_interp.h +0 -0
  69. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_logger.c +0 -0
  70. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_logger.h +0 -0
  71. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_memory.c +0 -0
  72. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_memory.h +0 -0
  73. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_metrics.c +0 -0
  74. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_metrics.h +0 -0
  75. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_module.c +0 -0
  76. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_module.h +0 -0
  77. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_python.h +0 -0
  78. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_remote.c +0 -0
  79. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_remote.h +0 -0
  80. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_restrict.c +0 -0
  81. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_restrict.h +0 -0
  82. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_server.c +0 -0
  83. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_server.h +0 -0
  84. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_shutdown.c +0 -0
  85. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_shutdown.h +0 -0
  86. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_signal.c +0 -0
  87. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_signal.h +0 -0
  88. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_stream.c +0 -0
  89. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_stream.h +0 -0
  90. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_telemetry.c +0 -0
  91. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_telemetry.h +0 -0
  92. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_thread.c +0 -0
  93. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_thread.h +0 -0
  94. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_validate.c +0 -0
  95. {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_validate.h +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mod_wsgi
3
- Version: 6.0.2
3
+ Version: 6.0.3.dev1
4
4
  Summary: Installer for Apache/mod_wsgi.
5
5
  Home-page: https://www.modwsgi.org/
6
6
  Author: Graham Dumpleton
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mod_wsgi
3
- Version: 6.0.2
3
+ Version: 6.0.3.dev1
4
4
  Summary: Installer for Apache/mod_wsgi.
5
5
  Home-page: https://www.modwsgi.org/
6
6
  Author: Graham Dumpleton
@@ -456,6 +456,6 @@ setup(name = package_name,
456
456
  entry_points = { 'console_scripts':
457
457
  ['mod_wsgi-express = mod_wsgi.express.cli:main'],},
458
458
  zip_safe = False,
459
- install_requires = standalone and ['mod_wsgi-httpd==2.4.67.1'] or [],
459
+ install_requires = standalone and ['mod_wsgi-httpd==2.4.68.1'] or [],
460
460
  python_requires='>=3.10',
461
461
  )
@@ -67,11 +67,33 @@ def cmd_start_server(params):
67
67
  httpd_arguments.extend(['-f', config['httpd_conf']])
68
68
  httpd_arguments.extend(['-DONE_PROCESS'])
69
69
 
70
- os.environ['MOD_WSGI_MODULES_DIRECTORY'] = config['modules_directory']
71
-
72
- subprocess.call([executable]+httpd_arguments)
73
-
74
- sys.exit(0)
70
+ # On Windows httpd shares our console, so a Ctrl-C delivers a
71
+ # CTRL_C_EVENT to the whole console process group and httpd runs
72
+ # its own graceful shutdown. We must not let the same Ctrl-C kill
73
+ # this launcher first, or it returns to the shell while httpd is
74
+ # still tearing down (and dumps a KeyboardInterrupt traceback). So
75
+ # absorb our own interrupt and keep waiting until httpd exits.
76
+ #
77
+ # A first Ctrl-C is treated as "you should have received the
78
+ # console event, shutting down gracefully, I will wait". If httpd
79
+ # did not actually receive the event (for example a git-bash pty
80
+ # bridge that does not forward it to the child), a second Ctrl-C
81
+ # escalates to terminating it so we cannot hang indefinitely.
82
+
83
+ process = subprocess.Popen([executable]+httpd_arguments, env=environ)
84
+
85
+ interrupts = 0
86
+
87
+ while True:
88
+ try:
89
+ process.wait()
90
+ break
91
+ except KeyboardInterrupt:
92
+ interrupts += 1
93
+ if interrupts >= 2:
94
+ process.terminate()
95
+
96
+ sys.exit(process.returncode)
75
97
 
76
98
  else:
77
99
  executable = posixpath.join(config['server_root'], 'apachectl')
@@ -82,7 +82,7 @@ def default_run_group():
82
82
 
83
83
  def find_program(names, default=None, paths=[]):
84
84
  for name in names:
85
- for path in os.environ['PATH'].split(':') + paths:
85
+ for path in os.environ['PATH'].split(os.pathsep) + paths:
86
86
  program = posixpath.join(path, name)
87
87
  if os.path.exists(program):
88
88
  return program
@@ -97,6 +97,17 @@ def track_changes(path):
97
97
  _files.append(path)
98
98
 
99
99
  def start_reloader(interval=1.0):
100
+ # The reloader triggers a restart by sending SIGINT to this process. On
101
+ # Windows os.kill() cannot deliver SIGINT to ourselves: any signal other
102
+ # than CTRL_C_EVENT/CTRL_BREAK_EVENT is implemented as an unconditional
103
+ # TerminateProcess, so the reloader would hard kill the server rather than
104
+ # trigger a graceful restart. Disable it on Windows.
105
+ if os.name == 'nt':
106
+ prefix = 'monitor (pid=%d):' % os.getpid()
107
+ print('%s Source code reloading is not supported on Windows.' % prefix,
108
+ file=sys.stderr)
109
+ return
110
+
100
111
  global _interval
101
112
  if interval < _interval:
102
113
  _interval = interval
@@ -255,14 +255,17 @@ def setup_server(command, args, options):
255
255
  options['access_log_file'] = posixpath.join(
256
256
  options['log_directory'], options['access_log_name'])
257
257
  else:
258
- try:
259
- with open('/dev/stdout', 'w'):
260
- pass
261
- except IOError:
262
- options['access_log_file'] = '|%s' % find_program(
263
- ['tee'], default='tee')
258
+ if os.name == 'nt':
259
+ options['access_log_file'] = 'CON'
264
260
  else:
265
- options['access_log_file'] = '/dev/stdout'
261
+ try:
262
+ with open('/dev/stdout', 'w'):
263
+ pass
264
+ except IOError:
265
+ options['access_log_file'] = '|%s' % find_program(
266
+ ['tee'], default='tee')
267
+ else:
268
+ options['access_log_file'] = '/dev/stdout'
266
269
 
267
270
  if options['access_log_format']:
268
271
  if options['access_log_format'] in ('common', 'combined'):
@@ -25,8 +25,8 @@
25
25
 
26
26
  #define MOD_WSGI_MAJORVERSION_NUMBER 6
27
27
  #define MOD_WSGI_MINORVERSION_NUMBER 0
28
- #define MOD_WSGI_MICROVERSION_NUMBER 2
29
- #define MOD_WSGI_VERSION_STRING "6.0.2"
28
+ #define MOD_WSGI_MICROVERSION_NUMBER 3
29
+ #define MOD_WSGI_VERSION_STRING "6.0.3.dev1"
30
30
 
31
31
  /* ------------------------------------------------------------------------- */
32
32
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes