Raise ParserError for an interval with mismatched endpoint types - #992
Open
eeshsaxena wants to merge 1 commit into
Open
Raise ParserError for an interval with mismatched endpoint types#992eeshsaxena wants to merge 1 commit into
eeshsaxena wants to merge 1 commit into
Conversation
pendulum.parse treats 'A/B' as an ISO 8601 interval. When one side parses to a date and the other to a bare time (e.g. '2020-01-01/12:30:00'), building the interval does Time - date and raised a bare TypeError out of parse(). Same for time/time and time/date. Convert that TypeError into a ParserError so callers get the documented parse error instead.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
pendulum.parse('2020-01-01/12:30:00')raisesTypeError: unsupported operand type(s) for -: 'Time' and 'datetime.date'instead of a ParserError.The
/makesparsetreat the string as an ISO 8601 interval. Here one side parses to a date and the other to a bare time, and building the interval computesend - start(Time - date), which is undefined. The same happens fortime/time(12:00:00/13:00:00) andtime/date. Valid intervals (datetime/datetime, date/date) are unaffected.I wrapped the two-endpoint
pendulum.interval(...)construction in_parseso aTypeErrorthere is re-raised asParserError, which is whatparsealready raises for other invalid input (and it subclasses ValueError, so existingexcept ValueErrorhandlers still work).Added a test in test_parsing.py covering the mismatched cases; it raises TypeError on master and passes with the change, and the rest of the parsing tests still pass. Found it by fuzzing
parsewith mutated date strings.