dateparser 1.3.0__tar.gz → 1.4.0__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.3.0 → dateparser-1.4.0}/CONTRIBUTING.rst +1 -14
- {dateparser-1.3.0 → dateparser-1.4.0}/HISTORY.rst +30 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/MANIFEST.in +0 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/PKG-INFO +31 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/README.rst +2 -2
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/__init__.py +1 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/conf.py +3 -1
- dateparser-1.4.0/dateparser/data/date_translation_data/bs-Cyrl.py +294 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/en.py +6 -2
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/languages_info.py +1 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/date.py +39 -17
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/dictionary.py +10 -2
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/locale.py +9 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/timezone_parser.py +4 -47
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/PKG-INFO +31 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/SOURCES.txt +0 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/installation.rst +1 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/supported_locales.rst +1 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/pyproject.toml +6 -1
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_clean_api.py +47 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_date_parser.py +86 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_freshness_date_parser.py +16 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_languages.py +55 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_loading.py +50 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_search.py +1 -1
- dateparser-1.3.0/dateparser/data/date_translation_data/bs-Cyrl.py +0 -226
- dateparser-1.3.0/dateparser/data/dateparser_tz_cache.pkl +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/AUTHORS.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/LICENSE +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/hijri.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/hijri_parser.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/jalali.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/jalali_parser.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/custom_language_detection/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/custom_language_detection/fasttext.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/custom_language_detection/langdetect.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/custom_language_detection/language_mapping.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/af.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/agq.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ak.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/am.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ar.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/as.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/asa.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ast.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/az-Cyrl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/az-Latn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/az.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bas.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/be.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bem.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bez.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bg.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bm.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/br.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/brx.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bs-Latn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bs.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ca.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ce.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/cgg.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/chr.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ckb.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/cs.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/cy.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/da.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dav.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/de.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dje.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dsb.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dua.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dyo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dz.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ebu.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ee.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/el.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/eo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/es.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/et.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/eu.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ewo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fa.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ff.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fi.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fil.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fr.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fur.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fy.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ga.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gd.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gsw.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gu.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/guz.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gv.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ha.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/haw.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/he.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hi.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hr.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hsb.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hu.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hy.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/id.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ig.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ii.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/is.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/it.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ja.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/jgo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/jmc.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ka.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kab.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kam.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kde.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kea.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/khq.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ki.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kk.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kln.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/km.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ko.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kok.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ks.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ksb.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ksf.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ksh.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kw.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ky.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lag.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lb.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lg.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lkt.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ln.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lrc.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lt.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lu.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/luo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/luy.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lv.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mas.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mer.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mfe.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mg.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mgh.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mgo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mk.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ml.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mr.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ms.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mt.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mua.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/my.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mzn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/naq.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nb.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nd.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ne.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nmg.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nnh.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nus.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nyn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/om.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/or.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/os.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pa-Arab.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pa-Guru.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pa.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ps.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pt.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/qu.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rm.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ro.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rof.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ru.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rw.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rwk.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sah.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/saq.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sbp.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/se.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/seh.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ses.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sg.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/shi-Latn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/shi-Tfng.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/shi.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/si.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sk.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/smn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/so.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sq.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sr-Cyrl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sr-Latn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sr.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sv.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sw.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ta.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/te.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/teo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/th.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ti.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/tl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/to.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/tr.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/twq.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/tzm.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ug.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uk.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ur.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uz-Arab.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uz-Cyrl.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uz-Latn.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uz.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/vi.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/vun.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/wae.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/xog.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/yav.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/yi.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/yo.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/yue.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zgh.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zh-Hans.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zh-Hant.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zh.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zu.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/date_parser.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/freshness_date_parser.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/loader.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/validation.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/parser.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/search/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/search/detection.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/search/search.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/search/text_detection.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/timezones.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/utils/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/utils/strptime.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/utils/time_spans.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/dependency_links.txt +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/entry_points.txt +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/not-zip-safe +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/requires.txt +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/top_level.txt +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/cli.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/exceptions.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/fasttext_manager.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/utils.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_data/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_data/settings.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/get_cldr_data.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/order_languages.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/update_supported_languages_and_locales.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/utils.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/write_complete_data.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/Makefile +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/authors.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/conf.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/contributing.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/custom_language_detection.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/dateparser.calendars.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/dateparser.languages.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/dateparser.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/history.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/index.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/introduction.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/make.bat +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/modules.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/settings.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/template.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/docs/usage.rst +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/setup.cfg +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/setup.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/__init__.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_data.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_date.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_date_data.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_dateparser_data_integrity.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_hijri.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_jalali.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_language_detect.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_parser.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_pickle.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_settings.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_timezone_parser.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_utils.py +0 -0
- {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_utils_strptime.py +0 -0
|
@@ -76,7 +76,7 @@ installed, this is how you set up your fork for local development::
|
|
|
76
76
|
|
|
77
77
|
$ mkvirtualenv dateparser
|
|
78
78
|
$ cd dateparser/
|
|
79
|
-
$
|
|
79
|
+
$ pip install -e .
|
|
80
80
|
|
|
81
81
|
4. Create a branch for local development::
|
|
82
82
|
|
|
@@ -179,16 +179,3 @@ Whenever the content of
|
|
|
179
179
|
the corresponding documentation table::
|
|
180
180
|
|
|
181
181
|
dateparser_scripts/update_supported_languages_and_locales.py
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
Updating the Timezone Cache
|
|
185
|
-
----------------------------------------------------
|
|
186
|
-
|
|
187
|
-
Whenever the content of
|
|
188
|
-
``dateparser/timezones.py`` is modified you need to rebuild the timezone cache.
|
|
189
|
-
|
|
190
|
-
Run this command:
|
|
191
|
-
``BUILD_TZ_CACHE=1 python -c "import dateparser"``
|
|
192
|
-
|
|
193
|
-
which should update
|
|
194
|
-
``dateparser/data/dateparser_tz_cache.pkl``
|
|
@@ -3,6 +3,36 @@
|
|
|
3
3
|
History
|
|
4
4
|
=======
|
|
5
5
|
|
|
6
|
+
1.4.0 (2026-03-26)
|
|
7
|
+
------------------
|
|
8
|
+
|
|
9
|
+
Security fixes:
|
|
10
|
+
|
|
11
|
+
- Remove import-time loading of timezone offset data from pickle to prevent
|
|
12
|
+
unsafe deserialization from packaged data
|
|
13
|
+
- Replace ``eval()`` use when parsing ``no_word_spacing`` with strict boolean
|
|
14
|
+
parsing to prevent code execution from locale metadata (#1056)
|
|
15
|
+
|
|
16
|
+
New features:
|
|
17
|
+
|
|
18
|
+
- Add support for expressions like "N {interval} from now" in English (#1271)
|
|
19
|
+
- Add support for the ``en-US`` locale (#1222)
|
|
20
|
+
|
|
21
|
+
Fixes:
|
|
22
|
+
|
|
23
|
+
- Honor ``REQUIRE_PARTS`` for ambiguous month-number inputs by retrying with a
|
|
24
|
+
year-biased ``DATE_ORDER`` (#1298)
|
|
25
|
+
- Fix parsing word-number relative phrases such as "two days later" (#1316)
|
|
26
|
+
- Allow md5hash to work in FIPS environments (#1267)
|
|
27
|
+
|
|
28
|
+
Improvements:
|
|
29
|
+
|
|
30
|
+
- Add Bosnian Cyrillic (ijekavica) date translations (#1293)
|
|
31
|
+
- Add a new browser-based demo to the project documentation (#1306)
|
|
32
|
+
- Update installation documentation to replace ``setup.py install`` guidance
|
|
33
|
+
(#1310)
|
|
34
|
+
- Add a project security policy (#1318)
|
|
35
|
+
|
|
6
36
|
1.3.0 (2026-02-04)
|
|
7
37
|
------------------
|
|
8
38
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dateparser
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
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
|
|
@@ -330,6 +330,36 @@ To be able to use them you need to install the `calendar` extra by typing:
|
|
|
330
330
|
History
|
|
331
331
|
=======
|
|
332
332
|
|
|
333
|
+
1.4.0 (2026-03-26)
|
|
334
|
+
------------------
|
|
335
|
+
|
|
336
|
+
Security fixes:
|
|
337
|
+
|
|
338
|
+
- Remove import-time loading of timezone offset data from pickle to prevent
|
|
339
|
+
unsafe deserialization from packaged data
|
|
340
|
+
- Replace ``eval()`` use when parsing ``no_word_spacing`` with strict boolean
|
|
341
|
+
parsing to prevent code execution from locale metadata (#1056)
|
|
342
|
+
|
|
343
|
+
New features:
|
|
344
|
+
|
|
345
|
+
- Add support for expressions like "N {interval} from now" in English (#1271)
|
|
346
|
+
- Add support for the ``en-US`` locale (#1222)
|
|
347
|
+
|
|
348
|
+
Fixes:
|
|
349
|
+
|
|
350
|
+
- Honor ``REQUIRE_PARTS`` for ambiguous month-number inputs by retrying with a
|
|
351
|
+
year-biased ``DATE_ORDER`` (#1298)
|
|
352
|
+
- Fix parsing word-number relative phrases such as "two days later" (#1316)
|
|
353
|
+
- Allow md5hash to work in FIPS environments (#1267)
|
|
354
|
+
|
|
355
|
+
Improvements:
|
|
356
|
+
|
|
357
|
+
- Add Bosnian Cyrillic (ijekavica) date translations (#1293)
|
|
358
|
+
- Add a new browser-based demo to the project documentation (#1306)
|
|
359
|
+
- Update installation documentation to replace ``setup.py install`` guidance
|
|
360
|
+
(#1310)
|
|
361
|
+
- Add a project security policy (#1318)
|
|
362
|
+
|
|
333
363
|
1.3.0 (2026-02-04)
|
|
334
364
|
------------------
|
|
335
365
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<h1 align="center">
|
|
6
6
|
<br/>
|
|
7
7
|
<a href="https://github.com/scrapinghub/dateparser">
|
|
8
|
-
<img src="
|
|
8
|
+
<img src="artwork/dateparser-logo.png" alt="Dateparser" width="500">
|
|
9
9
|
</a>
|
|
10
10
|
<br/>
|
|
11
11
|
</h1>
|
|
@@ -64,7 +64,7 @@ Online demo
|
|
|
64
64
|
-----------
|
|
65
65
|
|
|
66
66
|
Do you want to try it out without installing any dependency? Now you can test
|
|
67
|
-
it quickly by visiting `this online demo <https://dateparser-demo
|
|
67
|
+
it quickly by visiting `this online demo <https://gnyman.github.io/dateparser-demo-app/>`__!
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
|
|
@@ -52,7 +52,9 @@ class Settings:
|
|
|
52
52
|
return "default"
|
|
53
53
|
|
|
54
54
|
keys = sorted(["%s-%s" % (key, str(settings[key])) for key in settings])
|
|
55
|
-
return hashlib.md5(
|
|
55
|
+
return hashlib.md5(
|
|
56
|
+
"".join(keys).encode("utf-8"), usedforsecurity=False
|
|
57
|
+
).hexdigest()
|
|
56
58
|
|
|
57
59
|
@classmethod
|
|
58
60
|
def _get_settings_from_pyfile(cls):
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
info = {
|
|
2
|
+
"name": "bs-Cyrl",
|
|
3
|
+
"date_order": "DMY",
|
|
4
|
+
"january": [
|
|
5
|
+
"јан",
|
|
6
|
+
"јануар"
|
|
7
|
+
],
|
|
8
|
+
"february": [
|
|
9
|
+
"феб",
|
|
10
|
+
"фебруар"
|
|
11
|
+
],
|
|
12
|
+
"march": [
|
|
13
|
+
"мар",
|
|
14
|
+
"март"
|
|
15
|
+
],
|
|
16
|
+
"april": [
|
|
17
|
+
"апр",
|
|
18
|
+
"април"
|
|
19
|
+
],
|
|
20
|
+
"may": [
|
|
21
|
+
"мај"
|
|
22
|
+
],
|
|
23
|
+
"june": [
|
|
24
|
+
"јун",
|
|
25
|
+
"јуни"
|
|
26
|
+
],
|
|
27
|
+
"july": [
|
|
28
|
+
"јул",
|
|
29
|
+
"јули"
|
|
30
|
+
],
|
|
31
|
+
"august": [
|
|
32
|
+
"авг",
|
|
33
|
+
"август"
|
|
34
|
+
],
|
|
35
|
+
"september": [
|
|
36
|
+
"сеп",
|
|
37
|
+
"септембар"
|
|
38
|
+
],
|
|
39
|
+
"october": [
|
|
40
|
+
"окт",
|
|
41
|
+
"октобар"
|
|
42
|
+
],
|
|
43
|
+
"november": [
|
|
44
|
+
"нов",
|
|
45
|
+
"новембар"
|
|
46
|
+
],
|
|
47
|
+
"december": [
|
|
48
|
+
"дец",
|
|
49
|
+
"децембар"
|
|
50
|
+
],
|
|
51
|
+
"monday": [
|
|
52
|
+
"пон",
|
|
53
|
+
"понедељак",
|
|
54
|
+
"понедјељак"
|
|
55
|
+
],
|
|
56
|
+
"tuesday": [
|
|
57
|
+
"уто",
|
|
58
|
+
"уторак"
|
|
59
|
+
],
|
|
60
|
+
"wednesday": [
|
|
61
|
+
"сри",
|
|
62
|
+
"сриједа"
|
|
63
|
+
],
|
|
64
|
+
"thursday": [
|
|
65
|
+
"чет",
|
|
66
|
+
"четвртак"
|
|
67
|
+
],
|
|
68
|
+
"friday": [
|
|
69
|
+
"пет",
|
|
70
|
+
"петак"
|
|
71
|
+
],
|
|
72
|
+
"saturday": [
|
|
73
|
+
"суб",
|
|
74
|
+
"субота"
|
|
75
|
+
],
|
|
76
|
+
"sunday": [
|
|
77
|
+
"нед",
|
|
78
|
+
"недеља",
|
|
79
|
+
"недјеља"
|
|
80
|
+
],
|
|
81
|
+
"am": [
|
|
82
|
+
"пре подне",
|
|
83
|
+
"пријеподне"
|
|
84
|
+
],
|
|
85
|
+
"pm": [
|
|
86
|
+
"поподне",
|
|
87
|
+
"послијеподне"
|
|
88
|
+
],
|
|
89
|
+
"year": [
|
|
90
|
+
"година",
|
|
91
|
+
"г",
|
|
92
|
+
"год",
|
|
93
|
+
"годинa"
|
|
94
|
+
],
|
|
95
|
+
"month": [
|
|
96
|
+
"месец",
|
|
97
|
+
"мј",
|
|
98
|
+
"мјесец",
|
|
99
|
+
"мјесеци",
|
|
100
|
+
"мјесеца"
|
|
101
|
+
],
|
|
102
|
+
"week": [
|
|
103
|
+
"недеља",
|
|
104
|
+
"сед",
|
|
105
|
+
"седмица",
|
|
106
|
+
"седмице"
|
|
107
|
+
],
|
|
108
|
+
"day": [
|
|
109
|
+
"дан"
|
|
110
|
+
],
|
|
111
|
+
"hour": [
|
|
112
|
+
"час",
|
|
113
|
+
"сат"
|
|
114
|
+
],
|
|
115
|
+
"minute": [
|
|
116
|
+
"минут",
|
|
117
|
+
"мин",
|
|
118
|
+
"минута"
|
|
119
|
+
],
|
|
120
|
+
"second": [
|
|
121
|
+
"секунд",
|
|
122
|
+
"с",
|
|
123
|
+
"сек",
|
|
124
|
+
"секунда"
|
|
125
|
+
],
|
|
126
|
+
"relative-type": {
|
|
127
|
+
"0 day ago": [
|
|
128
|
+
"данас"
|
|
129
|
+
],
|
|
130
|
+
"0 hour ago": [
|
|
131
|
+
"this hour",
|
|
132
|
+
"овај сат"
|
|
133
|
+
],
|
|
134
|
+
"0 minute ago": [
|
|
135
|
+
"this minute",
|
|
136
|
+
"ова минута"
|
|
137
|
+
],
|
|
138
|
+
"0 month ago": [
|
|
139
|
+
"овог месеца",
|
|
140
|
+
"овај мјесец"
|
|
141
|
+
],
|
|
142
|
+
"0 second ago": [
|
|
143
|
+
"now",
|
|
144
|
+
"сада"
|
|
145
|
+
],
|
|
146
|
+
"0 week ago": [
|
|
147
|
+
"ове недеље",
|
|
148
|
+
"ове седмице"
|
|
149
|
+
],
|
|
150
|
+
"0 year ago": [
|
|
151
|
+
"ове године"
|
|
152
|
+
],
|
|
153
|
+
"1 day ago": [
|
|
154
|
+
"јуче"
|
|
155
|
+
],
|
|
156
|
+
"1 month ago": [
|
|
157
|
+
"прошлог месеца",
|
|
158
|
+
"прошли мјесец"
|
|
159
|
+
],
|
|
160
|
+
"1 week ago": [
|
|
161
|
+
"прошле недеље",
|
|
162
|
+
"прошле седмице"
|
|
163
|
+
],
|
|
164
|
+
"1 year ago": [
|
|
165
|
+
"прошле године"
|
|
166
|
+
],
|
|
167
|
+
"in 1 day": [
|
|
168
|
+
"сутра"
|
|
169
|
+
],
|
|
170
|
+
"in 1 month": [
|
|
171
|
+
"следећег месеца",
|
|
172
|
+
"сљедећи мјесец"
|
|
173
|
+
],
|
|
174
|
+
"in 1 week": [
|
|
175
|
+
"следеће недеље",
|
|
176
|
+
"сљедеће седмице"
|
|
177
|
+
],
|
|
178
|
+
"in 1 year": [
|
|
179
|
+
"следеће године",
|
|
180
|
+
"сљедеће године"
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
"relative-type-regex": {
|
|
184
|
+
"\\1 day ago": [
|
|
185
|
+
"пре (\\d+[.,]?\\d*) дан",
|
|
186
|
+
"пре (\\d+[.,]?\\d*) дана",
|
|
187
|
+
"прије (\\d+[.,]?\\d*) дан",
|
|
188
|
+
"прије (\\d+[.,]?\\d*) дана"
|
|
189
|
+
],
|
|
190
|
+
"\\1 hour ago": [
|
|
191
|
+
"пре (\\d+[.,]?\\d*) сат",
|
|
192
|
+
"пре (\\d+[.,]?\\d*) сати",
|
|
193
|
+
"прије (\\d+[.,]?\\d*) сат",
|
|
194
|
+
"прије (\\d+[.,]?\\d*) сати"
|
|
195
|
+
],
|
|
196
|
+
"\\1 minute ago": [
|
|
197
|
+
"пре (\\d+[.,]?\\d*) минут",
|
|
198
|
+
"пре (\\d+[.,]?\\d*) минута",
|
|
199
|
+
"прије (\\d+[.,]?\\d*) мин",
|
|
200
|
+
"прије (\\d+[.,]?\\d*) минута",
|
|
201
|
+
"прије (\\d+[.,]?\\d*) минуту"
|
|
202
|
+
],
|
|
203
|
+
"\\1 month ago": [
|
|
204
|
+
"пре (\\d+[.,]?\\d*) месец",
|
|
205
|
+
"пре (\\d+[.,]?\\d*) месеци",
|
|
206
|
+
"прије (\\d+[.,]?\\d*) мј",
|
|
207
|
+
"прије (\\d+[.,]?\\d*) мјесец",
|
|
208
|
+
"прије (\\d+[.,]?\\d*) мјесеца",
|
|
209
|
+
"прије (\\d+[.,]?\\d*) мјесеци"
|
|
210
|
+
],
|
|
211
|
+
"\\1 second ago": [
|
|
212
|
+
"пре (\\d+[.,]?\\d*) секунд",
|
|
213
|
+
"пре (\\d+[.,]?\\d*) секунди",
|
|
214
|
+
"прије (\\d+[.,]?\\d*) сек",
|
|
215
|
+
"прије (\\d+[.,]?\\d*) секунда",
|
|
216
|
+
"прије (\\d+[.,]?\\d*) секунду"
|
|
217
|
+
],
|
|
218
|
+
"\\1 week ago": [
|
|
219
|
+
"пре (\\d+[.,]?\\d*) недеља",
|
|
220
|
+
"пре (\\d+[.,]?\\d*) недељу",
|
|
221
|
+
"прије (\\d+[.,]?\\d*) сед",
|
|
222
|
+
"прије (\\d+[.,]?\\d*) седмица",
|
|
223
|
+
"прије (\\d+[.,]?\\d*) седмице",
|
|
224
|
+
"прије (\\d+[.,]?\\d*) седмицу"
|
|
225
|
+
],
|
|
226
|
+
"\\1 year ago": [
|
|
227
|
+
"пре (\\d+[.,]?\\d*) година",
|
|
228
|
+
"пре (\\d+[.,]?\\d*) годину",
|
|
229
|
+
"прије (\\d+[.,]?\\d*) г",
|
|
230
|
+
"прије (\\d+[.,]?\\d*) год",
|
|
231
|
+
"прије (\\d+[.,]?\\d*) година",
|
|
232
|
+
"прије (\\d+[.,]?\\d*) годину"
|
|
233
|
+
],
|
|
234
|
+
"in \\1 day": [
|
|
235
|
+
"за (\\d+[.,]?\\d*) дан",
|
|
236
|
+
"за (\\d+[.,]?\\d*) дана"
|
|
237
|
+
],
|
|
238
|
+
"in \\1 hour": [
|
|
239
|
+
"за (\\d+[.,]?\\d*) сат",
|
|
240
|
+
"за (\\d+[.,]?\\d*) сати"
|
|
241
|
+
],
|
|
242
|
+
"in \\1 minute": [
|
|
243
|
+
"за (\\d+[.,]?\\d*) минут",
|
|
244
|
+
"за (\\d+[.,]?\\d*) минута",
|
|
245
|
+
"за (\\d+[.,]?\\d*) мин",
|
|
246
|
+
"за (\\d+[.,]?\\d*) минута",
|
|
247
|
+
"за (\\d+[.,]?\\d*) минуту"
|
|
248
|
+
],
|
|
249
|
+
"in \\1 month": [
|
|
250
|
+
"за (\\d+[.,]?\\d*) месец",
|
|
251
|
+
"за (\\d+[.,]?\\d*) месеци",
|
|
252
|
+
"за (\\d+[.,]?\\d*) мј",
|
|
253
|
+
"за (\\d+[.,]?\\d*) мјесец",
|
|
254
|
+
"за (\\d+[.,]?\\d*) мјесеца",
|
|
255
|
+
"за (\\d+[.,]?\\d*) мјесеци"
|
|
256
|
+
],
|
|
257
|
+
"in \\1 second": [
|
|
258
|
+
"за (\\d+[.,]?\\d*) секунд",
|
|
259
|
+
"за (\\d+[.,]?\\d*) секунди",
|
|
260
|
+
"за (\\d+[.,]?\\d*) сек",
|
|
261
|
+
"за (\\d+[.,]?\\d*) секунда",
|
|
262
|
+
"за (\\d+[.,]?\\d*) секунду"
|
|
263
|
+
],
|
|
264
|
+
"in \\1 week": [
|
|
265
|
+
"за (\\d+[.,]?\\d*) недеља",
|
|
266
|
+
"за (\\d+[.,]?\\d*) недељу",
|
|
267
|
+
"за (\\d+[.,]?\\d*) сед",
|
|
268
|
+
"за (\\d+[.,]?\\d*) седмица",
|
|
269
|
+
"за (\\d+[.,]?\\d*) седмицу",
|
|
270
|
+
"за (\\d+[.,]?\\d*) седмице"
|
|
271
|
+
],
|
|
272
|
+
"in \\1 year": [
|
|
273
|
+
"за (\\d+[.,]?\\d*) година",
|
|
274
|
+
"за (\\d+[.,]?\\d*) годину",
|
|
275
|
+
"за (\\d+[.,]?\\d*) г",
|
|
276
|
+
"за (\\d+[.,]?\\d*) год"
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
"locale_specific": {},
|
|
280
|
+
"skip": [
|
|
281
|
+
" ",
|
|
282
|
+
"'",
|
|
283
|
+
",",
|
|
284
|
+
"-",
|
|
285
|
+
".",
|
|
286
|
+
"/",
|
|
287
|
+
";",
|
|
288
|
+
"@",
|
|
289
|
+
"[",
|
|
290
|
+
"]",
|
|
291
|
+
"|",
|
|
292
|
+
","
|
|
293
|
+
]
|
|
294
|
+
}
|
|
@@ -718,6 +718,9 @@ info = {
|
|
|
718
718
|
"en-UM": {
|
|
719
719
|
"name": "en-UM"
|
|
720
720
|
},
|
|
721
|
+
"en-US": {
|
|
722
|
+
"name": "en-US"
|
|
723
|
+
},
|
|
721
724
|
"en-VC": {
|
|
722
725
|
"name": "en-VC",
|
|
723
726
|
"date_order": "DMY"
|
|
@@ -756,6 +759,7 @@ info = {
|
|
|
756
759
|
"and",
|
|
757
760
|
"at",
|
|
758
761
|
"by",
|
|
762
|
+
"from",
|
|
759
763
|
"just",
|
|
760
764
|
"m",
|
|
761
765
|
"nd",
|
|
@@ -812,13 +816,13 @@ info = {
|
|
|
812
816
|
"(\\d+[.,]?\\d*)h(\\d+[.,]?\\d*)": "\\1:\\2"
|
|
813
817
|
},
|
|
814
818
|
{
|
|
815
|
-
"
|
|
819
|
+
"from\\s+now": "in"
|
|
816
820
|
},
|
|
817
821
|
{
|
|
818
822
|
"less than 1 minute ago": "45 second ago"
|
|
819
823
|
},
|
|
820
824
|
{
|
|
821
|
-
"(\\d+[.,]?\\d
|
|
825
|
+
"(\\d+[.,]?\\d*|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve) (decade|year|month|week|day|hour|minute|second)s? later": "in \\1 \\2"
|
|
822
826
|
},
|
|
823
827
|
{
|
|
824
828
|
"one": "1"
|
|
@@ -275,26 +275,48 @@ class _DateLocaleParser:
|
|
|
275
275
|
return self._try_parser(parse_method=_parse_nospaces)
|
|
276
276
|
|
|
277
277
|
def _try_parser(self, parse_method):
|
|
278
|
-
|
|
278
|
+
original_order = self._settings.DATE_ORDER
|
|
279
|
+
|
|
280
|
+
# Use locale date order unless DATE_ORDER was explicitly set by the caller.
|
|
281
|
+
if (
|
|
282
|
+
self._settings.PREFER_LOCALE_DATE_ORDER
|
|
283
|
+
and "DATE_ORDER" not in self._settings._mod_settings
|
|
284
|
+
):
|
|
285
|
+
first_order = self.locale.info.get("date_order", original_order)
|
|
286
|
+
else:
|
|
287
|
+
first_order = original_order
|
|
288
|
+
|
|
289
|
+
candidates = [first_order]
|
|
290
|
+
|
|
291
|
+
# If the caller requires a year (and not a day) and did not set DATE_ORDER,
|
|
292
|
+
# retry once or twice with year-biased orders to resolve month-number ambiguity.
|
|
293
|
+
require_parts = set(getattr(self._settings, "REQUIRE_PARTS", None) or [])
|
|
294
|
+
if (
|
|
295
|
+
"DATE_ORDER" not in self._settings._mod_settings
|
|
296
|
+
and "year" in require_parts
|
|
297
|
+
and "day" not in require_parts
|
|
298
|
+
):
|
|
299
|
+
for order in ("MYD", "YMD"):
|
|
300
|
+
if order not in candidates:
|
|
301
|
+
candidates.append(order)
|
|
302
|
+
|
|
303
|
+
translated = self._get_translated_date()
|
|
304
|
+
|
|
279
305
|
try:
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
306
|
+
for order in candidates:
|
|
307
|
+
self._settings.DATE_ORDER = order
|
|
308
|
+
try:
|
|
309
|
+
date_obj, period = date_parser.parse(
|
|
310
|
+
translated,
|
|
311
|
+
parse_method=parse_method,
|
|
312
|
+
settings=self._settings,
|
|
284
313
|
)
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
settings=self._settings,
|
|
289
|
-
)
|
|
290
|
-
self._settings.DATE_ORDER = _order
|
|
291
|
-
return DateData(
|
|
292
|
-
date_obj=date_obj,
|
|
293
|
-
period=period,
|
|
294
|
-
)
|
|
295
|
-
except ValueError:
|
|
296
|
-
self._settings.DATE_ORDER = _order
|
|
314
|
+
return DateData(date_obj=date_obj, period=period)
|
|
315
|
+
except ValueError:
|
|
316
|
+
continue
|
|
297
317
|
return None
|
|
318
|
+
finally:
|
|
319
|
+
self._settings.DATE_ORDER = original_order
|
|
298
320
|
|
|
299
321
|
def _try_given_formats(self):
|
|
300
322
|
if not self.date_formats:
|
|
@@ -51,6 +51,14 @@ class UnknownTokenError(Exception):
|
|
|
51
51
|
pass
|
|
52
52
|
|
|
53
53
|
|
|
54
|
+
def _parse_bool(value):
|
|
55
|
+
if isinstance(value, bool):
|
|
56
|
+
return value
|
|
57
|
+
if isinstance(value, str):
|
|
58
|
+
return value.strip().lower() in ("true", "1", "yes")
|
|
59
|
+
return False
|
|
60
|
+
|
|
61
|
+
|
|
54
62
|
class Dictionary:
|
|
55
63
|
"""
|
|
56
64
|
Class that modifies and stores translations and handles splitting of date string.
|
|
@@ -101,8 +109,8 @@ class Dictionary:
|
|
|
101
109
|
|
|
102
110
|
self._dictionary = dictionary
|
|
103
111
|
|
|
104
|
-
no_word_spacing = locale_info.get("no_word_spacing",
|
|
105
|
-
self._no_word_spacing =
|
|
112
|
+
no_word_spacing = locale_info.get("no_word_spacing", False)
|
|
113
|
+
self._no_word_spacing = _parse_bool(no_word_spacing)
|
|
106
114
|
|
|
107
115
|
relative_type_regex = locale_info.get("relative-type-regex", {})
|
|
108
116
|
self._relative_strings = list(chain.from_iterable(relative_type_regex.values()))
|
|
@@ -12,6 +12,14 @@ from .dictionary import ALWAYS_KEEP_TOKENS, Dictionary, NormalizedDictionary
|
|
|
12
12
|
NUMERAL_PATTERN = re.compile(r"(\d+)", re.U)
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
def _parse_bool(value):
|
|
16
|
+
if isinstance(value, bool):
|
|
17
|
+
return value
|
|
18
|
+
if isinstance(value, str):
|
|
19
|
+
return value.strip().lower() in ("true", "1", "yes")
|
|
20
|
+
return False
|
|
21
|
+
|
|
22
|
+
|
|
15
23
|
class Locale:
|
|
16
24
|
"""
|
|
17
25
|
Class that deals with applicability and translation from a locale.
|
|
@@ -459,7 +467,7 @@ class Locale:
|
|
|
459
467
|
return date_string
|
|
460
468
|
|
|
461
469
|
def _get_simplifications(self, settings=None):
|
|
462
|
-
no_word_spacing =
|
|
470
|
+
no_word_spacing = _parse_bool(self.info.get("no_word_spacing", False))
|
|
463
471
|
if settings.NORMALIZE:
|
|
464
472
|
if self._normalized_simplifications is None:
|
|
465
473
|
self._normalized_simplifications = []
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import pickle
|
|
3
|
-
import zlib
|
|
4
1
|
from datetime import datetime, timedelta, timezone, tzinfo
|
|
5
|
-
from pathlib import Path
|
|
6
2
|
|
|
7
3
|
import regex as re
|
|
8
4
|
|
|
@@ -88,47 +84,8 @@ def get_local_tz_offset():
|
|
|
88
84
|
return offset
|
|
89
85
|
|
|
90
86
|
|
|
87
|
+
_search_regex_parts = []
|
|
88
|
+
_tz_offsets = list(build_tz_offsets(_search_regex_parts))
|
|
89
|
+
_search_regex = re.compile("|".join(_search_regex_parts))
|
|
90
|
+
_search_regex_ignorecase = re.compile("|".join(_search_regex_parts), re.IGNORECASE)
|
|
91
91
|
local_tz_offset = get_local_tz_offset()
|
|
92
|
-
|
|
93
|
-
_tz_offsets = None
|
|
94
|
-
_search_regex = None
|
|
95
|
-
_search_regex_ignorecase = None
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
def _load_offsets(cache_path, current_hash):
|
|
99
|
-
global _tz_offsets, _search_regex, _search_regex_ignorecase
|
|
100
|
-
|
|
101
|
-
try:
|
|
102
|
-
with open(cache_path, mode="rb") as file:
|
|
103
|
-
(
|
|
104
|
-
serialized_hash,
|
|
105
|
-
_tz_offsets,
|
|
106
|
-
_search_regex,
|
|
107
|
-
_search_regex_ignorecase,
|
|
108
|
-
) = pickle.load(file)
|
|
109
|
-
if current_hash is None or current_hash == serialized_hash:
|
|
110
|
-
return
|
|
111
|
-
except (FileNotFoundError, ValueError, TypeError):
|
|
112
|
-
pass
|
|
113
|
-
|
|
114
|
-
_search_regex_parts = []
|
|
115
|
-
_tz_offsets = list(build_tz_offsets(_search_regex_parts))
|
|
116
|
-
_search_regex = re.compile("|".join(_search_regex_parts))
|
|
117
|
-
_search_regex_ignorecase = re.compile("|".join(_search_regex_parts), re.IGNORECASE)
|
|
118
|
-
|
|
119
|
-
with open(cache_path, mode="wb") as file:
|
|
120
|
-
pickle.dump(
|
|
121
|
-
(current_hash, _tz_offsets, _search_regex, _search_regex_ignorecase),
|
|
122
|
-
file,
|
|
123
|
-
protocol=5,
|
|
124
|
-
)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
CACHE_PATH = Path(__file__).parent.joinpath("data", "dateparser_tz_cache.pkl")
|
|
128
|
-
|
|
129
|
-
if "BUILD_TZ_CACHE" in os.environ:
|
|
130
|
-
current_hash = zlib.crc32(str(timezone_info_list).encode("utf-8"))
|
|
131
|
-
else:
|
|
132
|
-
current_hash = None
|
|
133
|
-
|
|
134
|
-
_load_offsets(CACHE_PATH, current_hash)
|