14
0

Compare commits

...

20 Commits

Author SHA256 Message Date
2b327e4628 Accepting request 1231764 from devel:languages:python
- Add remove-six.patch to remove dependency on six module
  (gh#dateutil/dateutil!1403).

OBS-URL: https://build.opensuse.org/request/show/1231764
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=15
2024-12-19 20:39:55 +00:00
b5b61e1617 Fix patch
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-python-dateutil?expand=0&rev=34
2024-12-17 23:54:05 +00:00
bd776a405a Fix patch
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-python-dateutil?expand=0&rev=33
2024-12-17 23:47:39 +00:00
99775fd398 - Add remove-six.patch to remove dependency on six module
(gh#dateutil/dateutil!1403).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-python-dateutil?expand=0&rev=32
2024-12-17 23:43:45 +00:00
b17c00c3d1 Accepting request 1157042 from devel:languages:python
Forwarded request #1156451 from bnavigator

- Update to 2.9.0.post0
    * Pinned setuptools_scm to <8, which should make the generated
      _version.py file compatible with all supported versions of
      Python. (We don't do this at openSUSE, we don't need Python 2
      installs from a setuptools_scm v8 build)
  - Version 2.9.0
    * Updated tzdata version to 2024a. (gh pr #1342)
    * Made all dateutil submodules lazily imported using PEP 562. On
      Python 3.7+, things like import dateutil;
      dateutil.tz.gettz("America/New_York") will now work without
      explicitly importing dateutil.tz, with the import occurring
      behind the scenes on first use. The old behavior remains on
      Python 3.6 and earlier. Fixed by Orson Adams. (gh issue #771,
      gh pr #1007)
    * Removed a call to datetime.utcfromtimestamp, which is
      deprecated as of Python 3.12. Reported by Hugo van Kemenade (gh
      pr #1284), fixed by Thomas Grainger (gh pr #1285).
  - Provide underscore name: some consuming packages go with that,
    don't fail unnecessarily
  - Drop no-utcfromtimestamp.patch

OBS-URL: https://build.opensuse.org/request/show/1157042
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=14
2024-03-13 21:16:35 +00:00
cc3b445351 Accepting request 1156451 from home:bnavigator:branches:devel:languages:python
- Update to 2.9.0.post0
  * Pinned setuptools_scm to <8, which should make the generated
    _version.py file compatible with all supported versions of
    Python. (We don't do this at openSUSE, we don't need Python 2
    installs from a setuptools_scm v8 build)
- Version 2.9.0
  * Updated tzdata version to 2024a. (gh pr #1342)
  * Made all dateutil submodules lazily imported using PEP 562. On
    Python 3.7+, things like import dateutil;
    dateutil.tz.gettz("America/New_York") will now work without
    explicitly importing dateutil.tz, with the import occurring
    behind the scenes on first use. The old behavior remains on
    Python 3.6 and earlier. Fixed by Orson Adams. (gh issue #771,
    gh pr #1007)
  * Removed a call to datetime.utcfromtimestamp, which is
    deprecated as of Python 3.12. Reported by Hugo van Kemenade (gh
    pr #1284), fixed by Thomas Grainger (gh pr #1285).
- Provide underscore name: some consuming packages go with that,
  don't fail unnecessarily
- Drop no-utcfromtimestamp.patch

OBS-URL: https://build.opensuse.org/request/show/1156451
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-python-dateutil?expand=0&rev=30
2024-03-11 21:34:09 +00:00
d86ab7f938 Accepting request 1111822 from devel:languages:python
- Add patch no-utcfromtimestamp.patch, stop using a deprecated function.
- Switch to pyproject and autosetup macros.
- Stop using greedy globs in %files.

OBS-URL: https://build.opensuse.org/request/show/1111822
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=13
2023-09-22 19:46:42 +00:00
99034ec70a - Add patch no-utcfromtimestamp.patch, stop using a deprecated function.
- Switch to pyproject and autosetup macros.
- Stop using greedy globs in %files.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-python-dateutil?expand=0&rev=28
2023-09-18 04:40:05 +00:00
16233a1f61 Accepting request 1081587 from devel:languages:python
OBS-URL: https://build.opensuse.org/request/show/1081587
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=12
2023-04-22 19:57:45 +00:00
f62684b5d6 Accepting request 1081567 from home:dirkmueller:acdc:as_python3_module
SR for python stack proposal

OBS-URL: https://build.opensuse.org/request/show/1081567
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-python-dateutil?expand=0&rev=26
2023-04-21 13:22:34 +00:00
808a8f6313 Accepting request 908463 from devel:languages:python
- update to 2.8.2:
  - Updated tzdata version to 2021a. (gh pr #1128)
  - Fixed a bug in the parser where non-``ValueError`` exceptions would be raised
  during exception handling; this would happen, for example, if an
  ``IllegalMonthError`` was raised in ``dateutil`` code. Fixed by Mark Bailey.
  (gh issue #981, pr #987).
  - Fixed the custom ``repr`` for ``dateutil.parser.ParserError``, which was not
  defined due to an indentation error. (gh issue #991, gh pr #993)
  - Fixed a bug that caused ``b'`` prefixes to appear in parse_isodate exception
  messages. Reported and fixed by Paul Brown (@pawl) (gh pr #1122)
  - Make ``isoparse`` raise when trying to parse times with inconsistent use of
  `:` separator. Reported and fixed by @mariocj89 (gh pr #1125).
  - Fixed ``tz.gettz()`` not returning local time when passed an empty string.
  Reported by @labrys (gh issues #925, #926). Fixed by @ffe4 (gh pr #1024)
  * Documentation changes
  * Simplified handling of bytes and bytearray in ``_parser._timelex``.

OBS-URL: https://build.opensuse.org/request/show/908463
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=11
2021-07-28 17:19:25 +00:00
b1b13e511d Accepting request 765162 from devel:languages:python
- Update to 2.8.1:
  * Updated tzdata version to 2019c.
  * Fixed a race condition in the tzoffset and tzstr "strong"
    caches on Python 2.7. Reported by @kainjow (gh issue #901).
  * Parsing errors will now raise ParserError, a subclass of
    ValueError, which has a nicer string representation. Patch by
    @gfyoung (gh pr #881).
  * parser.parse will now raise TypeError when tzinfos is passed a
    type that cannot be interpreted as a time zone. Prior to this
    change, it would raise an UnboundLocalError instead. Patch by
    @jbrockmendel (gh pr #891).
  * Changed error message raised when when passing a bytes object as
    the time zone name to gettz in Python 3. Reported and fixed by
    @labrys () (gh issue #927, gh pr #935).
  * Changed compatibility logic to support a potential Python 4.0
    release. Patch by Hugo van Kemenade (gh pr #950).
  * Updated many modules to use tz.UTC in favor of tz.tzutc()
    internally, to avoid an unnecessary function call. (gh pr #910).
  * Fixed issue where dateutil.tz was using a backported version of
    contextlib.nullcontext even in Python 3.7 due to a malformed
    import statement. (gh pr #963).

OBS-URL: https://build.opensuse.org/request/show/765162
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=10
2020-01-19 20:00:44 +00:00
70b70351fe Accepting request 744004 from devel:languages:python
- Replace %fdupes -s with plain %fdupes; hardlinks are better.

OBS-URL: https://build.opensuse.org/request/show/744004
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=9
2019-11-04 16:12:00 +00:00
0262116be9 Accepting request 678904 from devel:languages:python
- Switch to _multibuild to not create buildcycle

- Update to 2.8.0 (2019-02-04)
  + Data updates
    * Updated tzdata version to to 2018i.
  + Features
    * Added support for EXDATE parameters when parsing rrule
      strings. Reported by @mlorant (gh issue #410), fixed by
      @nicoe (gh pr #859).
    * Added support for sub-minute time zone offsets in Python
      3.6+. Fixed by @cssherry (gh issue #582, pr #763)
    * Switched the tzoffset, tzstr and gettz caches over to using
      weak references, so that the cache expires when no other
      references to the original tzinfo objects exist. This cache-
      expiry behavior is not guaranteed in the public interface and
      may change in the future. To improve performance in the case
      where transient references to the same time zones are
      repeatedly created but no strong reference is continuously
      held, a smaller “strong value” cache was also added. Weak
      value cache implemented by @cs-cordero (gh pr #672, #801),
      strong cache added by Gökçen Nurlu (gh issue #691, gh pr
      #761)
  + Bugfixes
    * Added time zone inference when initializing an rrule with a
      specified UNTIL but without an explicitly specified DTSTART;
      the time zone of the generated DTSTART will now be taken from
      the UNTIL rule. Reported by @href (gh issue #652). Fixed by
      @absreim (gh pr #693).
    * Fixed an issue where parser.parse would raise Decimal-
      specific errors instead of a standard ValueError if certain

OBS-URL: https://build.opensuse.org/request/show/678904
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=8
2019-02-26 21:15:38 +00:00
730b5b54f5 Accepting request 659610 from devel:languages:python
Remove superfluous devel dependency for noarch package

OBS-URL: https://build.opensuse.org/request/show/659610
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=7
2018-12-26 23:27:54 +00:00
b2ca90e98b Accepting request 631025 from devel:languages:python
OBS-URL: https://build.opensuse.org/request/show/631025
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=6
2018-08-31 07:47:49 +00:00
87b731de8d Accepting request 509321 from devel:languages:python
1

OBS-URL: https://build.opensuse.org/request/show/509321
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=5
2017-07-17 07:00:45 +00:00
5e57fc90a7 Accepting request 493133 from devel:languages:python
1

OBS-URL: https://build.opensuse.org/request/show/493133
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=4
2017-05-09 15:58:54 +00:00
6248d3247d Accepting request 483978 from devel:languages:python
1

OBS-URL: https://build.opensuse.org/request/show/483978
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=3
2017-04-19 16:06:10 +00:00
07efceec5b Accepting request 439323 from devel:languages:python
1

OBS-URL: https://build.opensuse.org/request/show/439323
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-python-dateutil?expand=0&rev=2
2016-11-10 12:14:10 +00:00
5 changed files with 866 additions and 15 deletions

BIN
python-dateutil-2.8.2.tar.gz (Stored with Git LFS)

Binary file not shown.

BIN
python-dateutil-2.9.0.post0.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -1,3 +1,50 @@
-------------------------------------------------------------------
Tue Dec 17 23:25:58 UTC 2024 - Matej Cepl <mcepl@cepl.eu>
- Add remove-six.patch to remove dependency on six module
(gh#dateutil/dateutil!1403).
-------------------------------------------------------------------
Tue Mar 5 13:44:20 UTC 2024 - Ben Greiner <code@bnavigator.de>
- Update to 2.9.0.post0
* Pinned setuptools_scm to <8, which should make the generated
_version.py file compatible with all supported versions of
Python. (We don't do this at openSUSE, we don't need Python 2
installs from a setuptools_scm v8 build)
- Version 2.9.0
* Updated tzdata version to 2024a. (gh pr #1342)
* Made all dateutil submodules lazily imported using PEP 562. On
Python 3.7+, things like import dateutil;
dateutil.tz.gettz("America/New_York") will now work without
explicitly importing dateutil.tz, with the import occurring
behind the scenes on first use. The old behavior remains on
Python 3.6 and earlier. Fixed by Orson Adams. (gh issue #771,
gh pr #1007)
* Removed a call to datetime.utcfromtimestamp, which is
deprecated as of Python 3.12. Reported by Hugo van Kemenade (gh
pr #1284), fixed by Thomas Grainger (gh pr #1285).
- Provide underscore name: some consuming packages go with that,
don't fail unnecessarily
- Drop no-utcfromtimestamp.patch
-------------------------------------------------------------------
Mon Sep 18 04:39:14 UTC 2023 - Steve Kowalik <steven.kowalik@suse.com>
- Add patch no-utcfromtimestamp.patch, stop using a deprecated function.
- Switch to pyproject and autosetup macros.
- Stop using greedy globs in %files.
-------------------------------------------------------------------
Fri Apr 21 12:32:11 UTC 2023 - Dirk Müller <dmueller@suse.com>
- add sle15_python_module_pythons (jsc#PED-68)
-------------------------------------------------------------------
Thu Apr 13 22:44:14 UTC 2023 - Matej Cepl <mcepl@suse.com>
- Make calling of %{sle15modernpython} optional.
-------------------------------------------------------------------
Mon Jul 26 21:41:48 UTC 2021 - Dirk Müller <dmueller@suse.com>

View File

@@ -1,7 +1,7 @@
#
# spec file
# spec file for package python-python-dateutil
#
# Copyright (c) 2021 SUSE LLC
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,7 +16,6 @@
#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define oldpython python
%global flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == "test"
@@ -26,22 +25,28 @@
%define psuffix %{nil}
%bcond_with test
%endif
%{?sle15_python_module_pythons}
Name: python-python-dateutil%{psuffix}
Version: 2.8.2
Version: 2.9.0.post0
Release: 0
Summary: A Python Datetime Library
License: Apache-2.0 OR BSD-3-Clause
URL: https://dateutil.readthedocs.org/en/latest/
Source0: https://files.pythonhosted.org/packages/source/p/python-dateutil/python-dateutil-%{version}.tar.gz
# PATCH-FEATURE-UPSTREAM remove-six.patch gh#dateutil/dateutil!1403 mcepl@suse.com
# remove dependency on the six module
Patch0: remove-six.patch
BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools >= 24.3}
# Don't pin to <8 like upstream does: gh#dateutil/dateutil#1346
BuildRequires: %{python_module setuptools_scm}
BuildRequires: %{python_module six >= 1.5}
BuildRequires: %{python_module wheel}
BuildRequires: dos2unix
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-six >= 1.5
Obsoletes: python-dateutil < %{version}
Provides: python-dateutil = %{version}
Obsoletes: python-dateutil < %{version}-%{release}
Provides: python-dateutil = %{version}-%{release}
Provides: python-python_dateutil = %{version}-%{release}
BuildArch: noarch
%if %{with test}
BuildRequires: %{python_module freezegun}
@@ -85,16 +90,16 @@ datetime module.
Orthodox or Julian algorithms.
%prep
%setup -q -n python-dateutil-%{version}
%autosetup -p1 -n python-dateutil-%{version}
#cleanup and MSdos style end of line separators
dos2unix LICENSE NEWS PKG-INFO README.rst
%build
%python_build
%pyproject_wheel
%install
%if !%{with test}
%python_install
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%endif
@@ -109,7 +114,8 @@ export LANG=en_US.UTF-8
%files %{python_files}
%doc NEWS PKG-INFO README.rst
%license LICENSE
%{python_sitelib}/*
%{python_sitelib}/dateutil
%{python_sitelib}/python_dateutil-%{version}.dist-info
%endif
%changelog

798
remove-six.patch Normal file
View File

@@ -0,0 +1,798 @@
---
.github/workflows/validate.yml | 2 -
appveyor.yml | 1
azure-pipelines.yml | 2 -
docs/conf.py | 2 -
pyproject.toml | 2 -
requirements-dev.txt | 2 -
requirements/3.3/constraints.txt | 1
setup.cfg | 1
src/dateutil/parser/_parser.py | 15 ++++------
src/dateutil/parser/isoparser.py | 5 +--
src/dateutil/relativedelta.py | 3 --
src/dateutil/rrule.py | 43 +++++++++++++-----------------
src/dateutil/tz/_common.py | 15 ----------
src/dateutil/tz/_factories.py | 4 --
src/dateutil/tz/tz.py | 19 ++++---------
src/dateutil/tz/win.py | 8 ++---
src/python_dateutil.egg-info/requires.txt | 1
tests/property/test_tz_prop.py | 6 ----
tests/test_imports.py | 9 +-----
tests/test_isoparser.py | 17 ++---------
tests/test_parser.py | 14 ++-------
tests/test_rrule.py | 40 ---------------------------
tests/test_tz.py | 6 ----
updatezinfo.py | 4 +-
24 files changed, 56 insertions(+), 166 deletions(-)
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -60,7 +60,7 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
- run: python -m pip install -U tox six
+ run: python -m pip install -U tox
- name: Install zic (Windows)
run: |
curl https://get.enterprisedb.com/postgresql/postgresql-9.5.21-2-windows-x64-binaries.zip --output $env:GITHUB_WORKSPACE\postgresql9.5.21.zip
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -24,7 +24,6 @@ install:
# This frequently fails with network errors, so we'll retry it up to 5 times
# with a 1 minute rate limit.
- - "%PYTHON% -m pip install six"
- "ci_tools/retry.bat %PYTHON% updatezinfo.py"
# This environment variable tells the test suite it's OK to mess with the time zone.
- set DATEUTIL_MAY_CHANGE_TZ=1
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -49,7 +49,7 @@ steps:
versionSpec: $(python.version)
- bash: |
- python -m pip install -U six && python -m pip install -U 'tox < 3.8.0'
+ python -m pip install -U 'tox < 3.8.0'
if [[ $PYTHON_VERSION == "3.3" ]]; then pip install 'virtualenv<16.0'; fi
if [[ $PYTHON_VERSION == "3.3" ]]; then pip install 'setuptools<40.0'; fi
displayName: Ensure prereqs
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -188,7 +188,7 @@ htmlhelp_basename = 'dateutildoc'
# -- Options for autodoc -------------------------------------------------
-autodoc_mock_imports = ['ctypes.wintypes', 'six.moves.winreg']
+autodoc_mock_imports = ['ctypes.wintypes', 'winreg']
# Need to mock this out specifically to avoid errors
import ctypes
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -57,9 +57,7 @@ known_first_party = ["dateutil"]
known_third_party=[
"pytest",
"hypothesis",
- "six",
"freezegun",
- "mock",
]
multi_line_output=3
use_parentheses=true
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,9 +1,7 @@
-six
pytest >= 3.0; python_version != '3.3'
pytest-cov >= 2.0.0
freezegun ; python_version != '3.3'
hypothesis >= 3.30
coverage
-mock ; python_version < '3.0'
build >= 0.3.0 ; python_version >= '3.6'
attrs!=21.1.0
--- a/requirements/3.3/constraints.txt
+++ b/requirements/3.3/constraints.txt
@@ -10,6 +10,5 @@ py==1.4.34
pytest==3.2.5
pytest-cov==2.5.1
setuptools==39.2.0
-six==1.12.0
tox==2.9.1
virtualenv==15.2.0
--- a/setup.cfg
+++ b/setup.cfg
@@ -39,7 +39,6 @@ classifiers =
[options]
zip_safe = True
setup_requires = setuptools_scm
-install_requires = six >= 1.5
package_dir =
=src
python_requires = >=2.7, !=3.0.*, !=3.1.*, !=3.2.*
--- a/src/dateutil/parser/_parser.py
+++ b/src/dateutil/parser/_parser.py
@@ -39,9 +39,6 @@ import warnings
from calendar import monthrange
from io import StringIO
-import six
-from six import integer_types, text_type
-
from decimal import Decimal
from warnings import warn
@@ -63,7 +60,7 @@ class _timelex(object):
if isinstance(instream, (bytes, bytearray)):
instream = instream.decode()
- if isinstance(instream, text_type):
+ if isinstance(instream, str):
instream = StringIO(instream)
elif getattr(instream, 'read', None) is None:
raise TypeError('Parser must be a string or character stream, not '
@@ -648,7 +645,7 @@ class parser(object):
try:
ret = self._build_naive(res, default)
except ValueError as e:
- six.raise_from(ParserError(str(e) + ": %s", timestr), e)
+ raise ParserError(str(e) + ": %s", timestr) from e
if not ignoretz:
ret = self._build_tzaware(ret, res, tzinfos)
@@ -878,7 +875,7 @@ class parser(object):
try:
value = self._to_decimal(value_repr)
except Exception as e:
- six.raise_from(ValueError('Unknown numeric token'), e)
+ raise ValueError('Unknown numeric token') from e
len_li = len(value_repr)
@@ -1147,7 +1144,7 @@ class parser(object):
raise ValueError("Converted decimal value is infinite or NaN")
except Exception as e:
msg = "Could not convert %s to decimal" % val
- six.raise_from(ValueError(msg), e)
+ raise ValueError(msg) from e
else:
return decimal_value
@@ -1165,9 +1162,9 @@ class parser(object):
# eg tzinfos = {'BRST' : None}
if isinstance(tzdata, datetime.tzinfo) or tzdata is None:
tzinfo = tzdata
- elif isinstance(tzdata, text_type):
+ elif isinstance(tzdata, str):
tzinfo = tz.tzstr(tzdata)
- elif isinstance(tzdata, integer_types):
+ elif isinstance(tzdata, int):
tzinfo = tz.tzoffset(tzname, tzdata)
else:
raise TypeError("Offset must be tzinfo subclass, tz string, "
--- a/src/dateutil/parser/isoparser.py
+++ b/src/dateutil/parser/isoparser.py
@@ -14,7 +14,6 @@ from dateutil import tz
from functools import wraps
import re
-import six
__all__ = ["isoparse", "isoparser"]
@@ -26,13 +25,13 @@ def _takes_ascii(f):
str_in = getattr(str_in, 'read', lambda: str_in)()
# If it's unicode, turn it into bytes, since ISO-8601 only covers ASCII
- if isinstance(str_in, six.text_type):
+ if isinstance(str_in, str):
# ASCII is the same in UTF-8
try:
str_in = str_in.encode('ascii')
except UnicodeEncodeError as e:
msg = 'ISO-8601 strings should contain only ASCII characters'
- six.raise_from(ValueError(msg), e)
+ raise ValueError(msg) from e
return f(self, str_in, *args, **kwargs)
--- a/src/dateutil/relativedelta.py
+++ b/src/dateutil/relativedelta.py
@@ -5,7 +5,6 @@ import calendar
import operator
from math import copysign
-from six import integer_types
from warnings import warn
from ._common import weekday
@@ -200,7 +199,7 @@ class relativedelta(object):
"This is not a well-defined condition and will raise " +
"errors in future versions.", DeprecationWarning)
- if isinstance(weekday, integer_types):
+ if isinstance(weekday, int):
self.weekday = weekdays[weekday]
else:
self.weekday = weekday
--- a/src/dateutil/rrule.py
+++ b/src/dateutil/rrule.py
@@ -11,14 +11,11 @@ import heapq
import itertools
import re
import sys
+import _thread
from functools import wraps
# For warning about deprecation of until and count
from warnings import warn
-from six import advance_iterator, integer_types
-
-from six.moves import _thread, range
-
from ._common import weekday as weekdaybase
try:
@@ -134,7 +131,7 @@ class rrulebase(object):
break
try:
for j in range(10):
- cache.append(advance_iterator(gen))
+ cache.append(next(gen))
except StopIteration:
self._cache_gen = gen = None
self._cache_complete = True
@@ -161,7 +158,7 @@ class rrulebase(object):
gen = iter(self)
try:
for i in range(item+1):
- res = advance_iterator(gen)
+ res = next(gen)
except StopIteration:
raise IndexError
return res
@@ -479,14 +476,14 @@ class rrule(rrulebase):
if wkst is None:
self._wkst = calendar.firstweekday()
- elif isinstance(wkst, integer_types):
+ elif isinstance(wkst, int):
self._wkst = wkst
else:
self._wkst = wkst.weekday
if bysetpos is None:
self._bysetpos = None
- elif isinstance(bysetpos, integer_types):
+ elif isinstance(bysetpos, int):
if bysetpos == 0 or not (-366 <= bysetpos <= 366):
raise ValueError("bysetpos must be between 1 and 366, "
"or between -366 and -1")
@@ -520,7 +517,7 @@ class rrule(rrulebase):
if bymonth is None:
self._bymonth = None
else:
- if isinstance(bymonth, integer_types):
+ if isinstance(bymonth, int):
bymonth = (bymonth,)
self._bymonth = tuple(sorted(set(bymonth)))
@@ -532,7 +529,7 @@ class rrule(rrulebase):
if byyearday is None:
self._byyearday = None
else:
- if isinstance(byyearday, integer_types):
+ if isinstance(byyearday, int):
byyearday = (byyearday,)
self._byyearday = tuple(sorted(set(byyearday)))
@@ -542,7 +539,7 @@ class rrule(rrulebase):
if byeaster is not None:
if not easter:
from dateutil import easter
- if isinstance(byeaster, integer_types):
+ if isinstance(byeaster, int):
self._byeaster = (byeaster,)
else:
self._byeaster = tuple(sorted(byeaster))
@@ -556,7 +553,7 @@ class rrule(rrulebase):
self._bymonthday = ()
self._bynmonthday = ()
else:
- if isinstance(bymonthday, integer_types):
+ if isinstance(bymonthday, int):
bymonthday = (bymonthday,)
bymonthday = set(bymonthday) # Ensure it's unique
@@ -573,7 +570,7 @@ class rrule(rrulebase):
if byweekno is None:
self._byweekno = None
else:
- if isinstance(byweekno, integer_types):
+ if isinstance(byweekno, int):
byweekno = (byweekno,)
self._byweekno = tuple(sorted(set(byweekno)))
@@ -588,13 +585,13 @@ class rrule(rrulebase):
# If it's one of the valid non-sequence types, convert to a
# single-element sequence before the iterator that builds the
# byweekday set.
- if isinstance(byweekday, integer_types) or hasattr(byweekday, "n"):
+ if isinstance(byweekday, int) or hasattr(byweekday, "n"):
byweekday = (byweekday,)
self._byweekday = set()
self._bynweekday = set()
for wday in byweekday:
- if isinstance(wday, integer_types):
+ if isinstance(wday, int):
self._byweekday.add(wday)
elif not wday.n or freq > MONTHLY:
self._byweekday.add(wday.weekday)
@@ -629,7 +626,7 @@ class rrule(rrulebase):
else:
self._byhour = None
else:
- if isinstance(byhour, integer_types):
+ if isinstance(byhour, int):
byhour = (byhour,)
if freq == HOURLY:
@@ -649,7 +646,7 @@ class rrule(rrulebase):
else:
self._byminute = None
else:
- if isinstance(byminute, integer_types):
+ if isinstance(byminute, int):
byminute = (byminute,)
if freq == MINUTELY:
@@ -669,7 +666,7 @@ class rrule(rrulebase):
else:
self._bysecond = None
else:
- if isinstance(bysecond, integer_types):
+ if isinstance(bysecond, int):
bysecond = (bysecond,)
self._bysecond = set(bysecond)
@@ -1062,7 +1059,7 @@ class rrule(rrulebase):
cset = set()
# Support a single byxxx value.
- if isinstance(byxxx, integer_types):
+ if isinstance(byxxx, int):
byxxx = (byxxx, )
for num in byxxx:
@@ -1315,7 +1312,7 @@ class rruleset(rrulebase):
class _genitem(object):
def __init__(self, genlist, gen):
try:
- self.dt = advance_iterator(gen)
+ self.dt = next(gen)
genlist.append(self)
except StopIteration:
pass
@@ -1324,7 +1321,7 @@ class rruleset(rrulebase):
def __next__(self):
try:
- self.dt = advance_iterator(self.gen)
+ self.dt = next(self.gen)
except StopIteration:
if self.genlist[0] is self:
heapq.heappop(self.genlist)
@@ -1400,14 +1397,14 @@ class rruleset(rrulebase):
if not lastdt or lastdt != ritem.dt:
while exlist and exlist[0] < ritem:
exitem = exlist[0]
- advance_iterator(exitem)
+ next(exitem)
if exlist and exlist[0] is exitem:
heapq.heapreplace(exlist, exitem)
if not exlist or ritem != exlist[0]:
total += 1
yield ritem.dt
lastdt = ritem.dt
- advance_iterator(ritem)
+ next(ritem)
if rlist and rlist[0] is ritem:
heapq.heapreplace(rlist, ritem)
self._len = total
--- a/src/dateutil/tz/_common.py
+++ b/src/dateutil/tz/_common.py
@@ -1,5 +1,3 @@
-from six import PY2
-
from functools import wraps
from datetime import datetime, timedelta, tzinfo
@@ -16,18 +14,7 @@ def tzname_in_python2(namefunc):
tzname() API changed in Python 3. It used to return bytes, but was changed
to unicode strings
"""
- if PY2:
- @wraps(namefunc)
- def adjust_encoding(*args, **kwargs):
- name = namefunc(*args, **kwargs)
- if name is not None:
- name = name.encode()
-
- return name
-
- return adjust_encoding
- else:
- return namefunc
+ return namefunc
# The following is adapted from Alexander Belopolsky's tz library
--- a/src/dateutil/tz/_factories.py
+++ b/src/dateutil/tz/_factories.py
@@ -1,10 +1,8 @@
from datetime import timedelta
+import _thread
import weakref
from collections import OrderedDict
-from six.moves import _thread
-
-
class _TzSingleton(type):
def __init__(cls, *args, **kwargs):
cls.__instance = None
--- a/src/dateutil/tz/tz.py
+++ b/src/dateutil/tz/tz.py
@@ -13,12 +13,10 @@ import time
import sys
import os
import bisect
+import _thread
import weakref
from collections import OrderedDict
-import six
-from six import string_types
-from six.moves import _thread
from ._common import tzname_in_python2, _tzinfo
from ._common import tzrangebase, enfold
from ._common import _validate_fromutc_inputs
@@ -38,8 +36,7 @@ EPOCH = datetime.datetime(1970, 1, 1, 0,
EPOCHORDINAL = EPOCH.toordinal()
-@six.add_metaclass(_TzSingleton)
-class tzutc(datetime.tzinfo):
+class tzutc(datetime.tzinfo, metaclass=_TzSingleton):
"""
This is a tzinfo object that represents the UTC time zone.
@@ -129,8 +126,7 @@ class tzutc(datetime.tzinfo):
UTC = tzutc()
-@six.add_metaclass(_TzOffsetFactory)
-class tzoffset(datetime.tzinfo):
+class tzoffset(datetime.tzinfo, metaclass=_TzOffsetFactory):
"""
A simple class for representing a fixed offset from UTC.
@@ -459,7 +455,7 @@ class tzfile(_tzinfo):
super(tzfile, self).__init__()
file_opened_here = False
- if isinstance(fileobj, string_types):
+ if isinstance(fileobj, str):
self._filename = fileobj
fileobj = open(fileobj, 'rb')
file_opened_here = True
@@ -1033,8 +1029,7 @@ class tzrange(tzrangebase):
return self._dst_base_offset_
-@six.add_metaclass(_TzStrFactory)
-class tzstr(tzrange):
+class tzstr(tzrange, metaclass=_TzStrFactory):
"""
``tzstr`` objects are time zone objects specified by a time-zone string as
it would be passed to a ``TZ`` variable on POSIX-style systems (see
@@ -1265,7 +1260,7 @@ class tzical(object):
global rrule
from dateutil import rrule
- if isinstance(fileobj, string_types):
+ if isinstance(fileobj, str):
self._s = fileobj
# ical should be encoded in UTF-8 with CRLF
fileobj = open(fileobj, 'r')
@@ -1621,7 +1616,7 @@ def __get_gettz():
except TypeError as e:
if isinstance(name, bytes):
new_msg = "gettz argument should be str, not bytes"
- six.raise_from(TypeError(new_msg), e)
+ raise TypeError(new_msg) from e
else:
raise
if os.path.isabs(name):
--- a/src/dateutil/tz/win.py
+++ b/src/dateutil/tz/win.py
@@ -9,9 +9,7 @@ Attempting to import this module on a no
# This code was originally contributed by Jeffrey Harris.
import datetime
import struct
-
-from six.moves import winreg
-from six import text_type
+import winreg
try:
import ctypes
@@ -216,7 +214,7 @@ class tzwin(tzwinbase):
self._name = name
with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as handle:
- tzkeyname = text_type("{kn}\\{name}").format(kn=TZKEYNAME, name=name)
+ tzkeyname = str("{kn}\\{name}").format(kn=TZKEYNAME, name=name)
with winreg.OpenKey(handle, tzkeyname) as tzkey:
keydict = valuestodict(tzkey)
@@ -282,7 +280,7 @@ class tzwinlocal(tzwinbase):
self._dst_abbr = keydict["DaylightName"]
try:
- tzkeyname = text_type('{kn}\\{sn}').format(kn=TZKEYNAME,
+ tzkeyname = str('{kn}\\{sn}').format(kn=TZKEYNAME,
sn=self._std_abbr)
with winreg.OpenKey(handle, tzkeyname) as tzkey:
_keydict = valuestodict(tzkey)
--- a/src/python_dateutil.egg-info/requires.txt
+++ b/src/python_dateutil.egg-info/requires.txt
@@ -1 +0,0 @@
-six>=1.5
--- a/tests/property/test_tz_prop.py
+++ b/tests/property/test_tz_prop.py
@@ -1,7 +1,6 @@
from datetime import datetime, timedelta
import pytest
-import six
from hypothesis import assume, given
from hypothesis import strategies as st
@@ -25,10 +24,7 @@ def test_gettz_returns_local(gettz_arg,
return
dt_act = dt.astimezone(tz.gettz(gettz_arg))
- if six.PY2:
- dt_exp = dt.astimezone(tz.tzlocal())
- else:
- dt_exp = dt.astimezone()
+ dt_exp = dt.astimezone()
assert dt_act == dt_exp
assert dt_act.tzname() == dt_exp.tzname()
--- a/tests/test_imports.py
+++ b/tests/test_imports.py
@@ -1,7 +1,6 @@
import sys
import unittest
import pytest
-import six
MODULE_TYPE = type(sys)
@@ -10,12 +9,8 @@ MODULE_TYPE = type(sys)
# But since we expect lazy imports tests to fail for Python < 3.7 we'll ignore those
# warnings with this filter.
-if six.PY2:
- filter_import_warning = pytest.mark.filterwarnings("ignore::RuntimeWarning")
-else:
-
- def filter_import_warning(f):
- return f
+def filter_import_warning(f):
+ return f
@pytest.fixture(scope="function")
--- a/tests/test_isoparser.py
+++ b/tests/test_isoparser.py
@@ -9,7 +9,6 @@ from dateutil.tz import UTC
from dateutil.parser import isoparser, isoparse
import pytest
-import six
def _generate_tzoffsets(limited):
@@ -296,8 +295,7 @@ def test_isoparser_invalid_sep(sep):
isoparser(sep=sep)
-# This only fails on Python 3
-@pytest.mark.xfail(not six.PY2, reason="Fails on Python 3 only")
+@pytest.mark.xfail(reason="Fails on Python 3 only")
def test_isoparser_byte_sep():
dt = datetime(2017, 12, 6, 12, 30, 45)
dt_str = dt.isoformat(sep=str('T'))
@@ -347,10 +345,6 @@ def __make_date_examples():
date(2016, 2, 1)
]
- if not six.PY2:
- # strftime does not support dates before 1900 in Python 2
- dates_no_day.append(date(1000, 11, 1))
-
# Only one supported format for dates with no day
o = zip(dates_no_day, it.repeat('%Y-%m'))
@@ -371,7 +365,7 @@ def __make_date_examples():
@pytest.mark.parametrize('as_bytes', [True, False])
def test_parse_isodate(d, dt_fmt, as_bytes):
d_str = d.strftime(dt_fmt)
- if isinstance(d_str, six.text_type) and as_bytes:
+ if isinstance(d_str, str) and as_bytes:
d_str = d_str.encode('ascii')
elif isinstance(d_str, bytes) and not as_bytes:
d_str = d_str.decode('ascii')
@@ -400,10 +394,7 @@ def test_parse_isodate_error_text():
isoparser().parse_isodate('2014-0423')
# ensure the error message does not contain b' prefixes
- if six.PY2:
- expected_error = "String contains unknown ISO components: u'2014-0423'"
- else:
- expected_error = "String contains unknown ISO components: '2014-0423'"
+ expected_error = "String contains unknown ISO components: '2014-0423'"
assert expected_error == str(excinfo.value)
@@ -458,7 +449,7 @@ def __make_time_examples():
@pytest.mark.parametrize('as_bytes', [True, False])
def test_isotime(time_val, time_fmt, as_bytes):
tstr = time_val.strftime(time_fmt)
- if isinstance(tstr, six.text_type) and as_bytes:
+ if isinstance(tstr, str) and as_bytes:
tstr = tstr.encode('ascii')
elif isinstance(tstr, bytes) and not as_bytes:
tstr = tstr.decode('ascii')
--- a/tests/test_parser.py
+++ b/tests/test_parser.py
@@ -14,7 +14,6 @@ from dateutil.parser import UnknownTimez
from ._common import TZEnvContext
-from six import assertRaisesRegex, PY2
from io import StringIO
import pytest
@@ -462,13 +461,6 @@ class ParserTest(unittest.TestCase):
datetime(2003, 9, 25, 10, 36, 28,
tzinfo=self.brsttz))
- def testDateCommandFormatWithLong(self):
- if PY2:
- self.assertEqual(parse("Thu Sep 25 10:36:28 BRST 2003",
- tzinfos={"BRST": long(-10800)}),
- datetime(2003, 9, 25, 10, 36, 28,
- tzinfo=self.brsttz))
-
def testISOFormatStrip2(self):
self.assertEqual(parse("2003-09-25T10:49:41+03:00"),
datetime(2003, 9, 25, 10, 49, 41,
@@ -570,11 +562,11 @@ class ParserTest(unittest.TestCase):
parse('shouldfail')
def testCorrectErrorOnFuzzyWithTokens(self):
- assertRaisesRegex(self, ParserError, 'Unknown string format',
+ self.assertRaisesRegex(ParserError, 'Unknown string format',
parse, '04/04/32/423', fuzzy_with_tokens=True)
- assertRaisesRegex(self, ParserError, 'Unknown string format',
+ self.assertRaisesRegex(ParserError, 'Unknown string format',
parse, '04/04/04 +32423', fuzzy_with_tokens=True)
- assertRaisesRegex(self, ParserError, 'Unknown string format',
+ self.assertRaisesRegex(ParserError, 'Unknown string format',
parse, '04/04/0d4', fuzzy_with_tokens=True)
def testIncreasingCTime(self):
--- a/tests/test_rrule.py
+++ b/tests/test_rrule.py
@@ -3,7 +3,6 @@ from __future__ import unicode_literals
from datetime import datetime, date
import unittest
-from six import PY2
from dateutil import tz
from dateutil.rrule import (
@@ -2282,27 +2281,6 @@ class RRuleTest(unittest.TestCase):
datetime(2010, 3, 22, 13, 1),
datetime(2010, 3, 22, 14, 1)])
- def testLongIntegers(self):
- if PY2: # There are no longs in python3
- self.assertEqual(list(rrule(MINUTELY,
- count=long(2),
- interval=long(2),
- bymonth=long(2),
- byweekday=long(3),
- byhour=long(6),
- byminute=long(6),
- bysecond=long(6),
- dtstart=datetime(1997, 9, 2, 9, 0))),
- [datetime(1998, 2, 5, 6, 6, 6),
- datetime(1998, 2, 12, 6, 6, 6)])
- self.assertEqual(list(rrule(YEARLY,
- count=long(2),
- bymonthday=long(5),
- byweekno=long(2),
- dtstart=datetime(1997, 9, 2, 9, 0))),
- [datetime(1998, 1, 5, 9, 0),
- datetime(2004, 1, 5, 9, 0)])
-
def testHourlyBadRRule(self):
"""
When `byhour` is specified with `freq=HOURLY`, there are certain
@@ -4577,24 +4555,6 @@ class RRuleTest(unittest.TestCase):
wkst=SU,
dtstart=datetime(1997, 9, 2, 9, 0)))
- def testToStrLongIntegers(self):
- if PY2: # There are no longs in python3
- self._rrulestr_reverse_test(rrule(MINUTELY,
- count=long(2),
- interval=long(2),
- bymonth=long(2),
- byweekday=long(3),
- byhour=long(6),
- byminute=long(6),
- bysecond=long(6),
- dtstart=datetime(1997, 9, 2, 9, 0)))
-
- self._rrulestr_reverse_test(rrule(YEARLY,
- count=long(2),
- bymonthday=long(5),
- byweekno=long(2),
- dtstart=datetime(1997, 9, 2, 9, 0)))
-
def testReplaceIfSet(self):
rr = rrule(YEARLY,
count=1,
--- a/tests/test_tz.py
+++ b/tests/test_tz.py
@@ -7,7 +7,6 @@ from ._common import ComparesEqual
from datetime import datetime, timedelta
from datetime import time as dt_time
from datetime import tzinfo
-from six import PY2
from io import BytesIO, StringIO
import unittest
@@ -1114,11 +1113,6 @@ def test_gettz_badzone_unicode():
b"America/New_York",
".*should be str, not bytes.*",
id="bytes on Python 3",
- marks=[
- pytest.mark.skipif(
- PY2, reason="bytes arguments accepted in Python 2"
- )
- ],
),
pytest.param(
object(),
--- a/updatezinfo.py
+++ b/updatezinfo.py
@@ -4,8 +4,8 @@ import hashlib
import json
import io
-from six.moves.urllib import request
-from six.moves.urllib import error as urllib_error
+from urllib import request
+from urllib import error as urllib_error
try:
import dateutil