Hello community,
here is the log from the commit of package python-APScheduler for openSUSE:Factory checked in at 2019-02-04 14:25:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-APScheduler (Old)
and /work/SRC/openSUSE:Factory/.python-APScheduler.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-APScheduler"
Mon Feb 4 14:25:22 2019 rev:5 rq:670904 version:3.5.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-APScheduler/python-APScheduler.changes 2018-10-18 15:39:25.510086392 +0200
+++ /work/SRC/openSUSE:Factory/.python-APScheduler.new.28833/python-APScheduler.changes 2019-02-04 14:25:31.113050733 +0100
@@ -1,0 +2,19 @@
+Sun Feb 3 16:13:03 UTC 2019 - Antonio Larrosa
From faef2bd7017f4414510b075fe71d6b43f8f2fdfc Mon Sep 17 00:00:00 2001 From: Ugrend
Date: Fri, 14 Dec 2018 09:23:25 +1100 Subject: [PATCH] Correct update_job to raise with job id
---
apscheduler/jobstores/sqlalchemy.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apscheduler/jobstores/sqlalchemy.py b/apscheduler/jobstores/sqlalchemy.py
index beb27fb..fecbd83 100644
--- a/apscheduler/jobstores/sqlalchemy.py
+++ b/apscheduler/jobstores/sqlalchemy.py
@@ -106,7 +106,7 @@ def update_job(self, job):
}).where(self.jobs_t.c.id == job.id)
result = self.engine.execute(update)
if result.rowcount == 0:
- raise JobLookupError(id)
+ raise JobLookupError(job.id)
def remove_job(self, job_id):
delete = self.jobs_t.delete().where(self.jobs_t.c.id == job_id)
++++++ APScheduler-3.5.1.tar.gz -> APScheduler-3.5.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/.github/ISSUE_TEMPLATE.md new/APScheduler-3.5.3/.github/ISSUE_TEMPLATE.md
--- old/APScheduler-3.5.1/.github/ISSUE_TEMPLATE.md 1970-01-01 01:00:00.000000000 +0100
+++ new/APScheduler-3.5.3/.github/ISSUE_TEMPLATE.md 2018-08-15 07:53:22.000000000 +0200
@@ -0,0 +1,33 @@
+This issue tracker is **ONLY** for reporting bugs.
+Issues other than bug reports will be summarily closed.
+
+Any support questions or feature requests should be directed to:
+
+* [StackOverflow](http://stackoverflow.com/questions/tagged/apscheduler)
+* [Gitter](https://gitter.im/apscheduler/Lobby)
+* [Google groups](http://groups.google.com/group/apscheduler)
+
+<!--- Provide a general summary of the issue in the Title above -->
+
+## Expected Behavior
+<!--- Tell us what should happen -->
+
+## Current Behavior
+<!--- Tell us what happens instead of the expected behavior -->
+
+## Steps to Reproduce
+<!--- Provide a link to a live example, or an unambiguous set of steps to -->
+<!--- reproduce this bug. Include code to reproduce, if relevant -->
+1.
+2.
+3.
+4.
+
+## Context (Environment)
+<!--- How has this issue affected you? What are you trying to accomplish? -->
+<!--- Providing context helps us come up with a solution that is most useful in the real world -->
+
+<!--- Provide a general summary of the issue in the Title above -->
+
+## Detailed Description
+<!--- Provide a detailed description of the change or addition you are proposing -->
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/.travis.yml new/APScheduler-3.5.3/.travis.yml
--- old/APScheduler-3.5.1/.travis.yml 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/.travis.yml 2018-08-15 07:53:22.000000000 +0200
@@ -65,9 +65,3 @@
webhooks:
urls:
- https://webhooks.gitter.im/e/f41346c0f7c22d4fe002
- irc:
- channels:
- - "chat.freenode.net#apscheduler"
- on_success: change
- use_notice: true
- skip_join: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/APScheduler.egg-info/PKG-INFO new/APScheduler-3.5.3/APScheduler.egg-info/PKG-INFO
--- old/APScheduler-3.5.1/APScheduler.egg-info/PKG-INFO 2018-01-16 00:12:51.000000000 +0100
+++ new/APScheduler-3.5.3/APScheduler.egg-info/PKG-INFO 2018-08-15 07:53:41.000000000 +0200
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: APScheduler
-Version: 3.5.1
+Version: 3.5.3
Summary: In-process task scheduler with Cron-like capabilities
Home-page: https://github.com/agronholm/apscheduler
Author: Alex Grönholm
Author-email: apscheduler@nextday.fi
License: MIT
-Description-Content-Type: UNKNOWN
Description: .. image:: https://travis-ci.org/agronholm/apscheduler.svg?branch=master
:target: https://travis-ci.org/agronholm/apscheduler
:alt: Build Status
@@ -80,7 +79,6 @@
If you have problems or other questions, you can either:
* Ask in the `apscheduler https://gitter.im/apscheduler/Lobby`_ room on Gitter
- * Ask on the ``#apscheduler`` channel on `Freenode IRC http://freenode.net/irc_servers.shtml`_
* Ask on the `APScheduler Google group http://groups.google.com/group/apscheduler`_, or
* Ask on `StackOverflow http://stackoverflow.com/questions/tagged/apscheduler`_ and tag your
question with the ``apscheduler`` tag
@@ -96,3 +94,13 @@
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Provides-Extra: testing
+Provides-Extra: rethinkdb
+Provides-Extra: redis
+Provides-Extra: tornado
+Provides-Extra: sqlalchemy
+Provides-Extra: mongodb
+Provides-Extra: zookeeper
+Provides-Extra: gevent
+Provides-Extra: asyncio
+Provides-Extra: twisted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/APScheduler.egg-info/SOURCES.txt new/APScheduler-3.5.3/APScheduler.egg-info/SOURCES.txt
--- old/APScheduler-3.5.1/APScheduler.egg-info/SOURCES.txt 2018-01-16 00:12:51.000000000 +0100
+++ new/APScheduler-3.5.3/APScheduler.egg-info/SOURCES.txt 2018-08-15 07:53:41.000000000 +0200
@@ -8,6 +8,7 @@
setup.cfg
setup.py
tox.ini
+.github/ISSUE_TEMPLATE.md
APScheduler.egg-info/PKG-INFO
APScheduler.egg-info/SOURCES.txt
APScheduler.egg-info/dependency_links.txt
@@ -56,6 +57,7 @@
docs/conf.py
docs/contributing.rst
docs/extending.rst
+docs/faq.rst
docs/index.rst
docs/migration.rst
docs/userguide.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/APScheduler.egg-info/requires.txt new/APScheduler-3.5.3/APScheduler.egg-info/requires.txt
--- old/APScheduler-3.5.1/APScheduler.egg-info/requires.txt 2018-01-16 00:12:51.000000000 +0100
+++ new/APScheduler-3.5.3/APScheduler.egg-info/requires.txt 2018-08-15 07:53:41.000000000 +0200
@@ -26,9 +26,9 @@
sqlalchemy>=0.8
[testing]
-pytest
+pytest<3.7
pytest-cov
-pytest-tornado
+pytest-tornado5
[testing:python_version != "2.7"]
pytest_asyncio<0.6.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/PKG-INFO new/APScheduler-3.5.3/PKG-INFO
--- old/APScheduler-3.5.1/PKG-INFO 2018-01-16 00:12:51.000000000 +0100
+++ new/APScheduler-3.5.3/PKG-INFO 2018-08-15 07:53:41.000000000 +0200
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: APScheduler
-Version: 3.5.1
+Version: 3.5.3
Summary: In-process task scheduler with Cron-like capabilities
Home-page: https://github.com/agronholm/apscheduler
Author: Alex Grönholm
Author-email: apscheduler@nextday.fi
License: MIT
-Description-Content-Type: UNKNOWN
Description: .. image:: https://travis-ci.org/agronholm/apscheduler.svg?branch=master
:target: https://travis-ci.org/agronholm/apscheduler
:alt: Build Status
@@ -80,7 +79,6 @@
If you have problems or other questions, you can either:
* Ask in the `apscheduler https://gitter.im/apscheduler/Lobby`_ room on Gitter
- * Ask on the ``#apscheduler`` channel on `Freenode IRC http://freenode.net/irc_servers.shtml`_
* Ask on the `APScheduler Google group http://groups.google.com/group/apscheduler`_, or
* Ask on `StackOverflow http://stackoverflow.com/questions/tagged/apscheduler`_ and tag your
question with the ``apscheduler`` tag
@@ -96,3 +94,13 @@
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
+Provides-Extra: testing
+Provides-Extra: rethinkdb
+Provides-Extra: redis
+Provides-Extra: tornado
+Provides-Extra: sqlalchemy
+Provides-Extra: mongodb
+Provides-Extra: zookeeper
+Provides-Extra: gevent
+Provides-Extra: asyncio
+Provides-Extra: twisted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/README.rst new/APScheduler-3.5.3/README.rst
--- old/APScheduler-3.5.1/README.rst 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/README.rst 2018-08-15 07:53:22.000000000 +0200
@@ -71,7 +71,6 @@
If you have problems or other questions, you can either:
* Ask in the `apscheduler https://gitter.im/apscheduler/Lobby`_ room on Gitter
-* Ask on the ``#apscheduler`` channel on `Freenode IRC http://freenode.net/irc_servers.shtml`_
* Ask on the `APScheduler Google group http://groups.google.com/group/apscheduler`_, or
* Ask on `StackOverflow http://stackoverflow.com/questions/tagged/apscheduler`_ and tag your
question with the ``apscheduler`` tag
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/apscheduler/job.py new/APScheduler-3.5.3/apscheduler/job.py
--- old/APScheduler-3.5.1/apscheduler/job.py 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/apscheduler/job.py 2018-08-15 07:53:22.000000000 +0200
@@ -1,4 +1,5 @@
from collections import Iterable, Mapping
+from inspect import ismethod, isclass
from uuid import uuid4
import six
@@ -235,13 +236,20 @@
'be determined. Consider giving a textual reference (module:function name) '
'instead.' % (self.func,))
+ # Instance methods cannot survive serialization as-is, so store the "self" argument
+ # explicitly
+ if ismethod(self.func) and not isclass(self.func.__self__):
+ args = (self.func.__self__,) + tuple(self.args)
+ else:
+ args = self.args
+
return {
'version': 1,
'id': self.id,
'func': self.func_ref,
'trigger': self.trigger,
'executor': self.executor,
- 'args': self.args,
+ 'args': args,
'kwargs': self.kwargs,
'name': self.name,
'misfire_grace_time': self.misfire_grace_time,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/apscheduler/schedulers/base.py new/APScheduler-3.5.3/apscheduler/schedulers/base.py
--- old/APScheduler-3.5.1/apscheduler/schedulers/base.py 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/apscheduler/schedulers/base.py 2018-08-15 07:53:22.000000000 +0200
@@ -127,11 +127,14 @@
:param bool paused: if ``True``, don't start job processing until :meth:`resume` is called
:raises SchedulerAlreadyRunningError: if the scheduler is already running
+ :raises RuntimeError: if running under uWSGI with threads disabled
"""
if self.state != STATE_STOPPED:
raise SchedulerAlreadyRunningError
+ self._check_uwsgi()
+
with self._executors_lock:
# Create a default executor if nothing else is configured
if 'default' not in self._executors:
@@ -826,6 +829,14 @@
except BaseException:
self._logger.exception('Error notifying listener')
+ def _check_uwsgi(self):
+ """Check if we're running under uWSGI with threads disabled."""
+ uwsgi_module = sys.modules.get('uwsgi')
+ if not getattr(uwsgi_module, 'has_threads', True):
+ raise RuntimeError('The scheduler seems to be running under uWSGI, but threads have '
+ 'been disabled. You must run uWSGI with the --enable-threads '
+ 'option for the scheduler to work.')
+
def _real_add_job(self, job, jobstore_alias, replace_existing):
"""
:param Job job: the job to add
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/apscheduler/triggers/cron/__init__.py new/APScheduler-3.5.3/apscheduler/triggers/cron/__init__.py
--- old/APScheduler-3.5.1/apscheduler/triggers/cron/__init__.py 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/apscheduler/triggers/cron/__init__.py 2018-08-15 07:53:22.000000000 +0200
@@ -1,6 +1,5 @@
from datetime import datetime, timedelta
-from pytz import NonExistentTimeError, AmbiguousTimeError
from tzlocal import get_localzone
import six
@@ -146,7 +145,7 @@
difference = datetime(**values) - dateval.replace(tzinfo=None)
return self.timezone.normalize(dateval + difference), fieldnum
- def _set_field_value(self, dateval, fieldnum, new_value, is_dst=None):
+ def _set_field_value(self, dateval, fieldnum, new_value):
values = {}
for i, field in enumerate(self.fields):
if field.REAL:
@@ -157,7 +156,7 @@
else:
values[field.name] = new_value
- return self.timezone.localize(datetime(**values), is_dst=is_dst)
+ return self.timezone.localize(datetime(**values))
def get_next_fire_time(self, previous_fire_time, now):
if previous_fire_time:
@@ -180,21 +179,8 @@
elif next_value > curr_value:
# A valid, but higher than the starting value, was found
if field.REAL:
- try:
- next_date = self._set_field_value(next_date, fieldnum, next_value)
- fieldnum += 1
- except NonExistentTimeError:
- # Skip this field value
- next_date, fieldnum = self._increment_field_value(next_date, fieldnum)
- except AmbiguousTimeError:
- # Try this datetime with DST set unless it's earlier than start_date,
- # in which case don't set DST
- next_date = self._set_field_value(next_date, fieldnum, next_value,
- is_dst=True)
- if next_date < start_date:
- next_date = self._set_field_value(next_date, fieldnum, next_value,
- is_dst=False)
- fieldnum += 1
+ next_date = self._set_field_value(next_date, fieldnum, next_value)
+ fieldnum += 1
else:
next_date, fieldnum = self._increment_field_value(next_date, fieldnum)
else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/apscheduler/util.py new/APScheduler-3.5.3/apscheduler/util.py
--- old/APScheduler-3.5.1/apscheduler/util.py 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/apscheduler/util.py 2018-08-15 07:53:22.000000000 +0200
@@ -5,6 +5,7 @@
from datetime import date, datetime, time, timedelta, tzinfo
from calendar import timegm
from functools import partial
+from inspect import isclass
import re
from pytz import timezone, utc, FixedOffset
@@ -224,7 +225,7 @@
# class methods, bound and unbound methods
f_self = getattr(func, '__self__', None) or getattr(func, 'im_self', None)
if f_self and hasattr(func, '__name__'):
- f_class = f_self if isinstance(f_self, type) else f_self.__class__
+ f_class = f_self if isclass(f_self) else f_self.__class__
else:
f_class = getattr(func, 'im_class', None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/docs/extending.rst new/APScheduler-3.5.3/docs/extending.rst
--- old/APScheduler-3.5.1/docs/extending.rst 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/docs/extending.rst 2018-08-15 07:53:22.000000000 +0200
@@ -23,7 +23,7 @@
trigger = MyTrigger(arg1='foo')
scheduler.add_job(target, trigger)
-You can also register it as a plugin so you can use can use the alternate form of
+You can also register it as a plugin so you can use the alternate form of
``add_jobstore``::
scheduler.add_job(target, 'my_trigger', arg1='foo')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/docs/faq.rst new/APScheduler-3.5.3/docs/faq.rst
--- old/APScheduler-3.5.1/docs/faq.rst 1970-01-01 01:00:00.000000000 +0100
+++ new/APScheduler-3.5.3/docs/faq.rst 2018-08-15 07:53:22.000000000 +0200
@@ -0,0 +1,97 @@
+##########################
+Frequently Asked Questions
+##########################
+
+Why doesn't the scheduler run my jobs?
+======================================
+
+This could be caused by a number of things. The two most common issues are:
+
+#. Running the scheduler inside a uWSGI worker process while threads have not been enabled (see the
+ next section for this)
+#. Running a :class:`~apscheduler.schedulers.background.BackgroundScheduler` and then letting the
+ execution reach the end of the script
+
+To demonstrate the latter case, a script like this will **not work**::
+
+ from apscheduler.schedulers.background import BackgroundScheduler
+
+ def myjob():
+ print('hello')
+
+ scheduler = BackgroundScheduler()
+ scheduler.start()
+ scheduler.add_job(myjob, 'cron', hour=0)
+
+The script above will **exit** right after calling ``add_job()`` so the scheduler will not have a
+chance to run the scheduled job.
+
+If you're having any other issue, then enabling debug logging as instructed in the
+:ref:`troubleshooting` section should shed some light into the problem.
+
+How can I use APScheduler with uWSGI?
+=====================================
+
+uWSGI employs some tricks which disable the Global Interpreter Lock and with it, the use of threads
+which are vital to the operation of APScheduler. To fix this, you need to re-enable the GIL using
+the ``--enable-threads`` switch. See the `uWSGI documentation <uWSGI-threads>`_ for more details.
+
+Also, assuming that you will run more than one worker process (as you typically would in
+production), you should also read the next section.
+
+.. _uWSGI-threads: https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#a-note-on-py...
+
+How do I share a single job store among one or more worker processes?
+=====================================================================
+
+Short answer: You can't.
+
+Long answer: Sharing a persistent job store among two or more processes will lead to incorrect
+scheduler behavior like duplicate execution or the scheduler missing jobs, etc. This is because
+APScheduler does not currently have any interprocess synchronization and signalling scheme that
+would enable the scheduler to be notified when a job has been added, modified or removed from a job
+store.
+
+Workaround: Run the scheduler in a dedicated process and connect to it via some sort of remote
+access mechanism like RPyC_, gRPC_ or an HTTP server. The source repository contains an example_ of
+a RPyC based service that is accessed by a client.
+
+.. _RPyC: https://rpyc.readthedocs.io/en/latest/
+.. _gRPC: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=2ahUKEwj-wMe-1eLcAhXSbZoKHdzGDZsQFjAAegQICRAB&url=https%3A%2F%2Fgrpc.io%2F&usg=AOvVaw0Jt5Y0OKbHd8MdFt9Kc2FO
+.. _example: https://github.com/agronholm/apscheduler/tree/master/examples/rpc
+
+How do I use APScheduler in a web application?
+==============================================
+
+First read through the previous section.
+
+If you're running Django, you may want to check out django_apscheduler_. Note, however, that this
+is a third party library and APScheduler developers are not responsible for it.
+
+Likewise, there is an unofficial extension called Flask-APScheduler_ which may or may not be useful
+when running APScheduler with Flask.
+
+For Pyramid users, the pyramid_scheduler_ library may potentially be helpful.
+
+Other than that, you pretty much run APScheduler normally, usually using
+:class:`~apscheduler.schedulers.background.BackgroundScheduler`. If you're running an asynchronous
+web framework like aiohttp_, you probably want to use a different scheduler in order to take some
+advantage of the asynchronous nature of the framework.
+
+Is there a graphical user interface for APScheduler?
+====================================================
+
+No graphical interface is provided by the library itself. However, there are some third party
+implementations, but APScheduler developers are not responsible for them. Here is a potentially
+incomplete list:
+
+* django_apscheduler_
+* apschedulerweb_
+* `Nextdoor scheduler`_
+
+.. _django_apscheduler: https://pypi.org/project/django-apscheduler/
+.. _Flask-APScheduler: https://pypi.org/project/flask-apscheduler/
+.. _pyramid_scheduler: https://github.com/cadithealth/pyramid_scheduler
+.. _aiohttp: https://pypi.org/project/aiohttp/
+.. _apschedulerweb: https://github.com/marwinxxii/apschedulerweb
+.. _Nextdoor scheduler: https://github.com/Nextdoor/ndscheduler
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/docs/index.rst new/APScheduler-3.5.3/docs/index.rst
--- old/APScheduler-3.5.1/docs/index.rst 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/docs/index.rst 2018-08-15 07:53:22.000000000 +0200
@@ -16,6 +16,7 @@
migration
contributing
extending
+ faq
Indices and tables
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/docs/modules/schedulers/gevent.rst new/APScheduler-3.5.3/docs/modules/schedulers/gevent.rst
--- old/APScheduler-3.5.1/docs/modules/schedulers/gevent.rst 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/docs/modules/schedulers/gevent.rst 2018-08-15 07:53:22.000000000 +0200
@@ -26,6 +26,3 @@
* - Example
- ``examples/schedulers/gevent_.py``
(`view online https://github.com/agronholm/apscheduler/tree/master/examples/schedulers/gev...`_).
-
-.. tip:: Until there is an official Python 3 compatible release of gevent, you can use an
- `unofficial port https://github.com/fantix/gevent`_.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/docs/userguide.rst new/APScheduler-3.5.3/docs/userguide.rst
--- old/APScheduler-3.5.1/docs/userguide.rst 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/docs/userguide.rst 2018-08-15 07:53:22.000000000 +0200
@@ -239,7 +239,7 @@
Starting the scheduler is done by simply calling
:meth:`~apscheduler.schedulers.base.BaseScheduler.start` on the scheduler. For schedulers other
-than `~apscheduler.schedulers.blocking.BlockingScheduler`, this call will return immediately and
+than :class:`~apscheduler.schedulers.blocking.BlockingScheduler`, this call will return immediately and
you can continue the initialization process of your application, possibly adding jobs to the
scheduler.
@@ -458,6 +458,8 @@
scheduler.add_listener(my_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
+.. _troubleshooting:
+
Troubleshooting
---------------
@@ -473,6 +475,7 @@
This should provide lots of useful information about what's going on inside the scheduler.
+Also make sure that you check the :doc:`faq` section to see if your problem already has a solution.
Reporting bugs
--------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/docs/versionhistory.rst new/APScheduler-3.5.3/docs/versionhistory.rst
--- old/APScheduler-3.5.1/docs/versionhistory.rst 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/docs/versionhistory.rst 2018-08-15 07:53:22.000000000 +0200
@@ -4,6 +4,25 @@
To find out how to migrate your application from a previous version of
APScheduler, see the :doc:`migration section <migration>`.
+3.5.3
+-----
+
+* Fixed regression introduced in 3.5.2: Class methods were mistaken for instance methods and thus
+ were broken during serialization
+* Fixed callable name detection for methods in old style classes
+
+
+3.5.2
+-----
+
+* Fixed scheduling of bound methods on persistent job stores (the workaround of scheduling
+ ``YourClass.methodname`` along with an explicit ``self`` argument is no longer necessary as this
+ is now done automatically for you)
+* Added the FAQ section to the docs
+* Made ``BaseScheduler.start()`` raise a ``RuntimeError`` if running under uWSGI with threads
+ disabled
+
+
3.5.1
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/setup.py new/APScheduler-3.5.3/setup.py
--- old/APScheduler-3.5.1/setup.py 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/setup.py 2018-08-15 07:53:22.000000000 +0200
@@ -54,9 +54,9 @@
'twisted': ['twisted'],
'zookeeper': ['kazoo'],
'testing': [
- 'pytest',
+ 'pytest < 3.7',
'pytest-cov',
- 'pytest-tornado'
+ 'pytest-tornado5'
],
'testing:python_version == "2.7"': ['mock'],
'testing:python_version != "2.7"': ['pytest_asyncio < 0.6.0']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/tests/test_jobstores.py new/APScheduler-3.5.3/tests/test_jobstores.py
--- old/APScheduler-3.5.1/tests/test_jobstores.py 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/tests/test_jobstores.py 2018-08-15 07:53:22.000000000 +0200
@@ -18,6 +18,15 @@
pass
+class DummyClass:
+ def dummy_method(self, a, b):
+ return a + b
+
+ @classmethod
+ def dummy_classmethod(cls, a, b):
+ return a + b
+
+
@pytest.yield_fixture
def memjobstore():
yield MemoryJobStore()
@@ -103,6 +112,19 @@
return create
+def test_add_instance_method_job(jobstore, create_add_job):
+ instance = DummyClass()
+ initial_job = create_add_job(jobstore, instance.dummy_method, kwargs={'a': 1, 'b': 2})
+ job = jobstore.lookup_job(initial_job.id)
+ assert job.func(*job.args, **job.kwargs) == 3
+
+
+def test_add_class_method_job(jobstore, create_add_job):
+ initial_job = create_add_job(jobstore, DummyClass.dummy_classmethod, kwargs={'a': 1, 'b': 2})
+ job = jobstore.lookup_job(initial_job.id)
+ assert job.func(*job.args, **job.kwargs) == 3
+
+
def test_lookup_job(jobstore, create_add_job):
initial_job = create_add_job(jobstore)
job = jobstore.lookup_job(initial_job.id)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/APScheduler-3.5.1/tests/test_triggers.py new/APScheduler-3.5.3/tests/test_triggers.py
--- old/APScheduler-3.5.1/tests/test_triggers.py 2018-01-16 00:12:28.000000000 +0100
+++ new/APScheduler-3.5.3/tests/test_triggers.py 2018-08-15 07:53:22.000000000 +0200
@@ -410,30 +410,6 @@
trigger = CronTrigger.from_crontab(expr, timezone)
assert repr(trigger) == expected_repr
- @pytest.mark.parametrize('args, now, expected', [
- ({'minute': '*/5'}, datetime(2016, 3, 27, 1, 59), datetime(2016, 3, 27, 3)),
- ({'hour': 2, 'minute': 30}, datetime(2016, 3, 26, 2, 31), datetime(2016, 3, 28, 2, 30))
- ], ids=['jump_forward', 'skip_day'])
- def test_dst_forward(self, args, now, expected, timezone):
- trigger = CronTrigger(timezone=timezone, **args)
- now = timezone.localize(now)
- expected = timezone.localize(expected)
- assert trigger.get_next_fire_time(None, now) == expected
-
- @pytest.mark.parametrize('args, previous, previous_dst, expected, expected_dst', [
- ({'minute': '*/5'}, datetime(2016, 10, 30, 2, 59), True, datetime(2016, 10, 30, 2), False),
- ({'hour': 2, 'minute': 30}, datetime(2016, 10, 30, 2, 30), True,
- datetime(2016, 10, 30, 2, 30), False),
- ({'hour': 2, 'minute': 30}, datetime(2016, 10, 30, 1), True,
- datetime(2016, 10, 30, 2, 30), True)
- ], ids=['backward1', 'backward2', 'forward'])
- def test_dst_backward(self, args, previous, previous_dst, expected, expected_dst, timezone):
- trigger = CronTrigger(timezone=timezone, **args)
- now = timezone.localize(datetime(2016, 10, 30, 4))
- previous = timezone.localize(previous, is_dst=previous_dst)
- expected = timezone.localize(expected, is_dst=expected_dst)
- assert trigger.get_next_fire_time(previous, now) == expected
-
class TestDateTrigger(object):
@pytest.mark.parametrize('run_date,alter_tz,previous,now,expected', [
++++++ fix-tests.patch ++++++
From: Antonio Larrosa