本文整理匯總了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)