mirror of
https://github.com/bspeice/dtparse
synced 2024-12-21 20:08:10 -05:00
Remove a last println and use a static default parser
Heap profilers are fun
This commit is contained in:
parent
4d7c5dd995
commit
741afa3451
5
build_pycompat.py
Normal file → Executable file
5
build_pycompat.py
Normal file → Executable file
@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
from dateutil.tz import tzutc
|
from dateutil.tz import tzutc
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@ -232,7 +233,7 @@ fn parse_and_assert(
|
|||||||
tzinfos: &HashMap<String, i32>,
|
tzinfos: &HashMap<String, i32>,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
let mut parser = Parser::new(info);
|
let parser = Parser::new(info);
|
||||||
let rs_parsed = parser.parse(
|
let rs_parsed = parser.parse(
|
||||||
s,
|
s,
|
||||||
dayfirst,
|
dayfirst,
|
||||||
@ -282,7 +283,7 @@ fn parse_fuzzy_and_assert(
|
|||||||
tzinfos: &HashMap<String, i32>,
|
tzinfos: &HashMap<String, i32>,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
let mut parser = Parser::new(info);
|
let parser = Parser::new(info);
|
||||||
let rs_parsed = parser.parse(
|
let rs_parsed = parser.parse(
|
||||||
s,
|
s,
|
||||||
dayfirst,
|
dayfirst,
|
||||||
|
1
build_pycompat_tokenizer.py
Normal file → Executable file
1
build_pycompat_tokenizer.py
Normal file → Executable file
@ -1,3 +1,4 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
from dateutil.parser import _timelex
|
from dateutil.parser import _timelex
|
||||||
|
|
||||||
from build_pycompat import tests
|
from build_pycompat import tests
|
||||||
|
@ -108,6 +108,7 @@ lazy_static! {
|
|||||||
static ref ONE: Decimal = Decimal::new(1, 0);
|
static ref ONE: Decimal = Decimal::new(1, 0);
|
||||||
static ref TWENTY_FOUR: Decimal = Decimal::new(24, 0);
|
static ref TWENTY_FOUR: Decimal = Decimal::new(24, 0);
|
||||||
static ref SIXTY: Decimal = Decimal::new(60, 0);
|
static ref SIXTY: Decimal = Decimal::new(60, 0);
|
||||||
|
static ref DEFAULT_PARSER: Parser = Parser::default();
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<DecimalError> for ParseError {
|
impl From<DecimalError> for ParseError {
|
||||||
@ -670,7 +671,7 @@ impl Parser {
|
|||||||
/// order to be resolved.
|
/// order to be resolved.
|
||||||
#[cfg_attr(feature = "cargo-clippy", allow(too_many_arguments))] // Need to release a 2.0 for changing public API
|
#[cfg_attr(feature = "cargo-clippy", allow(too_many_arguments))] // Need to release a 2.0 for changing public API
|
||||||
pub fn parse(
|
pub fn parse(
|
||||||
&mut self,
|
&self,
|
||||||
timestr: &str,
|
timestr: &str,
|
||||||
dayfirst: Option<bool>,
|
dayfirst: Option<bool>,
|
||||||
yearfirst: Option<bool>,
|
yearfirst: Option<bool>,
|
||||||
@ -699,7 +700,7 @@ impl Parser {
|
|||||||
|
|
||||||
#[cfg_attr(feature = "cargo-clippy", allow(cyclomatic_complexity))] // Imitating Python API is priority
|
#[cfg_attr(feature = "cargo-clippy", allow(cyclomatic_complexity))] // Imitating Python API is priority
|
||||||
fn parse_with_tokens(
|
fn parse_with_tokens(
|
||||||
&mut self,
|
&self,
|
||||||
timestr: &str,
|
timestr: &str,
|
||||||
dayfirst: Option<bool>,
|
dayfirst: Option<bool>,
|
||||||
yearfirst: Option<bool>,
|
yearfirst: Option<bool>,
|
||||||
@ -953,7 +954,6 @@ impl Parser {
|
|||||||
) -> ParseResult<Option<FixedOffset>> {
|
) -> ParseResult<Option<FixedOffset>> {
|
||||||
// TODO: Actual timezone support
|
// TODO: Actual timezone support
|
||||||
if let Some(offset) = res.tzoffset {
|
if let Some(offset) = res.tzoffset {
|
||||||
println!("offset={}", offset);
|
|
||||||
Ok(Some(FixedOffset::east(offset)))
|
Ok(Some(FixedOffset::east(offset)))
|
||||||
} else if res.tzoffset == None
|
} else if res.tzoffset == None
|
||||||
&& (res.tzname == Some(" ".to_owned()) || res.tzname == Some(".".to_owned())
|
&& (res.tzname == Some(" ".to_owned()) || res.tzname == Some(".".to_owned())
|
||||||
@ -1283,7 +1283,7 @@ fn ljust(s: &str, chars: usize, replace: char) -> String {
|
|||||||
/// The default implementation assumes English values for names of months,
|
/// The default implementation assumes English values for names of months,
|
||||||
/// days of the week, etc. It is equivalent to Python's `dateutil.parser.parse()`
|
/// days of the week, etc. It is equivalent to Python's `dateutil.parser.parse()`
|
||||||
pub fn parse(timestr: &str) -> ParseResult<(NaiveDateTime, Option<FixedOffset>)> {
|
pub fn parse(timestr: &str) -> ParseResult<(NaiveDateTime, Option<FixedOffset>)> {
|
||||||
let res = Parser::default().parse(
|
let res = DEFAULT_PARSER.parse(
|
||||||
timestr,
|
timestr,
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
|
@ -16,7 +16,7 @@ fn test_fuzz() {
|
|||||||
// OverflowError: Python int too large to convert to C long
|
// OverflowError: Python int too large to convert to C long
|
||||||
// assert_eq!(parse("8888884444444888444444444881"), Err(ParseError::AmPmWithoutHour));
|
// assert_eq!(parse("8888884444444888444444444881"), Err(ParseError::AmPmWithoutHour));
|
||||||
let default = NaiveDate::from_ymd(2016, 6, 29).and_hms(0, 0, 0);
|
let default = NaiveDate::from_ymd(2016, 6, 29).and_hms(0, 0, 0);
|
||||||
let mut p = Parser::default();
|
let p = Parser::default();
|
||||||
let res = p.parse("\x0D\x31", None, None, false, false, Some(&default), false, &HashMap::new()).unwrap();
|
let res = p.parse("\x0D\x31", None, None, false, false, Some(&default), false, &HashMap::new()).unwrap();
|
||||||
assert_eq!(res.0, default);
|
assert_eq!(res.0, default);
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ fn parse_and_assert(
|
|||||||
tzinfos: &HashMap<String, i32>,
|
tzinfos: &HashMap<String, i32>,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
let mut parser = Parser::new(info);
|
let parser = Parser::new(info);
|
||||||
let rs_parsed = parser.parse(
|
let rs_parsed = parser.parse(
|
||||||
s,
|
s,
|
||||||
dayfirst,
|
dayfirst,
|
||||||
@ -89,7 +89,7 @@ fn parse_fuzzy_and_assert(
|
|||||||
tzinfos: &HashMap<String, i32>,
|
tzinfos: &HashMap<String, i32>,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
let mut parser = Parser::new(info);
|
let parser = Parser::new(info);
|
||||||
let rs_parsed = parser.parse(
|
let rs_parsed = parser.parse(
|
||||||
s,
|
s,
|
||||||
dayfirst,
|
dayfirst,
|
||||||
|
Loading…
Reference in New Issue
Block a user