dateparser 1.1.8__tar.gz → 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dateparser-1.1.8 → dateparser-1.2.1}/HISTORY.rst +45 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/PKG-INFO +86 -10
- {dateparser-1.1.8 → dateparser-1.2.1}/README.rst +6 -6
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/__init__.py +26 -8
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/calendars/__init__.py +30 -23
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/calendars/hijri_parser.py +12 -8
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/calendars/jalali.py +2 -1
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/calendars/jalali_parser.py +73 -43
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/conf.py +74 -75
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/custom_language_detection/fasttext.py +5 -7
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/en.py +1 -1
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ru.py +6 -0
- dateparser-1.2.1/dateparser/data/languages_info.py +826 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/date.py +185 -109
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/date_parser.py +10 -11
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/freshness_date_parser.py +40 -44
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/languages/dictionary.py +137 -62
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/languages/loader.py +71 -30
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/languages/locale.py +173 -103
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/languages/validation.py +158 -59
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/parser.py +260 -166
- dateparser-1.2.1/dateparser/search/__init__.py +71 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/search/detection.py +14 -6
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/search/search.py +97 -43
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/search/text_detection.py +30 -7
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/timezone_parser.py +20 -20
- dateparser-1.2.1/dateparser/timezones.py +469 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/utils/__init__.py +67 -48
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/utils/strptime.py +54 -28
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser.egg-info/PKG-INFO +86 -10
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser.egg-info/SOURCES.txt +1 -2
- dateparser-1.2.1/dateparser.egg-info/requires.txt +15 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_cli/cli.py +10 -8
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_cli/fasttext_manager.py +19 -9
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_cli/utils.py +6 -8
- dateparser-1.2.1/dateparser_data/settings.py +33 -0
- dateparser-1.2.1/dateparser_scripts/get_cldr_data.py +567 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_scripts/order_languages.py +95 -72
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_scripts/update_supported_languages_and_locales.py +11 -11
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_scripts/utils.py +15 -13
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_scripts/write_complete_data.py +39 -20
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/conf.py +35 -34
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/custom_language_detection.rst +13 -13
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/introduction.rst +13 -3
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/settings.rst +14 -2
- dateparser-1.2.1/pyproject.toml +20 -0
- dateparser-1.2.1/setup.cfg +4 -0
- dateparser-1.2.1/setup.py +62 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/tests/__init__.py +5 -3
- dateparser-1.2.1/tests/test_clean_api.py +226 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/tests/test_data.py +275 -132
- dateparser-1.2.1/tests/test_date.py +1210 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/tests/test_date_data.py +40 -23
- dateparser-1.2.1/tests/test_date_parser.py +1377 -0
- dateparser-1.2.1/tests/test_dateparser_data_integrity.py +16 -0
- dateparser-1.2.1/tests/test_freshness_date_parser.py +2670 -0
- dateparser-1.2.1/tests/test_hijri.py +68 -0
- dateparser-1.2.1/tests/test_jalali.py +259 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/tests/test_language_detect.py +59 -29
- dateparser-1.2.1/tests/test_languages.py +3019 -0
- dateparser-1.2.1/tests/test_loading.py +406 -0
- dateparser-1.2.1/tests/test_parser.py +564 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/tests/test_pickle.py +6 -5
- dateparser-1.2.1/tests/test_search.py +1092 -0
- dateparser-1.2.1/tests/test_settings.py +313 -0
- dateparser-1.2.1/tests/test_timezone_parser.py +242 -0
- dateparser-1.2.1/tests/test_utils.py +207 -0
- dateparser-1.2.1/tests/test_utils_strptime.py +175 -0
- dateparser-1.1.8/dateparser/data/languages_info.py +0 -1351
- dateparser-1.1.8/dateparser/search/__init__.py +0 -63
- dateparser-1.1.8/dateparser/timezones.py +0 -467
- dateparser-1.1.8/dateparser.egg-info/requires.txt +0 -14
- dateparser-1.1.8/dateparser_data/settings.py +0 -37
- dateparser-1.1.8/dateparser_scripts/get_cldr_data.py +0 -339
- dateparser-1.1.8/setup.cfg +0 -21
- dateparser-1.1.8/setup.py +0 -58
- dateparser-1.1.8/tests/requirements.txt +0 -4
- dateparser-1.1.8/tests/test_clean_api.py +0 -95
- dateparser-1.1.8/tests/test_date.py +0 -844
- dateparser-1.1.8/tests/test_date_parser.py +0 -938
- dateparser-1.1.8/tests/test_dateparser_data_integrity.py +0 -12
- dateparser-1.1.8/tests/test_freshness_date_parser.py +0 -1785
- dateparser-1.1.8/tests/test_hijri.py +0 -44
- dateparser-1.1.8/tests/test_jalali.py +0 -212
- dateparser-1.1.8/tests/test_languages.py +0 -2359
- dateparser-1.1.8/tests/test_loading.py +0 -227
- dateparser-1.1.8/tests/test_parser.py +0 -501
- dateparser-1.1.8/tests/test_search.py +0 -787
- dateparser-1.1.8/tests/test_settings.py +0 -262
- dateparser-1.1.8/tests/test_timezone_parser.py +0 -197
- dateparser-1.1.8/tests/test_utils.py +0 -155
- dateparser-1.1.8/tests/test_utils_strptime.py +0 -90
- {dateparser-1.1.8 → dateparser-1.2.1}/AUTHORS.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/CONTRIBUTING.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/LICENSE +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/MANIFEST.in +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/calendars/hijri.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/custom_language_detection/__init__.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/custom_language_detection/langdetect.py +1 -1
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/custom_language_detection/language_mapping.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/__init__.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/__init__.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/af.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/agq.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ak.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/am.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ar.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/as.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/asa.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ast.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/az-Cyrl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/az-Latn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/az.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bas.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/be.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bem.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bez.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bg.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bm.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/br.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/brx.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs-Cyrl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs-Latn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ca.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ce.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/cgg.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/chr.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ckb.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/cs.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/cy.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/da.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/dav.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/de.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/dje.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/dsb.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/dua.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/dyo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/dz.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ebu.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ee.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/el.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/eo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/es.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/et.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/eu.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ewo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/fa.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ff.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/fi.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/fil.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/fo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/fr.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/fur.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/fy.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ga.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/gd.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/gl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/gsw.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/gu.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/guz.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/gv.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ha.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/haw.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/he.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/hi.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/hr.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/hsb.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/hu.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/hy.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/id.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ig.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ii.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/is.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/it.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ja.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/jgo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/jmc.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ka.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kab.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kam.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kde.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kea.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/khq.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ki.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kk.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kln.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/km.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ko.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kok.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ks.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksb.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksf.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksh.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/kw.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ky.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lag.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lb.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lg.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lkt.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ln.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lrc.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lt.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lu.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/luo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/luy.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/lv.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mas.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mer.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mfe.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mg.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mgh.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mgo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mk.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ml.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mr.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ms.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mt.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mua.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/my.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/mzn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/naq.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/nb.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/nd.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ne.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/nl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/nmg.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/nn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/nnh.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/nus.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/nyn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/om.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/or.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/os.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa-Arab.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa-Guru.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/pl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ps.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/pt.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/qu.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/rm.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/rn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ro.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/rof.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/rw.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/rwk.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sah.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/saq.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sbp.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/se.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/seh.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ses.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sg.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi-Latn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi-Tfng.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/si.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sk.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/smn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/so.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sq.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr-Cyrl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr-Latn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sv.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/sw.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ta.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/te.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/teo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/th.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ti.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/tl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/to.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/tr.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/twq.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/tzm.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ug.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/uk.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/ur.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Arab.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Cyrl.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Latn.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/vi.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/vun.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/wae.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/xog.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/yav.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/yi.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/yo.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/yue.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/zgh.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh-Hans.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh-Hant.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/data/date_translation_data/zu.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser/languages/__init__.py +1 -1
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser.egg-info/dependency_links.txt +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser.egg-info/entry_points.txt +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser.egg-info/not-zip-safe +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser.egg-info/top_level.txt +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_cli/__init__.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_cli/exceptions.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_data/__init__.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/dateparser_scripts/__init__.py +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/Makefile +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/authors.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/contributing.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/dateparser.calendars.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/dateparser.languages.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/dateparser.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/history.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/index.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/installation.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/make.bat +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/modules.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/supported_locales.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/template.rst +0 -0
- {dateparser-1.1.8 → dateparser-1.2.1}/docs/usage.rst +0 -0
|
@@ -3,10 +3,55 @@
|
|
|
3
3
|
History
|
|
4
4
|
=======
|
|
5
5
|
|
|
6
|
+
1.2.1 (2025-02-05)
|
|
7
|
+
------------------
|
|
8
|
+
|
|
9
|
+
Fixes:
|
|
10
|
+
|
|
11
|
+
- Fix PytzUsageWarning (#1109)
|
|
12
|
+
- Fix date_parser with prefer_month_of_year wrong results (#1224)
|
|
13
|
+
- Fix skipped day when UTC and tz are different days (#1183)
|
|
14
|
+
|
|
15
|
+
Improvements:
|
|
16
|
+
|
|
17
|
+
- Avoid repeated loop over timezones (#1238)
|
|
18
|
+
- Proofread README.rst (#1234)
|
|
19
|
+
- Check for derived types for configuration (#1223)
|
|
20
|
+
- Parse some abbreviated strings as relative dates (#1219)
|
|
21
|
+
- Migrate from hijri-converter to hijridate (#1211)
|
|
22
|
+
- Fixed ClusterFuzz build error by adding dateparser.data as a binary (#1208)
|
|
23
|
+
- Fix an issue detected by OSSFuzz (#1203)
|
|
24
|
+
- Support two-digit years in non-Gregorian calendars (#1187)
|
|
25
|
+
- Refactored CI to run extras separately and test minimum versions of dependencies, replaced flake8 with ruff, fixed tests (#1248)
|
|
26
|
+
- Set minimum versions for dependencies (#1248)
|
|
27
|
+
- Limited ``numpy`` to 1.x when installing ``dateparser[fasttext]`` (#1248)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
1.2.0 (2023-11-17)
|
|
31
|
+
------------------
|
|
32
|
+
|
|
33
|
+
New features:
|
|
34
|
+
|
|
35
|
+
- New ``PREFER_MONTH_OF_YEAR`` setting (#1146)
|
|
36
|
+
|
|
37
|
+
Fixes:
|
|
38
|
+
|
|
39
|
+
- Absolute years in Russian are no longer being treated as a number of years in
|
|
40
|
+
the past (#1129)
|
|
41
|
+
|
|
42
|
+
Cleanups and internal improvements:
|
|
43
|
+
|
|
44
|
+
- Removed the use of ``datetime.utcnow``, deprecated on Python 3.12 (#1179)
|
|
45
|
+
- Applied Black formatting to the code base (#1158)
|
|
46
|
+
- Initial integration with OSSFuzz (#1198)
|
|
47
|
+
- Extended test cases (#1191)
|
|
48
|
+
|
|
49
|
+
|
|
6
50
|
1.1.8 (2023-03-22)
|
|
7
51
|
------------------
|
|
8
52
|
|
|
9
53
|
Improvements:
|
|
54
|
+
|
|
10
55
|
- Improved date parsing for Chinese (#1148)
|
|
11
56
|
- Improved date parsing for Czech (#1151)
|
|
12
57
|
- Reorder language by popularity (#1152)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: dateparser
|
|
3
|
-
Version: 1.1
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: Date parsing library designed to parse dates from HTML pages
|
|
5
5
|
Home-page: https://github.com/scrapinghub/dateparser
|
|
6
6
|
Author: Scrapinghub
|
|
@@ -13,18 +13,39 @@ Classifier: Intended Audience :: Developers
|
|
|
13
13
|
Classifier: License :: OSI Approved :: BSD License
|
|
14
14
|
Classifier: Natural Language :: English
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
18
16
|
Classifier: Programming Language :: Python :: 3.9
|
|
19
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
21
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
22
|
-
Requires-Python: >=3.
|
|
22
|
+
Requires-Python: >=3.8
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
License-File: AUTHORS.rst
|
|
25
|
+
Requires-Dist: python-dateutil>=2.7.0
|
|
26
|
+
Requires-Dist: pytz>=2024.2
|
|
27
|
+
Requires-Dist: regex!=2019.02.19,!=2021.8.27,>=2015.06.24
|
|
28
|
+
Requires-Dist: tzlocal>=0.2
|
|
23
29
|
Provides-Extra: calendars
|
|
30
|
+
Requires-Dist: convertdate>=2.2.1; extra == "calendars"
|
|
31
|
+
Requires-Dist: hijridate; extra == "calendars"
|
|
24
32
|
Provides-Extra: fasttext
|
|
33
|
+
Requires-Dist: fasttext>=0.9.1; extra == "fasttext"
|
|
34
|
+
Requires-Dist: numpy<2,>=1.19.3; extra == "fasttext"
|
|
25
35
|
Provides-Extra: langdetect
|
|
26
|
-
|
|
27
|
-
|
|
36
|
+
Requires-Dist: langdetect>=1.0.0; extra == "langdetect"
|
|
37
|
+
Dynamic: author
|
|
38
|
+
Dynamic: author-email
|
|
39
|
+
Dynamic: classifier
|
|
40
|
+
Dynamic: description
|
|
41
|
+
Dynamic: home-page
|
|
42
|
+
Dynamic: keywords
|
|
43
|
+
Dynamic: license
|
|
44
|
+
Dynamic: project-url
|
|
45
|
+
Dynamic: provides-extra
|
|
46
|
+
Dynamic: requires-dist
|
|
47
|
+
Dynamic: requires-python
|
|
48
|
+
Dynamic: summary
|
|
28
49
|
|
|
29
50
|
==========================
|
|
30
51
|
Introduction to dateparser
|
|
@@ -208,6 +229,16 @@ Incomplete Dates
|
|
|
208
229
|
>>> parse('August', settings={'PREFER_DATES_FROM': 'past'})
|
|
209
230
|
datetime.datetime(2015, 8, 15, 0, 0)
|
|
210
231
|
|
|
232
|
+
>>> import dateparser
|
|
233
|
+
>>> dateparser.parse("2015") # default behavior
|
|
234
|
+
datetime.datetime(2015, 3, 27, 0, 0)
|
|
235
|
+
>>> dateparser.parse("2015", settings={"PREFER_MONTH_OF_YEAR": "last"})
|
|
236
|
+
datetime.datetime(2015, 12, 27, 0, 0)
|
|
237
|
+
>>> dateparser.parse("2015", settings={"PREFER_MONTH_OF_YEAR": "first"})
|
|
238
|
+
datetime.datetime(2015, 1, 27, 0, 0)
|
|
239
|
+
>>> dateparser.parse("2015", settings={"PREFER_MONTH_OF_YEAR": "current"})
|
|
240
|
+
datetime.datetime(2015, 3, 27, 0, 0)
|
|
241
|
+
|
|
211
242
|
You can also ignore parsing incomplete dates altogether by setting `STRICT_PARSING` flag as follows:
|
|
212
243
|
|
|
213
244
|
>>> parse('December 2015', settings={'STRICT_PARSING': True})
|
|
@@ -241,13 +272,13 @@ Dependencies
|
|
|
241
272
|
|
|
242
273
|
* dateutil_'s module ``relativedelta`` for its freshness parser.
|
|
243
274
|
* convertdate_ to convert *Jalali* dates to *Gregorian*.
|
|
244
|
-
*
|
|
275
|
+
* hijridate_ to convert *Hijri* dates to *Gregorian*.
|
|
245
276
|
* tzlocal_ to reliably get local timezone.
|
|
246
277
|
* ruamel.yaml_ (optional) for operations on language files.
|
|
247
278
|
|
|
248
279
|
.. _dateutil: https://pypi.python.org/pypi/python-dateutil
|
|
249
280
|
.. _convertdate: https://pypi.python.org/pypi/convertdate
|
|
250
|
-
..
|
|
281
|
+
.. _hijridate: https://pypi.python.org/pypi/hijridate
|
|
251
282
|
.. _tzlocal: https://pypi.python.org/pypi/tzlocal
|
|
252
283
|
.. _ruamel.yaml: https://pypi.python.org/pypi/ruamel.yaml
|
|
253
284
|
|
|
@@ -279,7 +310,7 @@ To be able to use them you need to install the `calendar` extra by typing:
|
|
|
279
310
|
>>> HijriCalendar('17-01-1437 هـ 08:30 مساءً').get_date()
|
|
280
311
|
DateData(date_obj=datetime.datetime(2015, 10, 30, 20, 30), period='day', locale=None)
|
|
281
312
|
|
|
282
|
-
.. note:: `HijriCalendar` only works with Python ≥ 3.
|
|
313
|
+
.. note:: `HijriCalendar` only works with Python ≥ 3.7.
|
|
283
314
|
|
|
284
315
|
|
|
285
316
|
.. :changelog:
|
|
@@ -287,10 +318,55 @@ To be able to use them you need to install the `calendar` extra by typing:
|
|
|
287
318
|
History
|
|
288
319
|
=======
|
|
289
320
|
|
|
321
|
+
1.2.1 (2025-02-05)
|
|
322
|
+
------------------
|
|
323
|
+
|
|
324
|
+
Fixes:
|
|
325
|
+
|
|
326
|
+
- Fix PytzUsageWarning (#1109)
|
|
327
|
+
- Fix date_parser with prefer_month_of_year wrong results (#1224)
|
|
328
|
+
- Fix skipped day when UTC and tz are different days (#1183)
|
|
329
|
+
|
|
330
|
+
Improvements:
|
|
331
|
+
|
|
332
|
+
- Avoid repeated loop over timezones (#1238)
|
|
333
|
+
- Proofread README.rst (#1234)
|
|
334
|
+
- Check for derived types for configuration (#1223)
|
|
335
|
+
- Parse some abbreviated strings as relative dates (#1219)
|
|
336
|
+
- Migrate from hijri-converter to hijridate (#1211)
|
|
337
|
+
- Fixed ClusterFuzz build error by adding dateparser.data as a binary (#1208)
|
|
338
|
+
- Fix an issue detected by OSSFuzz (#1203)
|
|
339
|
+
- Support two-digit years in non-Gregorian calendars (#1187)
|
|
340
|
+
- Refactored CI to run extras separately and test minimum versions of dependencies, replaced flake8 with ruff, fixed tests (#1248)
|
|
341
|
+
- Set minimum versions for dependencies (#1248)
|
|
342
|
+
- Limited ``numpy`` to 1.x when installing ``dateparser[fasttext]`` (#1248)
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
1.2.0 (2023-11-17)
|
|
346
|
+
------------------
|
|
347
|
+
|
|
348
|
+
New features:
|
|
349
|
+
|
|
350
|
+
- New ``PREFER_MONTH_OF_YEAR`` setting (#1146)
|
|
351
|
+
|
|
352
|
+
Fixes:
|
|
353
|
+
|
|
354
|
+
- Absolute years in Russian are no longer being treated as a number of years in
|
|
355
|
+
the past (#1129)
|
|
356
|
+
|
|
357
|
+
Cleanups and internal improvements:
|
|
358
|
+
|
|
359
|
+
- Removed the use of ``datetime.utcnow``, deprecated on Python 3.12 (#1179)
|
|
360
|
+
- Applied Black formatting to the code base (#1158)
|
|
361
|
+
- Initial integration with OSSFuzz (#1198)
|
|
362
|
+
- Extended test cases (#1191)
|
|
363
|
+
|
|
364
|
+
|
|
290
365
|
1.1.8 (2023-03-22)
|
|
291
366
|
------------------
|
|
292
367
|
|
|
293
368
|
Improvements:
|
|
369
|
+
|
|
294
370
|
- Improved date parsing for Chinese (#1148)
|
|
295
371
|
- Improved date parsing for Czech (#1151)
|
|
296
372
|
- Reorder language by popularity (#1152)
|
|
@@ -50,7 +50,7 @@ Key Features
|
|
|
50
50
|
locales <https://dateparser.readthedocs.io/en/latest/supported_locales.html>`__.
|
|
51
51
|
- Language autodetection
|
|
52
52
|
- Customizable behavior through
|
|
53
|
-
`settings <https://dateparser.readthedocs.io/en/latest/
|
|
53
|
+
`settings <https://dateparser.readthedocs.io/en/latest/settings.html>`__.
|
|
54
54
|
- Support for `non-Gregorian calendar
|
|
55
55
|
systems <https://dateparser.readthedocs.io/en/latest/introduction.html#supported-calendars>`__.
|
|
56
56
|
- Support for dates with timezones abbreviations or UTC offsets
|
|
@@ -144,8 +144,8 @@ For that reason it is important that the input is a valid date, otherwise it cou
|
|
|
144
144
|
|
|
145
145
|
To reduce the possibility of receiving false positives, make sure that:
|
|
146
146
|
|
|
147
|
-
- The input string
|
|
148
|
-
- If you know the language or languages beforehand you add them through the ``languages`` or ``locales`` properties.
|
|
147
|
+
- The input string is a valid date and doesn't contain any other words or numbers.
|
|
148
|
+
- If you know the language or languages beforehand, you add them through the ``languages`` or ``locales`` properties.
|
|
149
149
|
|
|
150
150
|
|
|
151
151
|
On the other hand, if you want to exclude any of the default parsers
|
|
@@ -156,7 +156,7 @@ are executed, you can do so through the
|
|
|
156
156
|
Installation
|
|
157
157
|
------------
|
|
158
158
|
|
|
159
|
-
Dateparser supports Python >= 3.
|
|
159
|
+
Dateparser supports Python >= 3.9. You can install it by doing:
|
|
160
160
|
|
|
161
161
|
::
|
|
162
162
|
|
|
@@ -172,7 +172,7 @@ If you want to use the jalali or hijri calendar, you need to install the
|
|
|
172
172
|
Common use cases
|
|
173
173
|
----------------
|
|
174
174
|
|
|
175
|
-
**dateparser** can be used
|
|
175
|
+
**dateparser** can be used for a wide variety of purposes,
|
|
176
176
|
but it stands out when it comes to:
|
|
177
177
|
|
|
178
178
|
Consuming data from different sources:
|
|
@@ -191,7 +191,7 @@ Offering natural interaction with users:
|
|
|
191
191
|
|
|
192
192
|
- **Tooling and CLI**: allow users to write “3 days ago” to retrieve
|
|
193
193
|
information.
|
|
194
|
-
- **Search engine**: allow people to search by date in an
|
|
194
|
+
- **Search engine**: allow people to search by date in an easy /
|
|
195
195
|
natural format.
|
|
196
196
|
- **Bots**: allow users to interact with a bot easily
|
|
197
197
|
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
__version__ =
|
|
1
|
+
__version__ = "1.2.1"
|
|
2
2
|
|
|
3
|
-
from .date import DateDataParser
|
|
4
3
|
from .conf import apply_settings
|
|
4
|
+
from .date import DateDataParser
|
|
5
5
|
|
|
6
6
|
_default_parser = DateDataParser()
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
@apply_settings
|
|
10
|
-
def parse(
|
|
11
|
-
|
|
10
|
+
def parse(
|
|
11
|
+
date_string,
|
|
12
|
+
date_formats=None,
|
|
13
|
+
languages=None,
|
|
14
|
+
locales=None,
|
|
15
|
+
region=None,
|
|
16
|
+
settings=None,
|
|
17
|
+
detect_languages_function=None,
|
|
18
|
+
):
|
|
12
19
|
"""Parse date and time from given date string.
|
|
13
20
|
|
|
14
21
|
:param date_string:
|
|
@@ -54,11 +61,22 @@ def parse(date_string, date_formats=None, languages=None, locales=None,
|
|
|
54
61
|
"""
|
|
55
62
|
parser = _default_parser
|
|
56
63
|
|
|
57
|
-
if
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
if (
|
|
65
|
+
languages
|
|
66
|
+
or locales
|
|
67
|
+
or region
|
|
68
|
+
or detect_languages_function
|
|
69
|
+
or not settings._default
|
|
70
|
+
):
|
|
71
|
+
parser = DateDataParser(
|
|
72
|
+
languages=languages,
|
|
73
|
+
locales=locales,
|
|
74
|
+
region=region,
|
|
75
|
+
settings=settings,
|
|
76
|
+
detect_languages_function=detect_languages_function,
|
|
77
|
+
)
|
|
60
78
|
|
|
61
79
|
data = parser.get_date_data(date_string, date_formats)
|
|
62
80
|
|
|
63
81
|
if data:
|
|
64
|
-
return data[
|
|
82
|
+
return data["date_obj"]
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
|
|
3
|
+
from dateparser.conf import settings
|
|
1
4
|
from dateparser.date import DateData
|
|
2
5
|
from dateparser.parser import _parser
|
|
3
|
-
from dateparser.conf import settings
|
|
4
|
-
from datetime import datetime
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class CalendarBase:
|
|
@@ -26,7 +27,6 @@ class CalendarBase:
|
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class non_gregorian_parser(_parser):
|
|
29
|
-
|
|
30
30
|
calendar_converter = NotImplemented
|
|
31
31
|
default_year = NotImplemented
|
|
32
32
|
default_month = NotImplemented
|
|
@@ -76,16 +76,20 @@ class non_gregorian_parser(_parser):
|
|
|
76
76
|
|
|
77
77
|
return result
|
|
78
78
|
|
|
79
|
+
def handle_two_digit_year(self, year):
|
|
80
|
+
raise ValueError
|
|
81
|
+
|
|
79
82
|
def _get_datetime_obj(self, **params):
|
|
80
|
-
day = params[
|
|
81
|
-
year = params[
|
|
82
|
-
month = params[
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
and not(self._token_day or hasattr(self, '_token_weekday'))
|
|
83
|
+
day = params["day"]
|
|
84
|
+
year = params["year"]
|
|
85
|
+
month = params["month"]
|
|
86
|
+
if not (0 < day <= self.calendar_converter.month_length(year, month)) and not (
|
|
87
|
+
self._token_day or hasattr(self, "_token_weekday")
|
|
86
88
|
):
|
|
87
89
|
day = self.calendar_converter.month_length(year, month)
|
|
88
|
-
year, month, day = self.calendar_converter.to_gregorian(
|
|
90
|
+
year, month, day = self.calendar_converter.to_gregorian(
|
|
91
|
+
year=year, month=month, day=day
|
|
92
|
+
)
|
|
89
93
|
c_params = params.copy()
|
|
90
94
|
c_params.update(dict(year=year, month=month, day=day))
|
|
91
95
|
return datetime(**c_params)
|
|
@@ -94,12 +98,16 @@ class non_gregorian_parser(_parser):
|
|
|
94
98
|
if not self.now:
|
|
95
99
|
self._set_relative_base()
|
|
96
100
|
now_year, now_month, now_day = self.calendar_converter.from_gregorian(
|
|
97
|
-
self.now.year, self.now.month, self.now.day
|
|
101
|
+
self.now.year, self.now.month, self.now.day
|
|
102
|
+
)
|
|
98
103
|
params = {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
104
|
+
"day": self.day or now_day,
|
|
105
|
+
"month": self.month or now_month,
|
|
106
|
+
"year": self.year or now_year,
|
|
107
|
+
"hour": 0,
|
|
108
|
+
"minute": 0,
|
|
109
|
+
"second": 0,
|
|
110
|
+
"microsecond": 0,
|
|
103
111
|
}
|
|
104
112
|
return params
|
|
105
113
|
|
|
@@ -107,26 +115,25 @@ class non_gregorian_parser(_parser):
|
|
|
107
115
|
year, month, day = self.default_year, self.default_month, self.default_day
|
|
108
116
|
token_len = len(token)
|
|
109
117
|
is_digit = token.isdigit()
|
|
110
|
-
if directive ==
|
|
118
|
+
if directive == "%A" and self._weekdays and token.title() in self._weekdays:
|
|
111
119
|
pass
|
|
112
120
|
elif (
|
|
113
|
-
directive ==
|
|
114
|
-
and token_len <= 2
|
|
115
|
-
and is_digit
|
|
116
|
-
and 1 <= int(token) <= 12
|
|
121
|
+
directive == "%m" and token_len <= 2 and is_digit and 1 <= int(token) <= 12
|
|
117
122
|
):
|
|
118
123
|
month = int(token)
|
|
119
|
-
elif directive ==
|
|
124
|
+
elif directive == "%B" and self._months and token in self._months:
|
|
120
125
|
month = list(self._months.keys()).index(token) + 1
|
|
121
126
|
elif (
|
|
122
|
-
directive ==
|
|
127
|
+
directive == "%d"
|
|
123
128
|
and token_len <= 2
|
|
124
129
|
and is_digit
|
|
125
130
|
and 0 < int(token) <= self.calendar_converter.month_length(year, month)
|
|
126
131
|
):
|
|
127
132
|
day = int(token)
|
|
128
|
-
elif directive ==
|
|
133
|
+
elif directive == "%Y" and token_len == 4 and is_digit:
|
|
129
134
|
year = int(token)
|
|
135
|
+
elif directive == "%Y" and token_len == 2 and is_digit:
|
|
136
|
+
year = self.handle_two_digit_year(int(token))
|
|
130
137
|
else:
|
|
131
138
|
raise ValueError
|
|
132
139
|
return self.non_gregorian_date_cls(year, month, day)
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
from
|
|
1
|
+
from hijridate import Gregorian, Hijri
|
|
2
2
|
|
|
3
3
|
from dateparser.calendars import non_gregorian_parser
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class hijri:
|
|
7
|
-
|
|
8
7
|
@classmethod
|
|
9
8
|
def to_gregorian(cls, year=None, month=None, day=None):
|
|
10
|
-
g =
|
|
9
|
+
g = Hijri(year=year, month=month, day=day, validate=False).to_gregorian()
|
|
11
10
|
return g.datetuple()
|
|
12
11
|
|
|
13
12
|
@classmethod
|
|
14
13
|
def from_gregorian(cls, year=None, month=None, day=None):
|
|
15
|
-
h =
|
|
14
|
+
h = Gregorian(year, month, day).to_hijri()
|
|
16
15
|
return h.datetuple()
|
|
17
16
|
|
|
18
17
|
@classmethod
|
|
19
18
|
def month_length(cls, year, month):
|
|
20
|
-
h =
|
|
19
|
+
h = Hijri(year=year, month=month, day=1)
|
|
21
20
|
return h.month_length()
|
|
22
21
|
|
|
23
22
|
|
|
@@ -35,7 +34,6 @@ class HijriDate:
|
|
|
35
34
|
|
|
36
35
|
|
|
37
36
|
class hijri_parser(non_gregorian_parser):
|
|
38
|
-
|
|
39
37
|
calendar_converter = hijri
|
|
40
38
|
default_year = 1389
|
|
41
39
|
default_month = 1
|
|
@@ -43,8 +41,8 @@ class hijri_parser(non_gregorian_parser):
|
|
|
43
41
|
non_gregorian_date_cls = HijriDate
|
|
44
42
|
|
|
45
43
|
_time_conventions = {
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
"am": ["صباحاً"],
|
|
45
|
+
"pm": ["مساءً"],
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
@classmethod
|
|
@@ -54,3 +52,9 @@ class hijri_parser(non_gregorian_parser):
|
|
|
54
52
|
for arabic in arabics:
|
|
55
53
|
result = result.replace(arabic, latin)
|
|
56
54
|
return result
|
|
55
|
+
|
|
56
|
+
def handle_two_digit_year(self, year):
|
|
57
|
+
if year >= 90:
|
|
58
|
+
return year + 1300
|
|
59
|
+
else:
|
|
60
|
+
return year + 1400
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import re
|
|
2
|
-
|
|
3
|
-
from dateparser.calendars import non_gregorian_parser
|
|
4
|
-
from convertdate import persian
|
|
5
2
|
from collections import OrderedDict
|
|
6
3
|
from functools import reduce
|
|
7
4
|
|
|
5
|
+
from convertdate import persian
|
|
6
|
+
|
|
7
|
+
from dateparser.calendars import non_gregorian_parser
|
|
8
|
+
|
|
8
9
|
|
|
9
10
|
class PersianDate:
|
|
10
11
|
def __init__(self, year, month, day):
|
|
@@ -20,41 +21,54 @@ class PersianDate:
|
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class jalali_parser(non_gregorian_parser):
|
|
23
|
-
|
|
24
24
|
calendar_converter = persian
|
|
25
25
|
default_year = 1348
|
|
26
26
|
default_month = 1
|
|
27
27
|
default_day = 1
|
|
28
28
|
non_gregorian_date_cls = PersianDate
|
|
29
29
|
|
|
30
|
-
_digits = {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
30
|
+
_digits = {
|
|
31
|
+
"۰": 0,
|
|
32
|
+
"۱": 1,
|
|
33
|
+
"۲": 2,
|
|
34
|
+
"۳": 3,
|
|
35
|
+
"۴": 4,
|
|
36
|
+
"۵": 5,
|
|
37
|
+
"۶": 6,
|
|
38
|
+
"۷": 7,
|
|
39
|
+
"۸": 8,
|
|
40
|
+
"۹": 9,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
_months = OrderedDict(
|
|
44
|
+
[
|
|
45
|
+
# pinglish : (persian literals, month index, number of days)
|
|
46
|
+
("Farvardin", (1, 31, ["فروردین"])),
|
|
47
|
+
("Ordibehesht", (2, 31, ["اردیبهشت"])),
|
|
48
|
+
("Khordad", (3, 31, ["خرداد"])),
|
|
49
|
+
("Tir", (4, 31, ["تیر"])),
|
|
50
|
+
("Mordad", (5, 31, ["امرداد", "مرداد"])),
|
|
51
|
+
("Shahrivar", (6, 31, ["شهریور", "شهريور"])),
|
|
52
|
+
("Mehr", (7, 30, ["مهر"])),
|
|
53
|
+
("Aban", (8, 30, ["آبان"])),
|
|
54
|
+
("Azar", (9, 30, ["آذر"])),
|
|
55
|
+
("Dey", (10, 30, ["دی"])),
|
|
56
|
+
("Bahman", (11, 30, ["بهمن", "بهن"])),
|
|
57
|
+
("Esfand", (12, 29, ["اسفند"])),
|
|
58
|
+
]
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
_weekdays = OrderedDict(
|
|
62
|
+
[
|
|
63
|
+
("Sunday", ["یکشنبه"]),
|
|
64
|
+
("Monday", ["دوشنبه"]),
|
|
65
|
+
("Tuesday", ["سهشنبه", "سه شنبه"]),
|
|
66
|
+
("Wednesday", ["چهارشنبه", "چهار شنبه"]),
|
|
67
|
+
("Thursday", ["پنجشنبه", "پنج شنبه"]),
|
|
68
|
+
("Friday", ["جمعه"]),
|
|
69
|
+
("Saturday", ["روز شنبه", "شنبه"]),
|
|
70
|
+
]
|
|
71
|
+
)
|
|
58
72
|
|
|
59
73
|
_number_letters = {
|
|
60
74
|
0: ["صفر"],
|
|
@@ -103,7 +117,10 @@ class jalali_parser(non_gregorian_parser):
|
|
|
103
117
|
result = source
|
|
104
118
|
for pers, latin in reduce(
|
|
105
119
|
lambda a, b: a + b,
|
|
106
|
-
[
|
|
120
|
+
[
|
|
121
|
+
[(value, month) for value in repl[-1]]
|
|
122
|
+
for month, repl in cls._months.items()
|
|
123
|
+
],
|
|
107
124
|
):
|
|
108
125
|
result = result.replace(pers, latin)
|
|
109
126
|
return result
|
|
@@ -113,7 +130,10 @@ class jalali_parser(non_gregorian_parser):
|
|
|
113
130
|
result = source
|
|
114
131
|
for pers, latin in reduce(
|
|
115
132
|
lambda a, b: a + b,
|
|
116
|
-
[
|
|
133
|
+
[
|
|
134
|
+
[(value, weekday) for value in repl]
|
|
135
|
+
for weekday, repl in cls._weekdays.items()
|
|
136
|
+
],
|
|
117
137
|
):
|
|
118
138
|
result = result.replace(pers, latin)
|
|
119
139
|
return result
|
|
@@ -122,20 +142,23 @@ class jalali_parser(non_gregorian_parser):
|
|
|
122
142
|
def _replace_time(cls, source):
|
|
123
143
|
def only_numbers(match_obj):
|
|
124
144
|
matched_string = match_obj.group()
|
|
125
|
-
return re.sub(r
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
145
|
+
return re.sub(r"\D", " ", matched_string)
|
|
146
|
+
|
|
147
|
+
hour_pattern = r"ساعت\s+\d{2}"
|
|
148
|
+
minute_pattern = r"\d{2}\s+دقیقه"
|
|
149
|
+
second_pattern = r"\d{2}\s+ثانیه"
|
|
129
150
|
result = re.sub(hour_pattern, only_numbers, source)
|
|
130
151
|
result = re.sub(minute_pattern, only_numbers, result)
|
|
131
152
|
result = re.sub(second_pattern, only_numbers, result)
|
|
132
|
-
result = re.sub(r
|
|
133
|
-
result = result.replace(
|
|
153
|
+
result = re.sub(r"\s+و\s+", ":", result)
|
|
154
|
+
result = result.replace("ساعت", "")
|
|
134
155
|
return result
|
|
135
156
|
|
|
136
157
|
@classmethod
|
|
137
158
|
def _replace_days(cls, source):
|
|
138
|
-
result = re.sub(
|
|
159
|
+
result = re.sub(
|
|
160
|
+
r"ام|م|ین", "", source
|
|
161
|
+
) # removes persian variant of th/first/second/third
|
|
139
162
|
day_pairs = list(cls._number_letters.items())
|
|
140
163
|
|
|
141
164
|
def comp_key(tup):
|
|
@@ -148,7 +171,14 @@ class jalali_parser(non_gregorian_parser):
|
|
|
148
171
|
day_pairs[1] = thirteen
|
|
149
172
|
|
|
150
173
|
for persian_number, number in reduce(
|
|
151
|
-
|
|
152
|
-
|
|
174
|
+
lambda a, b: a + b,
|
|
175
|
+
[[(val, repl) for val in persian_word] for repl, persian_word in day_pairs],
|
|
176
|
+
):
|
|
153
177
|
result = result.replace(persian_number, str(number))
|
|
154
178
|
return result
|
|
179
|
+
|
|
180
|
+
def handle_two_digit_year(self, year):
|
|
181
|
+
if year > 60:
|
|
182
|
+
return year + 1300
|
|
183
|
+
else:
|
|
184
|
+
return year + 1400
|