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.
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/PKG-INFO +1 -1
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/PKG-INFO +1 -1
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/setup.py +1 -1
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/cli.py +27 -5
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/platform.py +1 -1
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/reloader.py +11 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/server.py +10 -7
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_version.h +2 -2
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/CREDITS.rst +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/LICENSE +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/MANIFEST.in +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/Makefile.in +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/README-express.rst +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/README-standalone.rst +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/README.rst +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/configure +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/configure.ac +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/images/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/images/snake-whiskey.jpg +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/SOURCES.txt +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/dependency_links.txt +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/entry_points.txt +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/not-zip-safe +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/mod_wsgi.egg-info/top_level.txt +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/setup.cfg +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/diagnostics/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/diagnostics/environ.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/diagnostics/hello.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/apache.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/management/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/management/commands/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/management/commands/runmodwsgi.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/options.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/runtime.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/express/scripts.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/management/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/management/commands/__init__.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/management/commands/runmodwsgi.py +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/mod_wsgi.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_adapter.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_adapter.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_apache.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_apache.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_auth.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_auth.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_buckets.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_buckets.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_config.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_config.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_convert.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_convert.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_daemon.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_daemon.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_dispatch.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_dispatch.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_environ.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_environ.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_execute.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_execute.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_gc.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_gc.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_input.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_input.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_interp.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_interp.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_logger.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_logger.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_memory.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_memory.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_metrics.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_metrics.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_module.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_module.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_python.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_remote.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_remote.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_restrict.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_restrict.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_server.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_server.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_shutdown.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_shutdown.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_signal.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_signal.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_stream.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_stream.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_telemetry.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_telemetry.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_thread.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_thread.h +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_validate.c +0 -0
- {mod_wsgi-6.0.2 → mod_wsgi-6.0.3.dev1}/src/server/wsgi_validate.h +0 -0
|
@@ -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.
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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(
|
|
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
|
-
|
|
259
|
-
|
|
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
|
-
|
|
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
|
|
29
|
-
#define MOD_WSGI_VERSION_STRING "6.0.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|