dateparser 1.2.0__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.2.0 → dateparser-1.2.1}/HISTORY.rst +24 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/PKG-INFO +53 -16
- {dateparser-1.2.0 → dateparser-1.2.1}/README.rst +6 -6
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/__init__.py +1 -1
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/__init__.py +5 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/hijri_parser.py +10 -6
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/jalali_parser.py +6 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/conf.py +1 -1
- dateparser-1.2.1/dateparser/data/__init__.py +2 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/en.py +1 -1
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/date.py +0 -1
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/freshness_date_parser.py +2 -5
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/dictionary.py +27 -19
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/parser.py +22 -20
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/timezone_parser.py +2 -3
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/PKG-INFO +53 -16
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/SOURCES.txt +1 -2
- dateparser-1.2.1/dateparser.egg-info/requires.txt +15 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/custom_language_detection.rst +13 -13
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/introduction.rst +3 -3
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/settings.rst +2 -2
- dateparser-1.2.1/pyproject.toml +20 -0
- dateparser-1.2.1/setup.cfg +4 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/setup.py +10 -13
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_clean_api.py +81 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_date.py +1 -1
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_date_parser.py +82 -6
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_dateparser_data_integrity.py +4 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_hijri.py +6 -2
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_jalali.py +12 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_language_detect.py +4 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_languages.py +12 -10
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_search.py +18 -6
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_timezone_parser.py +10 -6
- dateparser-1.2.0/dateparser/data/__init__.py +0 -3
- dateparser-1.2.0/dateparser.egg-info/requires.txt +0 -14
- dateparser-1.2.0/setup.cfg +0 -21
- dateparser-1.2.0/tests/requirements.txt +0 -4
- {dateparser-1.2.0 → dateparser-1.2.1}/AUTHORS.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/CONTRIBUTING.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/LICENSE +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/MANIFEST.in +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/hijri.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/jalali.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/custom_language_detection/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/custom_language_detection/fasttext.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/custom_language_detection/langdetect.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/custom_language_detection/language_mapping.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/af.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/agq.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ak.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/am.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ar.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/as.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/asa.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ast.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/az-Cyrl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/az-Latn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/az.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bas.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/be.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bem.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bez.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bg.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bm.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/br.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/brx.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs-Cyrl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs-Latn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ca.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ce.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/cgg.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/chr.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ckb.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/cs.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/cy.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/da.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dav.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/de.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dje.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dsb.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dua.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dyo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dz.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ebu.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ee.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/el.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/eo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/es.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/et.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/eu.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ewo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fa.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ff.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fi.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fil.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fr.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fur.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fy.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ga.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gd.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gsw.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gu.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/guz.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gv.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ha.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/haw.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/he.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hi.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hr.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hsb.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hu.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hy.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/id.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ig.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ii.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/is.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/it.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ja.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/jgo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/jmc.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ka.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kab.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kam.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kde.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kea.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/khq.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ki.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kk.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kln.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/km.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ko.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kok.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ks.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksb.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksf.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksh.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kw.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ky.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lag.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lb.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lg.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lkt.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ln.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lrc.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lt.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lu.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/luo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/luy.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lv.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mas.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mer.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mfe.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mg.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mgh.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mgo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mk.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ml.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mr.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ms.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mt.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mua.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/my.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mzn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/naq.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nb.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nd.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ne.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nmg.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nnh.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nus.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nyn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/om.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/or.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/os.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa-Arab.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa-Guru.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ps.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pt.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/qu.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rm.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ro.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rof.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ru.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rw.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rwk.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sah.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/saq.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sbp.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/se.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/seh.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ses.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sg.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi-Latn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi-Tfng.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/si.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sk.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/smn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/so.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sq.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr-Cyrl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr-Latn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sv.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sw.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ta.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/te.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/teo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/th.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ti.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/tl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/to.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/tr.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/twq.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/tzm.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ug.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uk.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ur.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Arab.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Cyrl.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Latn.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/vi.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/vun.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/wae.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/xog.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/yav.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/yi.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/yo.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/yue.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zgh.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh-Hans.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh-Hant.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zu.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/languages_info.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/date_parser.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/loader.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/locale.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/validation.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/search/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/search/detection.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/search/search.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/search/text_detection.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/timezones.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/utils/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/utils/strptime.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/dependency_links.txt +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/entry_points.txt +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/not-zip-safe +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/top_level.txt +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/cli.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/exceptions.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/fasttext_manager.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/utils.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_data/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_data/settings.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/get_cldr_data.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/order_languages.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/update_supported_languages_and_locales.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/utils.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/write_complete_data.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/Makefile +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/authors.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/conf.py +2 -2
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/contributing.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/dateparser.calendars.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/dateparser.languages.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/dateparser.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/history.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/index.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/installation.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/make.bat +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/modules.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/supported_locales.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/template.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/docs/usage.rst +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/__init__.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_data.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_date_data.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_freshness_date_parser.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_loading.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_parser.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_pickle.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_settings.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_utils.py +0 -0
- {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_utils_strptime.py +0 -0
|
@@ -3,6 +3,30 @@
|
|
|
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
|
+
|
|
6
30
|
1.2.0 (2023-11-17)
|
|
7
31
|
------------------
|
|
8
32
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: dateparser
|
|
3
|
-
Version: 1.2.
|
|
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,26 +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
23
|
License-File: LICENSE
|
|
24
24
|
License-File: AUTHORS.rst
|
|
25
|
-
Requires-Dist: python-dateutil
|
|
26
|
-
Requires-Dist: pytz
|
|
27
|
-
Requires-Dist: regex!=2019.02.19,!=2021.8.27
|
|
28
|
-
Requires-Dist: tzlocal
|
|
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
|
|
29
29
|
Provides-Extra: calendars
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
30
|
+
Requires-Dist: convertdate>=2.2.1; extra == "calendars"
|
|
31
|
+
Requires-Dist: hijridate; extra == "calendars"
|
|
32
32
|
Provides-Extra: fasttext
|
|
33
|
-
Requires-Dist: fasttext; extra == "fasttext"
|
|
33
|
+
Requires-Dist: fasttext>=0.9.1; extra == "fasttext"
|
|
34
|
+
Requires-Dist: numpy<2,>=1.19.3; extra == "fasttext"
|
|
34
35
|
Provides-Extra: langdetect
|
|
35
|
-
Requires-Dist: langdetect; extra == "langdetect"
|
|
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
|
|
36
49
|
|
|
37
50
|
==========================
|
|
38
51
|
Introduction to dateparser
|
|
@@ -259,13 +272,13 @@ Dependencies
|
|
|
259
272
|
|
|
260
273
|
* dateutil_'s module ``relativedelta`` for its freshness parser.
|
|
261
274
|
* convertdate_ to convert *Jalali* dates to *Gregorian*.
|
|
262
|
-
*
|
|
275
|
+
* hijridate_ to convert *Hijri* dates to *Gregorian*.
|
|
263
276
|
* tzlocal_ to reliably get local timezone.
|
|
264
277
|
* ruamel.yaml_ (optional) for operations on language files.
|
|
265
278
|
|
|
266
279
|
.. _dateutil: https://pypi.python.org/pypi/python-dateutil
|
|
267
280
|
.. _convertdate: https://pypi.python.org/pypi/convertdate
|
|
268
|
-
..
|
|
281
|
+
.. _hijridate: https://pypi.python.org/pypi/hijridate
|
|
269
282
|
.. _tzlocal: https://pypi.python.org/pypi/tzlocal
|
|
270
283
|
.. _ruamel.yaml: https://pypi.python.org/pypi/ruamel.yaml
|
|
271
284
|
|
|
@@ -297,7 +310,7 @@ To be able to use them you need to install the `calendar` extra by typing:
|
|
|
297
310
|
>>> HijriCalendar('17-01-1437 هـ 08:30 مساءً').get_date()
|
|
298
311
|
DateData(date_obj=datetime.datetime(2015, 10, 30, 20, 30), period='day', locale=None)
|
|
299
312
|
|
|
300
|
-
.. note:: `HijriCalendar` only works with Python ≥ 3.
|
|
313
|
+
.. note:: `HijriCalendar` only works with Python ≥ 3.7.
|
|
301
314
|
|
|
302
315
|
|
|
303
316
|
.. :changelog:
|
|
@@ -305,6 +318,30 @@ To be able to use them you need to install the `calendar` extra by typing:
|
|
|
305
318
|
History
|
|
306
319
|
=======
|
|
307
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
|
+
|
|
308
345
|
1.2.0 (2023-11-17)
|
|
309
346
|
------------------
|
|
310
347
|
|
|
@@ -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
|
|
|
@@ -76,6 +76,9 @@ 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
83
|
day = params["day"]
|
|
81
84
|
year = params["year"]
|
|
@@ -129,6 +132,8 @@ class non_gregorian_parser(_parser):
|
|
|
129
132
|
day = int(token)
|
|
130
133
|
elif directive == "%Y" and token_len == 4 and is_digit:
|
|
131
134
|
year = int(token)
|
|
135
|
+
elif directive == "%Y" and token_len == 2 and is_digit:
|
|
136
|
+
year = self.handle_two_digit_year(int(token))
|
|
132
137
|
else:
|
|
133
138
|
raise ValueError
|
|
134
139
|
return self.non_gregorian_date_cls(year, month, day)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from hijridate import Gregorian, Hijri
|
|
2
2
|
|
|
3
3
|
from dateparser.calendars import non_gregorian_parser
|
|
4
4
|
|
|
@@ -6,19 +6,17 @@ from dateparser.calendars import non_gregorian_parser
|
|
|
6
6
|
class hijri:
|
|
7
7
|
@classmethod
|
|
8
8
|
def to_gregorian(cls, year=None, month=None, day=None):
|
|
9
|
-
g =
|
|
10
|
-
year=year, month=month, day=day, validate=False
|
|
11
|
-
).to_gregorian()
|
|
9
|
+
g = Hijri(year=year, month=month, day=day, validate=False).to_gregorian()
|
|
12
10
|
return g.datetuple()
|
|
13
11
|
|
|
14
12
|
@classmethod
|
|
15
13
|
def from_gregorian(cls, year=None, month=None, day=None):
|
|
16
|
-
h =
|
|
14
|
+
h = Gregorian(year, month, day).to_hijri()
|
|
17
15
|
return h.datetuple()
|
|
18
16
|
|
|
19
17
|
@classmethod
|
|
20
18
|
def month_length(cls, year, month):
|
|
21
|
-
h =
|
|
19
|
+
h = Hijri(year=year, month=month, day=1)
|
|
22
20
|
return h.month_length()
|
|
23
21
|
|
|
24
22
|
|
|
@@ -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
|
|
@@ -243,7 +243,7 @@ def check_settings(settings):
|
|
|
243
243
|
setting_props = settings_values[setting_name]
|
|
244
244
|
|
|
245
245
|
# check type:
|
|
246
|
-
if not
|
|
246
|
+
if not isinstance(setting_value, setting_props["type"]):
|
|
247
247
|
raise SettingValidationError(
|
|
248
248
|
'"{}" must be "{}", not "{}".'.format(
|
|
249
249
|
setting_name, setting_props["type"].__name__, setting_type.__name__
|
|
@@ -31,7 +31,7 @@ class FreshnessDateDataParser:
|
|
|
31
31
|
date_string = re.sub(r"\b(?:ago|in)\b", "", date_string)
|
|
32
32
|
try:
|
|
33
33
|
return time_parser(date_string)
|
|
34
|
-
except:
|
|
34
|
+
except Exception:
|
|
35
35
|
pass
|
|
36
36
|
|
|
37
37
|
def get_local_tz(self):
|
|
@@ -71,10 +71,7 @@ class FreshnessDateDataParser:
|
|
|
71
71
|
now = now.replace(tzinfo=ptz)
|
|
72
72
|
|
|
73
73
|
if not now.tzinfo:
|
|
74
|
-
|
|
75
|
-
now = self.get_local_tz().localize(now)
|
|
76
|
-
else:
|
|
77
|
-
now = now.replace(tzinfo=self.get_local_tz())
|
|
74
|
+
now = now.replace(tzinfo=self.get_local_tz())
|
|
78
75
|
|
|
79
76
|
elif ptz:
|
|
80
77
|
localized_now = datetime.now(ptz)
|
|
@@ -181,26 +181,34 @@ class Dictionary:
|
|
|
181
181
|
):
|
|
182
182
|
cache.pop(list(cache.keys())[0])
|
|
183
183
|
|
|
184
|
-
def _split_by_known_words(self, string, keep_formatting):
|
|
185
|
-
if not string:
|
|
186
|
-
return string
|
|
187
|
-
|
|
184
|
+
def _split_by_known_words(self, string: str, keep_formatting: bool):
|
|
188
185
|
regex = self._get_split_regex_cache()
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
186
|
+
splitted = []
|
|
187
|
+
unknown = string
|
|
188
|
+
|
|
189
|
+
while unknown:
|
|
190
|
+
match = regex.match(string)
|
|
191
|
+
|
|
192
|
+
if not match:
|
|
193
|
+
curr_split = (
|
|
194
|
+
self._split_by_numerals(string, keep_formatting)
|
|
195
|
+
if self._should_capture(string, keep_formatting)
|
|
196
|
+
else []
|
|
197
|
+
)
|
|
198
|
+
unknown = ""
|
|
199
|
+
else:
|
|
200
|
+
unparsed, known, unknown = match.groups()
|
|
201
|
+
curr_split = (
|
|
202
|
+
[known] if self._should_capture(known, keep_formatting) else []
|
|
203
|
+
)
|
|
204
|
+
if unparsed and self._should_capture(unparsed, keep_formatting):
|
|
205
|
+
curr_split = (
|
|
206
|
+
self._split_by_numerals(unparsed, keep_formatting) + curr_split
|
|
207
|
+
)
|
|
208
|
+
if unknown:
|
|
209
|
+
string = unknown if string != unknown else ""
|
|
210
|
+
|
|
211
|
+
splitted.extend(curr_split)
|
|
204
212
|
return splitted
|
|
205
213
|
|
|
206
214
|
def _split_by_numerals(self, string, keep_formatting):
|
|
@@ -182,7 +182,7 @@ class _no_spaces_parser:
|
|
|
182
182
|
dt = strptime(datestring, fmt), cls._get_period(fmt)
|
|
183
183
|
if len(str(dt[0].year)) == 4:
|
|
184
184
|
return dt
|
|
185
|
-
except:
|
|
185
|
+
except Exception:
|
|
186
186
|
pass
|
|
187
187
|
return None
|
|
188
188
|
|
|
@@ -216,7 +216,7 @@ class _no_spaces_parser:
|
|
|
216
216
|
missing = _get_missing_parts(fmt)
|
|
217
217
|
_check_strict_parsing(missing, settings)
|
|
218
218
|
return dt
|
|
219
|
-
except:
|
|
219
|
+
except Exception:
|
|
220
220
|
pass
|
|
221
221
|
else:
|
|
222
222
|
if ambiguous_date:
|
|
@@ -332,7 +332,7 @@ class _parser:
|
|
|
332
332
|
token.index(":")
|
|
333
333
|
# Is after period? raise ValueError if '.' can't be found:
|
|
334
334
|
self.tokens[self.tokens.index((token, 0)) + 1][0].index(".")
|
|
335
|
-
except:
|
|
335
|
+
except Exception:
|
|
336
336
|
microsecond = None
|
|
337
337
|
|
|
338
338
|
if microsecond:
|
|
@@ -342,7 +342,7 @@ class _parser:
|
|
|
342
342
|
meridian = MERIDIAN.search(
|
|
343
343
|
self.filtered_tokens[meridian_index][0]
|
|
344
344
|
).group()
|
|
345
|
-
except:
|
|
345
|
+
except Exception:
|
|
346
346
|
meridian = None
|
|
347
347
|
|
|
348
348
|
if any([":" in token, meridian, microsecond]):
|
|
@@ -514,9 +514,9 @@ class _parser:
|
|
|
514
514
|
|
|
515
515
|
# NOTE: If this assert fires, self.now needs to be made offset-aware in a similar
|
|
516
516
|
# way that dateobj is temporarily made offset-aware.
|
|
517
|
-
assert not (
|
|
518
|
-
self.now
|
|
519
|
-
)
|
|
517
|
+
assert not (self.now.tzinfo is None and dateobj.tzinfo is not None), (
|
|
518
|
+
"`self.now` doesn't have `tzinfo`. Review comment in code for details."
|
|
519
|
+
)
|
|
520
520
|
|
|
521
521
|
# Store the original dateobj values so that upon subsequent parsing everything is not
|
|
522
522
|
# treated as offset-aware if offset awareness is changed.
|
|
@@ -563,18 +563,15 @@ class _parser:
|
|
|
563
563
|
# Convert dateobj to utc time to compare with self.now
|
|
564
564
|
try:
|
|
565
565
|
tz = tz or get_timezone_from_tz_string(self.settings.TIMEZONE)
|
|
566
|
-
|
|
567
|
-
|
|
566
|
+
tz_offset = tz.utcoffset(dateobj)
|
|
567
|
+
except (pytz.UnknownTimeZoneError, pytz.NonExistentTimeError):
|
|
568
|
+
tz_offset = timedelta(hours=0)
|
|
568
569
|
|
|
569
|
-
if tz:
|
|
570
|
-
dateobj_time = (dateobj - tz.utcoffset(dateobj)).time()
|
|
571
|
-
else:
|
|
572
|
-
dateobj_time = dateobj.time()
|
|
573
570
|
if "past" in self.settings.PREFER_DATES_FROM:
|
|
574
|
-
if self.now
|
|
571
|
+
if self.now < dateobj - tz_offset:
|
|
575
572
|
dateobj = dateobj + timedelta(days=-1)
|
|
576
573
|
if "future" in self.settings.PREFER_DATES_FROM:
|
|
577
|
-
if self.now
|
|
574
|
+
if self.now > dateobj - tz_offset:
|
|
578
575
|
dateobj = dateobj + timedelta(days=1)
|
|
579
576
|
|
|
580
577
|
# Reset dateobj to the original value, thus removing any offset awareness that may
|
|
@@ -601,10 +598,13 @@ class _parser:
|
|
|
601
598
|
relative_base_month = (
|
|
602
599
|
relative_base.month if hasattr(relative_base, "month") else relative_base
|
|
603
600
|
)
|
|
604
|
-
|
|
601
|
+
|
|
602
|
+
if getattr(self, "_token_month", None):
|
|
605
603
|
return dateobj
|
|
606
604
|
|
|
607
|
-
dateobj = set_correct_month_from_settings(
|
|
605
|
+
dateobj = set_correct_month_from_settings(
|
|
606
|
+
dateobj, self.settings, relative_base_month
|
|
607
|
+
)
|
|
608
608
|
return dateobj
|
|
609
609
|
|
|
610
610
|
@classmethod
|
|
@@ -616,11 +616,13 @@ class _parser:
|
|
|
616
616
|
# correction for past, future if applicable
|
|
617
617
|
dateobj = po._correct_for_time_frame(dateobj, tz)
|
|
618
618
|
|
|
619
|
+
# correction for preference of month: beginning, current, end
|
|
620
|
+
# must happen before day so that day is derived from the correct month
|
|
621
|
+
dateobj = po._correct_for_month(dateobj)
|
|
622
|
+
|
|
619
623
|
# correction for preference of day: beginning, current, end
|
|
620
624
|
dateobj = po._correct_for_day(dateobj)
|
|
621
625
|
|
|
622
|
-
# correction for preference of month: beginning, current, end
|
|
623
|
-
dateobj = po._correct_for_month(dateobj)
|
|
624
626
|
period = po._get_period()
|
|
625
627
|
|
|
626
628
|
return dateobj, period
|
|
@@ -684,7 +686,7 @@ class _parser:
|
|
|
684
686
|
(component, getattr(do, component)),
|
|
685
687
|
("day", prev_value),
|
|
686
688
|
]
|
|
687
|
-
except:
|
|
689
|
+
except Exception:
|
|
688
690
|
pass
|
|
689
691
|
else:
|
|
690
692
|
raise ValueError("Unable to parse: %s" % token)
|
|
@@ -72,9 +72,8 @@ def build_tz_offsets(search_regex_parts):
|
|
|
72
72
|
search_regex_parts.append(tz_obj[0])
|
|
73
73
|
yield get_offset(tz_obj, regex)
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
for tz_obj in tz_info["timezones"]:
|
|
75
|
+
# alternate patterns
|
|
76
|
+
for replace, replacewith in tz_info.get("replace", []):
|
|
78
77
|
search_regex_parts.append(re.sub(replace, replacewith, tz_obj[0]))
|
|
79
78
|
yield get_offset(tz_obj, regex, repl=replace, replw=replacewith)
|
|
80
79
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: dateparser
|
|
3
|
-
Version: 1.2.
|
|
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,26 +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
23
|
License-File: LICENSE
|
|
24
24
|
License-File: AUTHORS.rst
|
|
25
|
-
Requires-Dist: python-dateutil
|
|
26
|
-
Requires-Dist: pytz
|
|
27
|
-
Requires-Dist: regex!=2019.02.19,!=2021.8.27
|
|
28
|
-
Requires-Dist: tzlocal
|
|
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
|
|
29
29
|
Provides-Extra: calendars
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
30
|
+
Requires-Dist: convertdate>=2.2.1; extra == "calendars"
|
|
31
|
+
Requires-Dist: hijridate; extra == "calendars"
|
|
32
32
|
Provides-Extra: fasttext
|
|
33
|
-
Requires-Dist: fasttext; extra == "fasttext"
|
|
33
|
+
Requires-Dist: fasttext>=0.9.1; extra == "fasttext"
|
|
34
|
+
Requires-Dist: numpy<2,>=1.19.3; extra == "fasttext"
|
|
34
35
|
Provides-Extra: langdetect
|
|
35
|
-
Requires-Dist: langdetect; extra == "langdetect"
|
|
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
|
|
36
49
|
|
|
37
50
|
==========================
|
|
38
51
|
Introduction to dateparser
|
|
@@ -259,13 +272,13 @@ Dependencies
|
|
|
259
272
|
|
|
260
273
|
* dateutil_'s module ``relativedelta`` for its freshness parser.
|
|
261
274
|
* convertdate_ to convert *Jalali* dates to *Gregorian*.
|
|
262
|
-
*
|
|
275
|
+
* hijridate_ to convert *Hijri* dates to *Gregorian*.
|
|
263
276
|
* tzlocal_ to reliably get local timezone.
|
|
264
277
|
* ruamel.yaml_ (optional) for operations on language files.
|
|
265
278
|
|
|
266
279
|
.. _dateutil: https://pypi.python.org/pypi/python-dateutil
|
|
267
280
|
.. _convertdate: https://pypi.python.org/pypi/convertdate
|
|
268
|
-
..
|
|
281
|
+
.. _hijridate: https://pypi.python.org/pypi/hijridate
|
|
269
282
|
.. _tzlocal: https://pypi.python.org/pypi/tzlocal
|
|
270
283
|
.. _ruamel.yaml: https://pypi.python.org/pypi/ruamel.yaml
|
|
271
284
|
|
|
@@ -297,7 +310,7 @@ To be able to use them you need to install the `calendar` extra by typing:
|
|
|
297
310
|
>>> HijriCalendar('17-01-1437 هـ 08:30 مساءً').get_date()
|
|
298
311
|
DateData(date_obj=datetime.datetime(2015, 10, 30, 20, 30), period='day', locale=None)
|
|
299
312
|
|
|
300
|
-
.. note:: `HijriCalendar` only works with Python ≥ 3.
|
|
313
|
+
.. note:: `HijriCalendar` only works with Python ≥ 3.7.
|
|
301
314
|
|
|
302
315
|
|
|
303
316
|
.. :changelog:
|
|
@@ -305,6 +318,30 @@ To be able to use them you need to install the `calendar` extra by typing:
|
|
|
305
318
|
History
|
|
306
319
|
=======
|
|
307
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
|
+
|
|
308
345
|
1.2.0 (2023-11-17)
|
|
309
346
|
------------------
|
|
310
347
|
|
|
@@ -4,7 +4,7 @@ HISTORY.rst
|
|
|
4
4
|
LICENSE
|
|
5
5
|
MANIFEST.in
|
|
6
6
|
README.rst
|
|
7
|
-
|
|
7
|
+
pyproject.toml
|
|
8
8
|
setup.py
|
|
9
9
|
dateparser/__init__.py
|
|
10
10
|
dateparser/conf.py
|
|
@@ -281,7 +281,6 @@ docs/supported_locales.rst
|
|
|
281
281
|
docs/template.rst
|
|
282
282
|
docs/usage.rst
|
|
283
283
|
tests/__init__.py
|
|
284
|
-
tests/requirements.txt
|
|
285
284
|
tests/test_clean_api.py
|
|
286
285
|
tests/test_data.py
|
|
287
286
|
tests/test_date.py
|