本文整理汇总了Python中dateparser.date.DateDataParser类的典型用法代码示例。如果您正苦于以下问题:Python DateDataParser类的具体用法?Python DateDataParser怎么用?Python DateDataParser使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DateDataParser类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __call__
def __call__(self,values):
ddp = DateDataParser()
values = ''.join(values)
values = values.replace(u'\u00ab',"")
values = values.replace(u'\u00bb',"")
dateobj = ddp.get_date_data(values)['date_obj']
return dateobj.strftime("%B %d, %Y, %H:%M:%S")
示例2: __call__
def __call__(self, values):
values = super(Date, self).__call__(values)
dates = []
for text in values:
if isinstance(text, (dict, list)):
dates.append(text)
try:
date = DateDataParser().get_date_data(text)['date_obj']
dates.append(date.strftime(self.format))
except ValueError:
pass
return dates
示例3: search_parse
def search_parse(self, shortname, text, settings):
translated, original = self.search(shortname, text, settings)
bad_translate_with_search = ['vi', 'hu'] # splitting done by spaces and some dictionary items contain spaces
if shortname not in bad_translate_with_search:
parser = DateDataParser(languages=['en'], settings=settings)
parsed, substrings = self.parse_found_objects(parser=parser, to_parse=translated,
original=original, translated=translated, settings=settings)
else:
parser = DateDataParser(languages=[shortname], settings=settings)
parsed, substrings = self.parse_found_objects(parser=parser, to_parse=original,
original=original, translated=translated, settings=settings)
parser._settings = Settings()
return list(zip(substrings, [i['date_obj'] for i in parsed]))
示例4: __init__
def __init__(self, config=None):
self.active_reminder = {}
self.regex = r'\[(.*)\]'
self.settings = {'PREFER_DATES_FROM': 'future',
'DATE_ORDER': 'DMY'}
self.parser = DateDataParser(languages=['en'],
allow_redetect_language=False,
settings=self.settings)
示例5: given_parser
def given_parser(self, *args, **kwds):
def collecting_get_date_data(parse):
@wraps(parse)
def wrapped(*args, **kwargs):
self.date_result = parse(*args, **kwargs)
return self.date_result
return wrapped
self.add_patch(patch.object(date_parser, "parse", collecting_get_date_data(date_parser.parse)))
self.date_parser = Mock(wraps=date_parser)
self.add_patch(patch("dateparser.date.date_parser", new=self.date_parser))
self.parser = DateDataParser(*args, **kwds)
示例6: given_parser
def given_parser(self):
def collecting_get_date_data(parse):
@wraps(parse)
def wrapped(date_string):
self.date_result = parse(date_string)
return self.date_result
return wrapped
self.add_patch(patch.object(date_parser,
'parse',
collecting_get_date_data(date_parser.parse)))
self.date_parser = Mock(wraps=date_parser)
self.add_patch(patch('dateparser.date.date_parser', new=self.date_parser))
self.parser = DateDataParser()
示例7: given_parser
def given_parser(self):
self.add_patch(patch.object(freshness_date_parser, 'now', self.now))
def collecting_get_date_data(get_date_data):
@wraps(get_date_data)
def wrapped(date_string):
self.freshness_result = get_date_data(date_string)
return self.freshness_result
return wrapped
self.add_patch(patch.object(freshness_date_parser,
'get_date_data',
collecting_get_date_data(freshness_date_parser.get_date_data)))
self.freshness_parser = Mock(wraps=freshness_date_parser)
self.add_patch(patch('dateparser.date.freshness_date_parser', new=self.freshness_parser))
self.parser = DateDataParser()
示例8: given_parser
def given_parser(self):
def collecting_get_date_data(get_date_data):
@wraps(get_date_data)
def wrapped(date_string):
self.freshness_result = get_date_data(date_string)
return self.freshness_result
return wrapped
self.add_patch(patch.object(freshness_date_parser,
'get_date_data',
collecting_get_date_data(freshness_date_parser.get_date_data)))
self.freshness_parser = Mock(wraps=freshness_date_parser)
dt_mock = Mock(wraps=dateparser.freshness_date_parser.datetime)
dt_mock.utcnow = Mock(return_value=self.now)
self.add_patch(patch('dateparser.freshness_date_parser.datetime', new=dt_mock))
self.add_patch(patch('dateparser.date.freshness_date_parser', new=self.freshness_parser))
self.parser = DateDataParser()
示例9: TestDateParser
#.........这里部分代码省略.........
self.given_configuration('PREFER_DAY_OF_MONTH', prefer_day_of_month)
self.given_utcnow(datetime(2015, 2, 12))
self.given_parser()
self.when_date_is_parsed('24 April 2012')
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(datetime(2012, 4, 24))
@parameterized.expand([
param('29 February 2015'),
param('32 January 2015'),
param('31 April 2015'),
param('31 June 2015'),
param('31 September 2015'),
])
def test_error_should_be_raised_for_invalid_dates_with_too_large_day_number(self, date_string):
self.when_date_is_parsed_by_date_parser(date_string)
self.then_error_was_raised(ValueError, ['Day not in range for month'])
@parameterized.expand([
param('2015-05-02T10:20:19+0000', languages=['fr'], expected=datetime(2015, 5, 2, 10, 20, 19)),
param('2015-05-02T10:20:19+0000', languages=['en'], expected=datetime(2015, 5, 2, 10, 20, 19)),
param('2015-05-02T10:20:19+0000', languages=[], expected=datetime(2015, 5, 2, 10, 20, 19)),
])
def test_iso_datestamp_format_should_always_parse(self, date_string, languages, expected):
self.given_local_tz_offset(0)
self.given_parser(languages=languages)
self.when_date_is_parsed(date_string)
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(expected)
@parameterized.expand([
param('10 December', expected=datetime(2015, 12, 10), period='day'),
param('March', expected=datetime(2015, 3, 15), period='month'),
param('April', expected=datetime(2015, 4, 15), period='month'),
param('December', expected=datetime(2015, 12, 15), period='month'),
param('Friday', expected=datetime(2015, 2, 13), period='day'),
param('Monday', expected=datetime(2015, 2, 9), period='day'),
param('10:00PM', expected=datetime(2015, 2, 15, 22, 00), period='day'),
param('16:10', expected=datetime(2015, 2, 15, 16, 10), period='day'),
param('2014', expected=datetime(2014, 2, 15), period='year'),
param('2008', expected=datetime(2008, 2, 15), period='year'),
])
def test_extracted_period(self, date_string, expected=None, period=None):
self.given_utcnow(datetime(2015, 2, 15, 15, 30)) # Sunday
self.given_local_tz_offset(0)
self.given_parser()
self.when_date_is_parsed(date_string)
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(expected)
self.then_period_is(period)
def given_utcnow(self, now):
datetime_mock = Mock(wraps=datetime)
datetime_mock.utcnow = Mock(return_value=now)
self.add_patch(patch('dateparser.date_parser.datetime', new=datetime_mock))
def given_local_tz_offset(self, offset):
self.add_patch(
patch.object(dateparser.timezone_parser,
'local_tz_offset',
new=timedelta(seconds=3600 * offset))
)
def given_parser(self, *args, **kwds):
def collecting_get_date_data(parse):
@wraps(parse)
def wrapped(date_string):
self.date_result = parse(date_string)
return self.date_result
return wrapped
self.add_patch(patch.object(date_parser,
'parse',
collecting_get_date_data(date_parser.parse)))
self.date_parser = Mock(wraps=date_parser)
self.add_patch(patch('dateparser.date.date_parser', new=self.date_parser))
self.parser = DateDataParser(*args, **kwds)
def given_configuration(self, key, value):
self.add_patch(patch.object(settings, key, new=value))
def when_date_is_parsed(self, date_string):
self.result = self.parser.get_date_data(date_string)
def when_date_is_parsed_by_date_parser(self, date_string):
try:
self.result = DateParser().parse(date_string)
except Exception as error:
self.error = error
def then_period_is(self, period):
self.assertEqual(period, self.result['period'])
def then_date_obj_exactly_is(self, expected):
self.assertEqual(expected, self.result['date_obj'])
def then_date_was_parsed_by_date_parser(self):
self.assertNotEqual(NotImplemented, self.date_result, "Date was not parsed")
self.assertEqual(self.result['date_obj'], self.date_result[0])
示例10: TestDateParser
#.........这里部分代码省略.........
param("32 January 2015", "day must be in 1..31"),
param("31 April 2015", "day must be in 1..30"),
param("31 June 2015", "day must be in 1..30"),
param("31 September 2015", "day must be in 1..30"),
]
)
def test_error_should_be_raised_for_invalid_dates_with_too_large_day_number(self, date_string, message):
self.when_date_is_parsed_by_date_parser(date_string)
self.then_error_was_raised(ValueError, ["day is out of range for month", message])
@parameterized.expand(
[
param("2015-05-02T10:20:19+0000", languages=["fr"], expected=datetime(2015, 5, 2, 10, 20, 19)),
param("2015-05-02T10:20:19+0000", languages=["en"], expected=datetime(2015, 5, 2, 10, 20, 19)),
param("2015-05-02T10:20:19+0000", languages=[], expected=datetime(2015, 5, 2, 10, 20, 19)),
]
)
def test_iso_datestamp_format_should_always_parse(self, date_string, languages, expected):
self.given_local_tz_offset(0)
self.given_parser(languages=languages, settings={"PREFER_LANGUAGE_DATE_ORDER": False})
self.when_date_is_parsed(date_string)
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(expected)
@parameterized.expand(
[
param("10 December", expected=datetime(2015, 12, 10), period="day"),
param("March", expected=datetime(2015, 3, 15), period="month"),
param("April", expected=datetime(2015, 4, 15), period="month"),
param("December", expected=datetime(2015, 12, 15), period="month"),
param("Friday", expected=datetime(2015, 2, 13), period="day"),
param("Monday", expected=datetime(2015, 2, 9), period="day"),
param("10:00PM", expected=datetime(2015, 2, 15, 22, 00), period="day"),
param("16:10", expected=datetime(2015, 2, 15, 16, 10), period="day"),
param("2014", expected=datetime(2014, 2, 15), period="year"),
param("2008", expected=datetime(2008, 2, 15), period="year"),
]
)
def test_extracted_period(self, date_string, expected=None, period=None):
self.given_local_tz_offset(0)
self.given_parser(settings={"RELATIVE_BASE": datetime(2015, 2, 15, 15, 30)})
self.when_date_is_parsed(date_string)
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(expected)
self.then_period_is(period)
@parameterized.expand(
[
param("15-12-18 06:00", expected=datetime(2015, 12, 18, 6, 0), order="YMD"),
param("15-18-12 06:00", expected=datetime(2015, 12, 18, 6, 0), order="YDM"),
param("10-11-12 06:00", expected=datetime(2012, 10, 11, 6, 0), order="MDY"),
param("10-11-12 06:00", expected=datetime(2011, 10, 12, 6, 0), order="MYD"),
param("10-11-12 06:00", expected=datetime(2011, 12, 10, 6, 0), order="DYM"),
param("15-12-18 06:00", expected=datetime(2018, 12, 15, 6, 0), order="DMY"),
]
)
def test_order(self, date_string, expected=None, order=None):
self.given_parser(settings={"DATE_ORDER": order})
self.when_date_is_parsed(date_string)
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(expected)
def given_local_tz_offset(self, offset):
self.add_patch(
patch.object(dateparser.timezone_parser, "local_tz_offset", new=timedelta(seconds=3600 * offset))
)
def given_parser(self, *args, **kwds):
def collecting_get_date_data(parse):
@wraps(parse)
def wrapped(*args, **kwargs):
self.date_result = parse(*args, **kwargs)
return self.date_result
return wrapped
self.add_patch(patch.object(date_parser, "parse", collecting_get_date_data(date_parser.parse)))
self.date_parser = Mock(wraps=date_parser)
self.add_patch(patch("dateparser.date.date_parser", new=self.date_parser))
self.parser = DateDataParser(*args, **kwds)
def when_date_is_parsed(self, date_string):
self.result = self.parser.get_date_data(date_string)
def when_date_is_parsed_by_date_parser(self, date_string):
try:
self.result = DateParser().parse(date_string)
except Exception as error:
self.error = error
def then_period_is(self, period):
self.assertEqual(period, self.result["period"])
def then_date_obj_exactly_is(self, expected):
self.assertEqual(expected, self.result["date_obj"])
def then_date_was_parsed_by_date_parser(self):
self.assertNotEqual(NotImplemented, self.date_result, "Date was not parsed")
self.assertEqual(self.result["date_obj"], self.date_result[0])
示例11: TestFreshnessDateDataParser
class TestFreshnessDateDataParser(BaseTestCase):
def setUp(self):
super(TestFreshnessDateDataParser, self).setUp()
self.now = datetime(2014, 9, 1, 10, 30)
self.date_string = NotImplemented
self.parser = NotImplemented
self.result = NotImplemented
self.freshness_parser = NotImplemented
self.freshness_result = NotImplemented
self.exception = NotImplemented
self.date = NotImplemented
self.time = NotImplemented
@parameterized.expand([
# English dates
param('yesterday', ago={'days': 1}, period='day'),
param('the day before yesterday', ago={'days': 2}, period='day'),
param('today', ago={'days': 0}, period='day'),
param('an hour ago', ago={'hours': 1}, period='day'),
param('about an hour ago', ago={'hours': 1}, period='day'),
param('a day ago', ago={'days': 1}, period='day'),
param('a week ago', ago={'weeks': 1}, period='week'),
param('one week ago', ago={'weeks': 1}, period='week'),
param('2 hours ago', ago={'hours': 2}, period='day'),
param('about 23 hours ago', ago={'hours': 23}, period='day'),
param('1 year 2 months', ago={'years': 1, 'months': 2}, period='month'),
param('1 year, 09 months,01 weeks', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 year 11 months', ago={'years': 1, 'months': 11}, period='month'),
param('1 year 12 months', ago={'years': 1, 'months': 12}, period='month'),
param('15 hr', ago={'hours': 15}, period='day'),
param('15 hrs', ago={'hours': 15}, period='day'),
param('2 min', ago={'minutes': 2}, period='day'),
param('2 mins', ago={'minutes': 2}, period='day'),
param('3 sec', ago={'seconds': 3}, period='day'),
param('1000 years ago', ago={'years': 1000}, period='year'),
param('2013 years ago', ago={'years': 2013}, period='year'), # We've fixed .now in setUp
param('5000 months ago', ago={'years': 416, 'months': 8}, period='month'),
param('{} months ago'.format(2013 * 12 + 8), ago={'years': 2013, 'months': 8}, period='month'),
param('1 year, 1 month, 1 week, 1 day, 1 hour and 1 minute ago',
ago={'years': 1, 'months': 1, 'weeks': 1, 'days': 1, 'hours': 1, 'minutes': 1},
period='day'),
# French dates
param("Aujourd'hui", ago={'days': 0}, period='day'),
param("Hier", ago={'days': 1}, period='day'),
param("Avant-hier", ago={'days': 2}, period='day'),
param('Il ya un jour', ago={'days': 1}, period='day'),
param('Il ya une heure', ago={'hours': 1}, period='day'),
param('Il ya 2 heures', ago={'hours': 2}, period='day'),
param('Il ya environ 23 heures', ago={'hours': 23}, period='day'),
param('1 an 2 mois', ago={'years': 1, 'months': 2}, period='month'),
param('1 année, 09 mois, 01 semaines', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 an 11 mois', ago={'years': 1, 'months': 11}, period='month'),
param('Il ya 1 an, 1 mois, 1 semaine, 1 jour, 1 heure et 1 minute',
ago={'years': 1, 'months': 1, 'weeks': 1, 'days': 1, 'hours': 1, 'minutes': 1},
period='day'),
param('Il y a 40 min', ago={'minutes': 40}, period='day'),
# German dates
param('Heute', ago={'days': 0}, period='day'),
param('Gestern', ago={'days': 1}, period='day'),
param('vorgestern', ago={'days': 2}, period='day'),
param('vor einem Tag', ago={'days': 1}, period='day'),
param('vor einer Stunden', ago={'hours': 1}, period='day'),
param('Vor 2 Stunden', ago={'hours': 2}, period='day'),
param('Vor 2 Stunden', ago={'hours': 2}, period='day'),
param('vor etwa 23 Stunden', ago={'hours': 23}, period='day'),
param('1 Jahr 2 Monate', ago={'years': 1, 'months': 2}, period='month'),
param('1 Jahr, 09 Monate, 01 Wochen', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 Jahr 11 Monate', ago={'years': 1, 'months': 11}, period='month'),
param('vor 29h', ago={'hours': 29}, period='day'),
param('vor 29m', ago={'minutes': 29}, period='day'),
param('1 Jahr, 1 Monat, 1 Woche, 1 Tag, 1 Stunde und 1 Minute',
ago={'years': 1, 'months': 1, 'weeks': 1, 'days': 1, 'hours': 1, 'minutes': 1},
period='day'),
# Italian dates
param('oggi', ago={'days': 0}, period='day'),
param('ieri', ago={'days': 1}, period='day'),
param('2 ore fa', ago={'hours': 2}, period='day'),
param('circa 23 ore fa', ago={'hours': 23}, period='day'),
param('1 anno 2 mesi', ago={'years': 1, 'months': 2}, period='month'),
param('1 anno, 09 mesi, 01 settimane', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 anno 11 mesi', ago={'years': 1, 'months': 11}, period='month'),
param('1 anno, 1 mese, 1 settimana, 1 giorno, 1 ora e 1 minuto fa',
ago={'years': 1, 'months': 1, 'weeks': 1, 'days': 1, 'hours': 1, 'minutes': 1},
period='day'),
# Portuguese dates
param('ontem', ago={'days': 1}, period='day'),
param('anteontem', ago={'days': 2}, period='day'),
param('hoje', ago={'days': 0}, period='day'),
param('uma hora atrás', ago={'hours': 1}, period='day'),
param('um dia atrás', ago={'days': 1}, period='day'),
param('uma semana atrás', ago={'weeks': 1}, period='week'),
param('2 horas atrás', ago={'hours': 2}, period='day'),
param('cerca de 23 horas atrás', ago={'hours': 23}, period='day'),
param('1 ano 2 meses', ago={'years': 1, 'months': 2}, period='month'),
param('1 ano, 09 meses, 01 semanas', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 ano 11 meses', ago={'years': 1, 'months': 11}, period='month'),
#.........这里部分代码省略.........
示例12: TestFreshnessDateDataParser
class TestFreshnessDateDataParser(BaseTestCase):
def setUp(self):
super(TestFreshnessDateDataParser, self).setUp()
self.now = datetime(2014, 9, 1, 10, 30)
self.date_string = NotImplemented
self.parser = NotImplemented
self.result = NotImplemented
self.freshness_parser = NotImplemented
self.freshness_result = NotImplemented
self.date = NotImplemented
self.time = NotImplemented
@parameterized.expand([
# English dates
param('yesterday', ago={'days': 1}, period='day'),
param('the day before yesterday', ago={'days': 2}, period='day'),
param('today', ago={'days': 0}, period='day'),
param('an hour ago', ago={'hours': 1}, period='day'),
param('about an hour ago', ago={'hours': 1}, period='day'),
param('a day ago', ago={'days': 1}, period='day'),
param('a week ago', ago={'weeks': 1}, period='week'),
param('one week ago', ago={'weeks': 1}, period='week'),
param('2 hours ago', ago={'hours': 2}, period='day'),
param('about 23 hours ago', ago={'hours': 23}, period='day'),
param('1 year 2 months', ago={'years': 1, 'months': 2}, period='month'),
param('1 year, 09 months,01 weeks', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 year 11 months', ago={'years': 1, 'months': 11}, period='month'),
param('1 year 12 months', ago={'years': 1, 'months': 12}, period='month'),
param('15 hr', ago={'hours': 15}, period='day'),
param('15 hrs', ago={'hours': 15}, period='day'),
param('2 min', ago={'minutes': 2}, period='day'),
param('2 mins', ago={'minutes': 2}, period='day'),
param('3 sec', ago={'seconds': 3}, period='day'),
param('1000 years ago', ago={'years': 1000}, period='year'),
param('2013 years ago', ago={'years': 2013}, period='year'), # We've fixed .now in setUp
param('5000 months ago', ago={'years': 416, 'months': 8}, period='month'),
param('{} months ago'.format(2013 * 12 + 8), ago={'years': 2013, 'months': 8}, period='month'),
param('1 year, 1 month, 1 week, 1 day, 1 hour and 1 minute ago',
ago={'years': 1, 'months': 1, 'weeks': 1, 'days': 1, 'hours': 1, 'minutes': 1},
period='day'),
param('just now', ago={'seconds': 0}, period='day'),
# French dates
param("Aujourd'hui", ago={'days': 0}, period='day'),
param("Aujourd’hui", ago={'days': 0}, period='day'),
param("Aujourdʼhui", ago={'days': 0}, period='day'),
param("Aujourdʻhui", ago={'days': 0}, period='day'),
param("Aujourd՚hui", ago={'days': 0}, period='day'),
param("Aujourdꞌhui", ago={'days': 0}, period='day'),
param("Aujourd'hui", ago={'days': 0}, period='day'),
param("Aujourd′hui", ago={'days': 0}, period='day'),
param("Aujourd‵hui", ago={'days': 0}, period='day'),
param("Aujourdʹhui", ago={'days': 0}, period='day'),
param("Aujourd'hui", ago={'days': 0}, period='day'),
param("Hier", ago={'days': 1}, period='day'),
param("Avant-hier", ago={'days': 2}, period='day'),
param('Il ya un jour', ago={'days': 1}, period='day'),
param('Il ya une heure', ago={'hours': 1}, period='day'),
param('Il ya 2 heures', ago={'hours': 2}, period='day'),
param('Il ya environ 23 heures', ago={'hours': 23}, period='day'),
param('1 an 2 mois', ago={'years': 1, 'months': 2}, period='month'),
param('1 année, 09 mois, 01 semaines', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 an 11 mois', ago={'years': 1, 'months': 11}, period='month'),
param('Il ya 1 an, 1 mois, 1 semaine, 1 jour, 1 heure et 1 minute',
ago={'years': 1, 'months': 1, 'weeks': 1, 'days': 1, 'hours': 1, 'minutes': 1},
period='day'),
param('Il y a 40 min', ago={'minutes': 40}, period='day'),
# German dates
param('Heute', ago={'days': 0}, period='day'),
param('Gestern', ago={'days': 1}, period='day'),
param('vorgestern', ago={'days': 2}, period='day'),
param('vor einem Tag', ago={'days': 1}, period='day'),
param('vor einer Stunden', ago={'hours': 1}, period='day'),
param('Vor 2 Stunden', ago={'hours': 2}, period='day'),
param('Vor 2 Stunden', ago={'hours': 2}, period='day'),
param('vor etwa 23 Stunden', ago={'hours': 23}, period='day'),
param('1 Jahr 2 Monate', ago={'years': 1, 'months': 2}, period='month'),
param('1 Jahr, 09 Monate, 01 Wochen', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 Jahr 11 Monate', ago={'years': 1, 'months': 11}, period='month'),
param('vor 29h', ago={'hours': 29}, period='day'),
param('vor 29m', ago={'minutes': 29}, period='day'),
param('1 Jahr, 1 Monat, 1 Woche, 1 Tag, 1 Stunde und 1 Minute',
ago={'years': 1, 'months': 1, 'weeks': 1, 'days': 1, 'hours': 1, 'minutes': 1},
period='day'),
# Italian dates
param('oggi', ago={'days': 0}, period='day'),
param('ieri', ago={'days': 1}, period='day'),
param('2 ore fa', ago={'hours': 2}, period='day'),
param('circa 23 ore fa', ago={'hours': 23}, period='day'),
param('1 anno 2 mesi', ago={'years': 1, 'months': 2}, period='month'),
param('1 anno, 09 mesi, 01 settimane', ago={'years': 1, 'months': 9, 'weeks': 1}, period='week'),
param('1 anno 11 mesi', ago={'years': 1, 'months': 11}, period='month'),
param('1 anno, 1 mese, 1 settimana, 1 giorno, 1 ora e 1 minuto fa',
ago={'years': 1, 'months': 1, 'weeks': 1, 'days': 1, 'hours': 1, 'minutes': 1},
period='day'),
# Portuguese dates
param('ontem', ago={'days': 1}, period='day'),
#.........这里部分代码省略.........
示例13: _parser_get_date
def _parser_get_date(self, date_string, date_formats, languages):
parser = DateDataParser(languages)
return parser.get_date_data(date_string, date_formats)
示例14: Reminder
class Reminder():
def __init__(self, config=None):
self.active_reminder = {}
self.regex = r'\[(.*)\]'
self.settings = {'PREFER_DATES_FROM': 'future',
'DATE_ORDER': 'DMY'}
self.parser = DateDataParser(languages=['en'],
allow_redetect_language=False,
settings=self.settings)
async def send_reminder_start_msg(self, user, channel, client, time):
'''
Gives an acknowledgement that the reminder has been set.
'''
time = time.replace(microsecond=0)
msg = ":+1: %s I'll remind you at %s UTC." % (user, str(time))
await client.send_message(channel, msg)
async def send_reminder_end_msg(self, user, channel, client, text):
'''
Sends the message when the reminder finishes with the text
if it was passed in.
'''
if text:
msg = 'Hello %s, you asked me to remind you of **%s**.' % (user,
text)
else:
msg = 'Hello %s, you asked me to remind you at this time.' % user
await client.send_message(channel, msg)
async def start_reminder_sleep(self, delta, user, channel, client, text, time):
'''
Asyncronously sleeps for the reminder length.
'''
# Send a message that the reminder is going to be set.
await self.send_reminder_start_msg(user, channel, client, time)
await asyncio.sleep(delta.total_seconds())
await self.send_reminder_end_msg(user, channel, client, text)
def apply_regex(self, msg):
'''
Applies the regex to check if the user passed
in a optional string in square brackets.
Returns the original message with the string
removed and the captured msg.
'''
regex_result = re.search(self.regex, msg)
if regex_result:
msg = re.sub(self.regex, '', msg).strip()
return msg, regex_result.group(1)
else:
return False
def parse_msg(self, msg, user):
'''
Parses the message passed along with the !remind command.
Uses the dateparser library to check if the time string
is valid
Format: !remindme <time period> [optional string]
'''
parsed_time = self.parser.get_date_data(msg)['date_obj']
if not parsed_time:
error_msg = ('I could not interept your message %s, try specifing '
'the time period in a different format.') % user
return (False, error_msg)
now = datetime.utcnow()
if parsed_time < now:
error_msg = ("Dont waste my time %s, you can't expect "
"me to remind you of an event in the past.") % user
return (False, error_msg)
difference = parsed_time - now
return (True, difference, parsed_time)
@register('!remindme')
async def set_reminder(self, msg, user, channel, client, *args, **kwargs):
'''
Main function that called to set a reminder. Calls the
helper functions to parse and to check if its valid.
If the message is valid, the asyncronous sleep function
is called.
Currently loses state on restart ;_; could write/load
to a file.
'''
reminder_txt = None
optional_string = self.apply_regex(msg)
if optional_string:
msg, reminder_txt = optional_string
parsed_msg = self.parse_msg(msg, user)
if not parsed_msg[0]:
return parsed_msg[1]
else:
await self.start_reminder_sleep(parsed_msg[1], user,
channel, client, reminder_txt,
parsed_msg[2])
示例15: TestDateParser
#.........这里部分代码省略.........
param('December 2014', today=datetime(2015, 2, 15), expected=datetime(2014, 12, 31)),
])
def test_dates_with_day_missing_prefering_last_day_of_month(self, date_string, today=None, expected=None):
self.given_configuration('PREFER_DAY_OF_MONTH', 'last')
self.given_utcnow(today)
self.given_parser()
self.given_date_string(date_string)
self.when_date_is_parsed()
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(expected)
@parameterized.expand([
param('February 2015', today=datetime(2015, 1, 8), expected=datetime(2015, 2, 1)),
param('February 2012', today=datetime(2015, 1, 7), expected=datetime(2012, 2, 1)),
param('March 2015', today=datetime(2015, 1, 25), expected=datetime(2015, 3, 1)),
param('April 2015', today=datetime(2015, 1, 15), expected=datetime(2015, 4, 1)),
param('April 2015', today=datetime(2015, 2, 28), expected=datetime(2015, 4, 1)),
param('December 2014', today=datetime(2015, 2, 15), expected=datetime(2014, 12, 1)),
])
def test_dates_with_day_missing_prefering_first_day_of_month(self, date_string, today=None, expected=None):
self.given_configuration('PREFER_DAY_OF_MONTH', 'first')
self.given_utcnow(today)
self.given_parser()
self.given_date_string(date_string)
self.when_date_is_parsed()
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(expected)
@parameterized.expand([
param(prefer_day_of_month='current'),
param(prefer_day_of_month='last'),
param(prefer_day_of_month='first'),
])
def test_that_day_preference_does_not_affect_dates_with_explicit_day(self, prefer_day_of_month=None):
self.given_configuration('PREFER_DAY_OF_MONTH', prefer_day_of_month)
self.given_utcnow(datetime(2015, 2, 12))
self.given_parser()
self.given_date_string('24 April 2012')
self.when_date_is_parsed()
self.then_date_was_parsed_by_date_parser()
self.then_date_obj_exactly_is(datetime(2012, 4, 24))
@parameterized.expand([
param('29 February 2015'),
param('32 January 2015'),
param('31 April 2015'),
param('31 June 2015'),
param('31 September 2015'),
])
def test_error_should_be_raised_for_invalid_dates_with_too_large_day_number(self, date_string):
with self.assertRaisesRegexp(ValueError, 'Day not in range for month'):
DateParser().parse(date_string)
def given_utcnow(self, now):
datetime_mock = Mock(wraps=datetime)
datetime_mock.utcnow = Mock(return_value=now)
self.add_patch(patch('dateparser.date_parser.datetime', new=datetime_mock))
def given_local_tz_offset(self, offset):
self.add_patch(
patch.object(dateparser.timezone_parser,
'local_tz_offset',
new=timedelta(seconds=3600 * offset))
)
def given_date_string(self, date_string):
self.date_string = date_string
def given_parser(self):
def collecting_get_date_data(parse):
@wraps(parse)
def wrapped(date_string):
self.date_result = parse(date_string)
return self.date_result
return wrapped
self.add_patch(patch.object(date_parser,
'parse',
collecting_get_date_data(date_parser.parse)))
self.date_parser = Mock(wraps=date_parser)
self.add_patch(patch('dateparser.date.date_parser', new=self.date_parser))
self.parser = DateDataParser()
def given_configuration(self, key, value):
self.add_patch(patch.object(settings, key, new=value))
def when_date_is_parsed(self):
self.result = self.parser.get_date_data(self.date_string)
def then_period_is(self, period):
self.assertEqual(period, self.result['period'])
def then_date_obj_exactly_is(self, expected):
self.assertEqual(expected, self.result['date_obj'])
def then_date_was_not_parsed(self):
self.assertIsNone(self.result['date_obj'], '"%s" should not be parsed' % self.date_string)
def then_date_was_parsed_by_date_parser(self):
self.assertEqual(self.result['date_obj'], self.date_result)