summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/croniter/croniter.py20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py
index af34f18..9a9d0f5 100644
--- a/src/croniter/croniter.py
+++ b/src/croniter/croniter.py
@@ -6,13 +6,13 @@ from __future__ import absolute_import, print_function, division
import math
import re
import sys
+import inspect
from time import time
import datetime
from dateutil.relativedelta import relativedelta
from dateutil.tz import tzutc
import calendar
import natsort
-from future.utils import raise_from
step_search_re = re.compile(r'^([^-]+)-([^-/]+)(/(\d+))?$')
@@ -21,6 +21,18 @@ star_or_int_re = re.compile(r'^(\d+|\*)$')
VALID_LEN_EXPRESSION = [5, 6]
+def _get_caller_globals_and_locals():
+ """
+ Returns the globals and locals of the calling frame.
+
+ Is there an alternative to frame hacking here?
+ """
+ caller_frame = inspect.stack()[2]
+ myglobals = caller_frame[0].f_globals
+ mylocals = caller_frame[0].f_locals
+ return myglobals, mylocals
+
+
class CroniterError(ValueError):
""" General top-level Croniter base exception """
pass
@@ -661,7 +673,11 @@ class croniter(object):
error_type, error_instance, traceback = sys.exc_info()
if isinstance(exc, CroniterError):
raise
- raise_from(CroniterBadCronError, exc)
+ if int(sys.version[0]) >= 3:
+ globs, locs = _get_caller_globals_and_locals()
+ exec("raise CroniterBadCronError from exc", globs, locs)
+ else:
+ raise CroniterBadCronError("{0}".format(exc))
@classmethod
def is_valid(cls, expression):