From a236ca8ab209584e30df8caca73ad20073f9537b Mon Sep 17 00:00:00 2001 From: Oz N Tiram Date: Fri, 9 Sep 2022 21:42:21 +0200 Subject: [PATCH 1/3] Remove iso8601 from vendored packages Fix #4698. --- pipenv/vendor/iso8601/LICENSE | 20 --- pipenv/vendor/iso8601/__init__.py | 1 - pipenv/vendor/iso8601/__init__.pyi | 1 - pipenv/vendor/iso8601/iso8601.py | 214 -------------------------- pipenv/vendor/iso8601/iso8601.pyi | 67 -------- pipenv/vendor/iso8601/test_iso8601.py | 102 ------------ 6 files changed, 405 deletions(-) delete mode 100644 pipenv/vendor/iso8601/LICENSE delete mode 100644 pipenv/vendor/iso8601/__init__.py delete mode 100644 pipenv/vendor/iso8601/__init__.pyi delete mode 100644 pipenv/vendor/iso8601/iso8601.py delete mode 100644 pipenv/vendor/iso8601/iso8601.pyi delete mode 100644 pipenv/vendor/iso8601/test_iso8601.py diff --git a/pipenv/vendor/iso8601/LICENSE b/pipenv/vendor/iso8601/LICENSE deleted file mode 100644 index 4eb54eaf..00000000 --- a/pipenv/vendor/iso8601/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2007 - 2015 Michael Twomey - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pipenv/vendor/iso8601/__init__.py b/pipenv/vendor/iso8601/__init__.py deleted file mode 100644 index 11b1adcb..00000000 --- a/pipenv/vendor/iso8601/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .iso8601 import * diff --git a/pipenv/vendor/iso8601/__init__.pyi b/pipenv/vendor/iso8601/__init__.pyi deleted file mode 100644 index 11b1adcb..00000000 --- a/pipenv/vendor/iso8601/__init__.pyi +++ /dev/null @@ -1 +0,0 @@ -from .iso8601 import * diff --git a/pipenv/vendor/iso8601/iso8601.py b/pipenv/vendor/iso8601/iso8601.py deleted file mode 100644 index 1f54cdfe..00000000 --- a/pipenv/vendor/iso8601/iso8601.py +++ /dev/null @@ -1,214 +0,0 @@ -"""ISO 8601 date time string parsing - -Basic usage: ->>> import iso8601 ->>> iso8601.parse_date("2007-01-25T12:00:00Z") -datetime.datetime(2007, 1, 25, 12, 0, tzinfo=) ->>> - -""" - -import datetime -from decimal import Decimal -import sys -import re - -__all__ = ["parse_date", "ParseError", "UTC", - "FixedOffset"] - -if sys.version_info >= (3, 0, 0): - _basestring = str -else: - _basestring = basestring - - -# Adapted from http://delete.me.uk/2005/03/iso8601.html -ISO8601_REGEX = re.compile( - r""" - (?P[0-9]{4}) - ( - ( - (-(?P[0-9]{1,2})) - | - (?P[0-9]{2}) - (?!$) # Don't allow YYYYMM - ) - ( - ( - (-(?P[0-9]{1,2})) - | - (?P[0-9]{2}) - ) - ( - ( - (?P[ T]) - (?P[0-9]{2}) - (:{0,1}(?P[0-9]{2})){0,1} - ( - :{0,1}(?P[0-9]{1,2}) - ([.,](?P[0-9]+)){0,1} - ){0,1} - (?P - Z - | - ( - (?P[-+]) - (?P[0-9]{2}) - :{0,1} - (?P[0-9]{2}){0,1} - ) - ){0,1} - ){0,1} - ) - ){0,1} # YYYY-MM - ){0,1} # YYYY only - $ - """, - re.VERBOSE -) - -class ParseError(ValueError): - """Raised when there is a problem parsing a date string""" - -if sys.version_info >= (3, 2, 0): - UTC = datetime.timezone.utc - def FixedOffset(offset_hours, offset_minutes, name): - return datetime.timezone( - datetime.timedelta( - hours=offset_hours, minutes=offset_minutes), - name) -else: - # Yoinked from python docs - ZERO = datetime.timedelta(0) - class Utc(datetime.tzinfo): - """UTC Timezone - - """ - def utcoffset(self, dt): - return ZERO - - def tzname(self, dt): - return "UTC" - - def dst(self, dt): - return ZERO - - def __repr__(self): - return "" - - UTC = Utc() - - class FixedOffset(datetime.tzinfo): - """Fixed offset in hours and minutes from UTC - - """ - def __init__(self, offset_hours, offset_minutes, name): - self.__offset_hours = offset_hours # Keep for later __getinitargs__ - self.__offset_minutes = offset_minutes # Keep for later __getinitargs__ - self.__offset = datetime.timedelta( - hours=offset_hours, minutes=offset_minutes) - self.__name = name - - def __eq__(self, other): - if isinstance(other, FixedOffset): - return ( - (other.__offset == self.__offset) - and - (other.__name == self.__name) - ) - return NotImplemented - - def __getinitargs__(self): - return (self.__offset_hours, self.__offset_minutes, self.__name) - - def utcoffset(self, dt): - return self.__offset - - def tzname(self, dt): - return self.__name - - def dst(self, dt): - return ZERO - - def __repr__(self): - return "" % (self.__name, self.__offset) - - -def to_int(d, key, default_to_zero=False, default=None, required=True): - """Pull a value from the dict and convert to int - - :param default_to_zero: If the value is None or empty, treat it as zero - :param default: If the value is missing in the dict use this default - - """ - value = d.get(key) or default - if (value in ["", None]) and default_to_zero: - return 0 - if value is None: - if required: - raise ParseError("Unable to read %s from %s" % (key, d)) - else: - return int(value) - -def parse_timezone(matches, default_timezone=UTC): - """Parses ISO 8601 time zone specs into tzinfo offsets - - """ - - if matches["timezone"] == "Z": - return UTC - # This isn't strictly correct, but it's common to encounter dates without - # timezones so I'll assume the default (which defaults to UTC). - # Addresses issue 4. - if matches["timezone"] is None: - return default_timezone - sign = matches["tz_sign"] - hours = to_int(matches, "tz_hour") - minutes = to_int(matches, "tz_minute", default_to_zero=True) - description = "%s%02d:%02d" % (sign, hours, minutes) - if sign == "-": - hours = -hours - minutes = -minutes - return FixedOffset(hours, minutes, description) - -def parse_date(datestring, default_timezone=UTC): - """Parses ISO 8601 dates into datetime objects - - The timezone is parsed from the date string. However it is quite common to - have dates without a timezone (not strictly correct). In this case the - default timezone specified in default_timezone is used. This is UTC by - default. - - :param datestring: The date to parse as a string - :param default_timezone: A datetime tzinfo instance to use when no timezone - is specified in the datestring. If this is set to - None then a naive datetime object is returned. - :returns: A datetime.datetime instance - :raises: ParseError when there is a problem parsing the date or - constructing the datetime instance. - - """ - if not isinstance(datestring, _basestring): - raise ParseError("Expecting a string %r" % datestring) - m = ISO8601_REGEX.match(datestring) - if not m: - raise ParseError("Unable to parse date string %r" % datestring) - groups = m.groupdict() - - tz = parse_timezone(groups, default_timezone=default_timezone) - - groups["second_fraction"] = int(Decimal("0.%s" % (groups["second_fraction"] or 0)) * Decimal("1000000.0")) - - try: - return datetime.datetime( - year=to_int(groups, "year"), - month=to_int(groups, "month", default=to_int(groups, "monthdash", required=False, default=1)), - day=to_int(groups, "day", default=to_int(groups, "daydash", required=False, default=1)), - hour=to_int(groups, "hour", default_to_zero=True), - minute=to_int(groups, "minute", default_to_zero=True), - second=to_int(groups, "second", default_to_zero=True), - microsecond=groups["second_fraction"], - tzinfo=tz, - ) - except Exception as e: - raise ParseError(e) diff --git a/pipenv/vendor/iso8601/iso8601.pyi b/pipenv/vendor/iso8601/iso8601.pyi deleted file mode 100644 index ba5fe398..00000000 --- a/pipenv/vendor/iso8601/iso8601.pyi +++ /dev/null @@ -1,67 +0,0 @@ -import datetime -import sys -from typing import Any, Mapping, Optional, Pattern, TypeVar - - -__all__ = ["parse_date", "ParseError", "UTC", "FixedOffset"] - - -if sys.version_info >= (3, 0, 0): - basestring = str - -if sys.version_info >= (3, 2): - UTC: datetime.timezone = ... - - def FixedOffset( - offset_hours: float, offset_minutes: float, name: str - ) -> datetime.timezone: - ... - - -else: - ZERO: datetime.timedelta = ... - - class Utc(datetime.tzinfo): - ... - - UTC: Utc = ... - - class FixedOffset(datetime.tzinfo): - def __init__( - self, offset_hours: float, offset_minutes: float, name: str - ) -> None: - ... - - -ISO8601_REGEX: Pattern[basestring] = ... - - -class ParseError(ValueError): - - ... - - -_T = TypeVar("_T") - - -def to_int( - d: Mapping[_T, Any], - key: _T, - default_to_zero: bool = ..., - default: Any = ..., - required: bool = ..., -) -> int: - ... - - -def parse_timezone( - matches: Mapping[basestring, basestring], - default_timezone: Optional[datetime.tzinfo] = ..., -) -> datetime.tzinfo: - ... - - -def parse_date( - datestring: basestring, default_timezone: Optional[datetime.tzinfo] = ... -) -> datetime.datetime: - ... diff --git a/pipenv/vendor/iso8601/test_iso8601.py b/pipenv/vendor/iso8601/test_iso8601.py deleted file mode 100644 index 24a057f6..00000000 --- a/pipenv/vendor/iso8601/test_iso8601.py +++ /dev/null @@ -1,102 +0,0 @@ -# coding=UTF-8 -from __future__ import absolute_import - -import copy -import datetime -import pickle - -import pytest - -from pipenv.vendor.iso8601 import iso8601 - -def test_iso8601_regex(): - assert iso8601.ISO8601_REGEX.match("2006-10-11T00:14:33Z") - -def test_fixedoffset_eq(): - # See https://bitbucket.org/micktwomey/pyiso8601/issues/19 - datetime.tzinfo() == iso8601.FixedOffset(2, 0, '+2:00') - -def test_parse_no_timezone_different_default(): - tz = iso8601.FixedOffset(2, 0, "test offset") - d = iso8601.parse_date("2007-01-01T08:00:00", default_timezone=tz) - assert d == datetime.datetime(2007, 1, 1, 8, 0, 0, 0, tz) - assert d.tzinfo == tz - -def test_parse_utc_different_default(): - """Z should mean 'UTC', not 'default'. - - """ - tz = iso8601.FixedOffset(2, 0, "test offset") - d = iso8601.parse_date("2007-01-01T08:00:00Z", default_timezone=tz) - assert d == datetime.datetime(2007, 1, 1, 8, 0, 0, 0, iso8601.UTC) - -@pytest.mark.parametrize("invalid_date, error_string", [ - ("2013-10-", "Unable to parse date string"), - ("2013-", "Unable to parse date string"), - ("", "Unable to parse date string"), - (None, "Expecting a string"), - ("wibble", "Unable to parse date string"), - ("23", "Unable to parse date string"), - ("131015T142533Z", "Unable to parse date string"), - ("131015", "Unable to parse date string"), - ("20141", "Unable to parse date string"), - ("201402", "Unable to parse date string"), - ("2007-06-23X06:40:34.00Z", "Unable to parse date string"), # https://code.google.com/p/pyiso8601/issues/detail?id=14 - ("2007-06-23 06:40:34.00Zrubbish", "Unable to parse date string"), # https://code.google.com/p/pyiso8601/issues/detail?id=14 - ("20114-01-03T01:45:49", "Unable to parse date string"), -]) -def test_parse_invalid_date(invalid_date, error_string): - assert isinstance(invalid_date, str) or invalid_date is None # Why? 'cos I've screwed up the parametrize before :) - with pytest.raises(iso8601.ParseError) as exc: - iso8601.parse_date(invalid_date) - assert exc.errisinstance(iso8601.ParseError) - assert str(exc.value).startswith(error_string) - -@pytest.mark.parametrize("valid_date,expected_datetime,isoformat", [ - ("2007-06-23 06:40:34.00Z", datetime.datetime(2007, 6, 23, 6, 40, 34, 0, iso8601.UTC), "2007-06-23T06:40:34+00:00"), # Handle a separator other than T - ("1997-07-16T19:20+01:00", datetime.datetime(1997, 7, 16, 19, 20, 0, 0, iso8601.FixedOffset(1, 0, "+01:00")), "1997-07-16T19:20:00+01:00"), # Parse with no seconds - ("2007-01-01T08:00:00", datetime.datetime(2007, 1, 1, 8, 0, 0, 0, iso8601.UTC), "2007-01-01T08:00:00+00:00"), # Handle timezone-less dates. Assumes UTC. http://code.google.com/p/pyiso8601/issues/detail?id=4 - ("2006-10-20T15:34:56.123+02:30", datetime.datetime(2006, 10, 20, 15, 34, 56, 123000, iso8601.FixedOffset(2, 30, "+02:30")), None), - ("2006-10-20T15:34:56Z", datetime.datetime(2006, 10, 20, 15, 34, 56, 0, iso8601.UTC), "2006-10-20T15:34:56+00:00"), - ("2007-5-7T11:43:55.328Z", datetime.datetime(2007, 5, 7, 11, 43, 55, 328000, iso8601.UTC), "2007-05-07T11:43:55.328000+00:00"), # http://code.google.com/p/pyiso8601/issues/detail?id=6 - ("2006-10-20T15:34:56.123Z", datetime.datetime(2006, 10, 20, 15, 34, 56, 123000, iso8601.UTC), "2006-10-20T15:34:56.123000+00:00"), - ("2013-10-15T18:30Z", datetime.datetime(2013, 10, 15, 18, 30, 0, 0, iso8601.UTC), "2013-10-15T18:30:00+00:00"), - ("2013-10-15T22:30+04", datetime.datetime(2013, 10, 15, 22, 30, 0, 0, iso8601.FixedOffset(4, 0, "+04:00")), "2013-10-15T22:30:00+04:00"), #