Hello community, here is the log from the commit of package python3-gunicorn for openSUSE:Factory checked in at 2015-03-09 10:10:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-gunicorn (Old) and /work/SRC/openSUSE:Factory/.python3-gunicorn.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-gunicorn" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-gunicorn/python3-gunicorn.changes 2015-02-05 11:01:39.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python3-gunicorn.new/python3-gunicorn.changes 2015-03-09 10:10:15.000000000 +0100 @@ -1,0 +2,15 @@ +Fri Mar 6 19:25:02 UTC 2015 - a...@gmx.de + +- update to version 19.3.0: + * Core + + fix: issue 978 make sure a listener is inheritable + + add check_config class method to workers + + fix: issue 983 fix select timeout in sync worker with multiple connections + + allows workers to access to the reloader. close issue 984 + + raise TypeError instead of AssertionError + * Logging + + make Logger.loglevel a classs attribute + * Documentation + + fix: issue 988 fix syntax errors in examples/gunicorn_rc + +------------------------------------------------------------------- Old: ---- gunicorn-19.2.1.tar.gz New: ---- gunicorn-19.3.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-gunicorn.spec ++++++ --- /var/tmp/diff_new_pack.OWqp2W/_old 2015-03-09 10:10:16.000000000 +0100 +++ /var/tmp/diff_new_pack.OWqp2W/_new 2015-03-09 10:10:16.000000000 +0100 @@ -17,7 +17,7 @@ Name: python3-gunicorn -Version: 19.2.1 +Version: 19.3.0 Release: 0 Summary: WSGI HTTP Server for UNIX License: MIT ++++++ gunicorn-19.2.1.tar.gz -> gunicorn-19.3.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/PKG-INFO new/gunicorn-19.3.0/PKG-INFO --- old/gunicorn-19.2.1/PKG-INFO 2015-02-04 14:44:35.000000000 +0100 +++ new/gunicorn-19.3.0/PKG-INFO 2015-03-06 11:19:35.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: gunicorn -Version: 19.2.1 +Version: 19.3.0 Summary: WSGI HTTP Server for UNIX Home-page: http://gunicorn.org Author: Benoit Chesneau diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/docs/site/index.html new/gunicorn-19.3.0/docs/site/index.html --- old/gunicorn-19.2.1/docs/site/index.html 2015-01-29 23:45:14.000000000 +0100 +++ new/gunicorn-19.3.0/docs/site/index.html 2015-03-06 11:19:04.000000000 +0100 @@ -16,7 +16,7 @@ <div class="logo-div"> <div class="latest"> Latest version: <strong><a - href="http://docs.gunicorn.org/en/19.1.1/news.html#id1">19.1.1</a></strong> + href="http://docs.gunicorn.org/en/19.3/news.html#id1">19.3</a></strong> </div> <div class="logo"><img src="images/logo.jpg" ></div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/docs/source/2015-news.rst new/gunicorn-19.3.0/docs/source/2015-news.rst --- old/gunicorn-19.2.1/docs/source/2015-news.rst 2015-02-04 14:43:49.000000000 +0100 +++ new/gunicorn-19.3.0/docs/source/2015-news.rst 2015-03-06 11:06:04.000000000 +0100 @@ -6,6 +6,33 @@ Please see :doc:`news` for the latest changes. +19.3.0 / 2015/03/06 +=================== + +Changes +------- + +Core +++++ + +- fix: :issue:`978` make sure a listener is inheritable +- add `check_config` class method to workers +- fix: :issue:`983` fix select timeout in sync worker with multiple + connections +- allows workers to access to the reloader. close :issue:`984` +- raise TypeError instead of AssertionError + +Logging ++++++++ + +- make Logger.loglevel a classs attribute + +Documentation ++++++++++++++ + +- fix: :issue:`988` fix syntax errors in examples/gunicorn_rc + + 19.2.1 / 2015/02/4 ================== @@ -26,8 +53,7 @@ +++++++++++++ - document security mailing-list in the contributing page. - - + 19.2 / 2015/01/30 ================= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/docs/source/news.rst new/gunicorn-19.3.0/docs/source/news.rst --- old/gunicorn-19.2.1/docs/source/news.rst 2015-02-04 14:43:51.000000000 +0100 +++ new/gunicorn-19.3.0/docs/source/news.rst 2015-03-06 11:10:30.000000000 +0100 @@ -2,6 +2,32 @@ Changelog ========= +19.3.0 / 2015/03/06 +=================== + +Changes +------- + +Core +++++ + +- fix: :issue:`978` make sure a listener is inheritable +- add `check_config` class method to workers +- fix: :issue:`983` fix select timeout in sync worker with multiple + connections +- allows workers to access to the reloader. close :issue:`984` +- raise TypeError instead of AssertionError + +Logging ++++++++ + +- make Logger.loglevel a classs attribute + +Documentation ++++++++++++++ + +- fix: :issue:`988` fix syntax errors in examples/gunicorn_rc + 19.2.1 / 2015/02/4 ================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/examples/gunicorn_rc new/gunicorn-19.3.0/examples/gunicorn_rc --- old/gunicorn-19.2.1/examples/gunicorn_rc 2015-01-21 23:12:39.000000000 +0100 +++ new/gunicorn-19.3.0/examples/gunicorn_rc 2015-03-06 10:08:34.000000000 +0100 @@ -6,7 +6,7 @@ APP=main:application -if [ -f $PID ]; then rm $PID fi +if [ -f $PID ]; then rm $PID; fi cd $ROOT -exec $GUNICORN -c $ROOT/gunicorn.conf.py --pidfile=$PID $APP +exec $GUNICORN -c $ROOT/gunicorn.conf.py --pid=$PID $APP diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/__init__.py new/gunicorn-19.3.0/gunicorn/__init__.py --- old/gunicorn-19.2.1/gunicorn/__init__.py 2015-02-04 14:38:13.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/__init__.py 2015-03-06 11:06:04.000000000 +0100 @@ -3,6 +3,6 @@ # This file is part of gunicorn released under the MIT license. # See the NOTICE for more information. -version_info = (19, 2, 1) +version_info = (19, 3, 0) __version__ = ".".join([str(v) for v in version_info]) SERVER_SOFTWARE = "gunicorn/%s" % __version__ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/arbiter.py new/gunicorn-19.3.0/gunicorn/arbiter.py --- old/gunicorn-19.2.1/gunicorn/arbiter.py 2015-01-29 23:43:21.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/arbiter.py 2015-03-06 10:11:20.000000000 +0100 @@ -134,6 +134,10 @@ self.log.info("Listening at: %s (%s)", listeners_str, self.pid) self.log.info("Using worker: %s", self.cfg.worker_class_str) + # check worker class requirements + if hasattr(self.worker_class, "check_config"): + self.worker_class.check_config(self.cfg, self.log) + self.cfg.when_ready(self) def init_signals(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/config.py new/gunicorn-19.3.0/gunicorn/config.py --- old/gunicorn-19.2.1/gunicorn/config.py 2015-01-29 23:43:27.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/config.py 2015-03-06 10:08:34.000000000 +0100 @@ -268,7 +268,8 @@ return self.value def set(self, val): - assert six.callable(self.validator), "Invalid validator: %s" % self.name + if not six.callable(self.validator): + raise TypeError('Invalid validator: %s' % self.name) self.value = self.validator(val) def __lt__(self, other): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/glogging.py new/gunicorn-19.3.0/gunicorn/glogging.py --- old/gunicorn-19.2.1/gunicorn/glogging.py 2015-02-04 09:10:53.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/glogging.py 2015-03-06 10:08:34.000000000 +0100 @@ -155,6 +155,7 @@ "info": logging.INFO, "debug": logging.DEBUG } + loglevel = logging.INFO error_fmt = r"%(asctime)s [%(process)d] [%(levelname)s] %(message)s" datefmt = r"[%Y-%m-%d %H:%M:%S %z]" @@ -171,7 +172,6 @@ self.access_log.propagate = False self.error_handlers = [] self.access_handlers = [] - self.loglevel = logging.INFO self.cfg = cfg self.setup(cfg) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/http/wsgi.py new/gunicorn-19.3.0/gunicorn/http/wsgi.py --- old/gunicorn-19.2.1/gunicorn/http/wsgi.py 2015-01-30 07:19:36.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/http/wsgi.py 2015-03-06 10:08:34.000000000 +0100 @@ -257,8 +257,8 @@ def process_headers(self, headers): for name, value in headers: - assert isinstance(name, string_types), "%r is not a string" % name - + if not isinstance(name, string_types): + raise TypeError('%r is not a string' % name) value = str(value).strip() lname = name.lower().strip() if lname == "content-length": @@ -322,9 +322,8 @@ def write(self, arg): self.send_headers() - - assert isinstance(arg, binary_type), "%r is not a byte." % arg - + if not isinstance(arg, binary_type): + raise TypeError('%r is not a byte' % arg) arglen = len(arg) tosend = arglen if self.response_length is not None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/sock.py new/gunicorn-19.3.0/gunicorn/sock.py --- old/gunicorn-19.2.1/gunicorn/sock.py 2015-01-21 23:12:39.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/sock.py 2015-03-06 10:18:31.000000000 +0100 @@ -41,6 +41,11 @@ if not bound: self.bind(sock) sock.setblocking(0) + + # make sure that the socket can be inherited + if hasattr(sock, "set_inheritable"): + sock.set_inheritable(True) + sock.listen(self.conf.backlog) return sock @@ -110,6 +115,7 @@ util.chown(self.cfg_addr, self.conf.uid, self.conf.gid) os.umask(old_umask) + def close(self): super(UnixSocket, self).close() os.unlink(self.cfg_addr) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/util.py new/gunicorn-19.3.0/gunicorn/util.py --- old/gunicorn-19.2.1/gunicorn/util.py 2015-01-21 23:12:39.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/util.py 2015-03-06 10:08:34.000000000 +0100 @@ -503,7 +503,8 @@ """Converts a string argument to a byte string""" if isinstance(value, bytes): return value - assert isinstance(value, text_type) + if not isinstance(value, text_type): + raise TypeError('%r is not a string' % value) return value.encode("utf-8") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/workers/base.py new/gunicorn-19.3.0/gunicorn/workers/base.py --- old/gunicorn-19.2.1/gunicorn/workers/base.py 2015-01-29 23:43:21.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/workers/base.py 2015-03-06 10:08:34.000000000 +0100 @@ -7,6 +7,7 @@ import os import signal import sys +import time from random import randint @@ -43,6 +44,7 @@ self.cfg = cfg self.booted = False self.aborted = False + self.reloader = None self.nr = 0 jitter = randint(0, cfg.max_requests_jitter) @@ -87,7 +89,7 @@ def changed(fname): self.log.info("Worker reloading: %s modified", fname) os.kill(self.pid, signal.SIGQUIT) - Reloader(callback=changed).start() + self.reloader = Reloader(callback=changed).start() # set environment' variables if self.cfg.env: @@ -148,6 +150,7 @@ self.alive = False # worker_int callback self.cfg.worker_int(self) + time.sleep(0.1) sys.exit(0) def handle_abort(self, sig, frame): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/workers/gthread.py new/gunicorn-19.3.0/gunicorn/workers/gthread.py --- old/gunicorn-19.2.1/gunicorn/workers/gthread.py 2015-01-30 06:52:29.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/workers/gthread.py 2015-03-06 10:08:34.000000000 +0100 @@ -86,7 +86,6 @@ super(ThreadWorker, self).__init__(*args, **kwargs) self.worker_connections = self.cfg.worker_connections self.max_keepalived = self.cfg.worker_connections - self.cfg.threads - # initialise the pool self.tpool = None self.poller = None @@ -94,6 +93,14 @@ self.futures = deque() self._keep = deque() + @classmethod + def check_config(cls, cfg, log): + max_keepalived = cfg.worker_connections - cfg.threads + + if max_keepalived <= 0 and cfg.keepalive: + log.warning("No keepalived connections can be handled. " + + "Check the number of worker connections and threads.") + def init_process(self): self.tpool = futures.ThreadPoolExecutor(max_workers=self.cfg.threads) self.poller = selectors.DefaultSelector() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn/workers/sync.py new/gunicorn-19.3.0/gunicorn/workers/sync.py --- old/gunicorn-19.2.1/gunicorn/workers/sync.py 2015-01-21 23:12:39.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn/workers/sync.py 2015-03-06 10:08:34.000000000 +0100 @@ -91,13 +91,14 @@ except StopWaiting: return - for listener in ready: - try: - self.accept(listener) - except socket.error as e: - if e.args[0] not in (errno.EAGAIN, errno.ECONNABORTED, - errno.EWOULDBLOCK): - raise + if ready is not None: + for listener in ready: + try: + self.accept(listener) + except socket.error as e: + if e.args[0] not in (errno.EAGAIN, errno.ECONNABORTED, + errno.EWOULDBLOCK): + raise if not self.is_parent_alive(): return diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/gunicorn.egg-info/PKG-INFO new/gunicorn-19.3.0/gunicorn.egg-info/PKG-INFO --- old/gunicorn-19.2.1/gunicorn.egg-info/PKG-INFO 2015-02-04 14:44:35.000000000 +0100 +++ new/gunicorn-19.3.0/gunicorn.egg-info/PKG-INFO 2015-03-06 11:19:35.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: gunicorn -Version: 19.2.1 +Version: 19.3.0 Summary: WSGI HTTP Server for UNIX Home-page: http://gunicorn.org Author: Benoit Chesneau diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gunicorn-19.2.1/setup.cfg new/gunicorn-19.3.0/setup.cfg --- old/gunicorn-19.2.1/setup.cfg 2015-02-04 14:44:35.000000000 +0100 +++ new/gunicorn-19.3.0/setup.cfg 2015-03-06 11:19:35.000000000 +0100 @@ -12,6 +12,6 @@ [egg_info] tag_svn_revision = 0 -tag_build = tag_date = 0 +tag_build = -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org