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.
Files changed (307) hide show
  1. {dateparser-1.3.0 → dateparser-1.4.0}/CONTRIBUTING.rst +1 -14
  2. {dateparser-1.3.0 → dateparser-1.4.0}/HISTORY.rst +30 -0
  3. {dateparser-1.3.0 → dateparser-1.4.0}/MANIFEST.in +0 -1
  4. {dateparser-1.3.0 → dateparser-1.4.0}/PKG-INFO +31 -1
  5. {dateparser-1.3.0 → dateparser-1.4.0}/README.rst +2 -2
  6. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/__init__.py +1 -1
  7. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/conf.py +3 -1
  8. dateparser-1.4.0/dateparser/data/date_translation_data/bs-Cyrl.py +294 -0
  9. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/en.py +6 -2
  10. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/languages_info.py +1 -0
  11. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/date.py +39 -17
  12. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/dictionary.py +10 -2
  13. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/locale.py +9 -1
  14. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/timezone_parser.py +4 -47
  15. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/PKG-INFO +31 -1
  16. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/SOURCES.txt +0 -1
  17. {dateparser-1.3.0 → dateparser-1.4.0}/docs/installation.rst +1 -1
  18. {dateparser-1.3.0 → dateparser-1.4.0}/docs/supported_locales.rst +1 -1
  19. {dateparser-1.3.0 → dateparser-1.4.0}/pyproject.toml +6 -1
  20. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_clean_api.py +47 -0
  21. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_date_parser.py +86 -0
  22. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_freshness_date_parser.py +16 -0
  23. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_languages.py +55 -0
  24. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_loading.py +50 -0
  25. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_search.py +1 -1
  26. dateparser-1.3.0/dateparser/data/date_translation_data/bs-Cyrl.py +0 -226
  27. dateparser-1.3.0/dateparser/data/dateparser_tz_cache.pkl +0 -0
  28. {dateparser-1.3.0 → dateparser-1.4.0}/AUTHORS.rst +0 -0
  29. {dateparser-1.3.0 → dateparser-1.4.0}/LICENSE +0 -0
  30. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/__init__.py +0 -0
  31. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/hijri.py +0 -0
  32. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/hijri_parser.py +0 -0
  33. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/jalali.py +0 -0
  34. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/calendars/jalali_parser.py +0 -0
  35. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/custom_language_detection/__init__.py +0 -0
  36. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/custom_language_detection/fasttext.py +0 -0
  37. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/custom_language_detection/langdetect.py +0 -0
  38. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/custom_language_detection/language_mapping.py +0 -0
  39. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/__init__.py +0 -0
  40. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/__init__.py +0 -0
  41. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/af.py +0 -0
  42. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/agq.py +0 -0
  43. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ak.py +0 -0
  44. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/am.py +0 -0
  45. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ar.py +0 -0
  46. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/as.py +0 -0
  47. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/asa.py +0 -0
  48. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ast.py +0 -0
  49. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/az-Cyrl.py +0 -0
  50. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/az-Latn.py +0 -0
  51. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/az.py +0 -0
  52. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bas.py +0 -0
  53. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/be.py +0 -0
  54. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bem.py +0 -0
  55. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bez.py +0 -0
  56. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bg.py +0 -0
  57. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bm.py +0 -0
  58. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bn.py +0 -0
  59. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bo.py +0 -0
  60. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/br.py +0 -0
  61. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/brx.py +0 -0
  62. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bs-Latn.py +0 -0
  63. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/bs.py +0 -0
  64. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ca.py +0 -0
  65. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ce.py +0 -0
  66. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/cgg.py +0 -0
  67. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/chr.py +0 -0
  68. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ckb.py +0 -0
  69. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/cs.py +0 -0
  70. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/cy.py +0 -0
  71. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/da.py +0 -0
  72. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dav.py +0 -0
  73. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/de.py +0 -0
  74. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dje.py +0 -0
  75. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dsb.py +0 -0
  76. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dua.py +0 -0
  77. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dyo.py +0 -0
  78. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/dz.py +0 -0
  79. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ebu.py +0 -0
  80. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ee.py +0 -0
  81. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/el.py +0 -0
  82. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/eo.py +0 -0
  83. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/es.py +0 -0
  84. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/et.py +0 -0
  85. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/eu.py +0 -0
  86. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ewo.py +0 -0
  87. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fa.py +0 -0
  88. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ff.py +0 -0
  89. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fi.py +0 -0
  90. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fil.py +0 -0
  91. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fo.py +0 -0
  92. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fr.py +0 -0
  93. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fur.py +0 -0
  94. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/fy.py +0 -0
  95. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ga.py +0 -0
  96. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gd.py +0 -0
  97. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gl.py +0 -0
  98. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gsw.py +0 -0
  99. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gu.py +0 -0
  100. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/guz.py +0 -0
  101. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/gv.py +0 -0
  102. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ha.py +0 -0
  103. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/haw.py +0 -0
  104. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/he.py +0 -0
  105. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hi.py +0 -0
  106. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hr.py +0 -0
  107. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hsb.py +0 -0
  108. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hu.py +0 -0
  109. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/hy.py +0 -0
  110. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/id.py +0 -0
  111. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ig.py +0 -0
  112. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ii.py +0 -0
  113. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/is.py +0 -0
  114. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/it.py +0 -0
  115. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ja.py +0 -0
  116. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/jgo.py +0 -0
  117. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/jmc.py +0 -0
  118. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ka.py +0 -0
  119. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kab.py +0 -0
  120. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kam.py +0 -0
  121. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kde.py +0 -0
  122. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kea.py +0 -0
  123. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/khq.py +0 -0
  124. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ki.py +0 -0
  125. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kk.py +0 -0
  126. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kl.py +0 -0
  127. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kln.py +0 -0
  128. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/km.py +0 -0
  129. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kn.py +0 -0
  130. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ko.py +0 -0
  131. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kok.py +0 -0
  132. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ks.py +0 -0
  133. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ksb.py +0 -0
  134. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ksf.py +0 -0
  135. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ksh.py +0 -0
  136. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/kw.py +0 -0
  137. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ky.py +0 -0
  138. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lag.py +0 -0
  139. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lb.py +0 -0
  140. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lg.py +0 -0
  141. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lkt.py +0 -0
  142. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ln.py +0 -0
  143. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lo.py +0 -0
  144. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lrc.py +0 -0
  145. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lt.py +0 -0
  146. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lu.py +0 -0
  147. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/luo.py +0 -0
  148. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/luy.py +0 -0
  149. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/lv.py +0 -0
  150. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mas.py +0 -0
  151. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mer.py +0 -0
  152. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mfe.py +0 -0
  153. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mg.py +0 -0
  154. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mgh.py +0 -0
  155. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mgo.py +0 -0
  156. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mk.py +0 -0
  157. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ml.py +0 -0
  158. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mn.py +0 -0
  159. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mr.py +0 -0
  160. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ms.py +0 -0
  161. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mt.py +0 -0
  162. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mua.py +0 -0
  163. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/my.py +0 -0
  164. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/mzn.py +0 -0
  165. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/naq.py +0 -0
  166. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nb.py +0 -0
  167. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nd.py +0 -0
  168. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ne.py +0 -0
  169. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nl.py +0 -0
  170. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nmg.py +0 -0
  171. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nn.py +0 -0
  172. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nnh.py +0 -0
  173. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nus.py +0 -0
  174. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/nyn.py +0 -0
  175. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/om.py +0 -0
  176. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/or.py +0 -0
  177. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/os.py +0 -0
  178. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pa-Arab.py +0 -0
  179. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pa-Guru.py +0 -0
  180. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pa.py +0 -0
  181. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pl.py +0 -0
  182. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ps.py +0 -0
  183. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/pt.py +0 -0
  184. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/qu.py +0 -0
  185. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rm.py +0 -0
  186. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rn.py +0 -0
  187. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ro.py +0 -0
  188. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rof.py +0 -0
  189. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ru.py +0 -0
  190. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rw.py +0 -0
  191. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/rwk.py +0 -0
  192. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sah.py +0 -0
  193. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/saq.py +0 -0
  194. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sbp.py +0 -0
  195. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/se.py +0 -0
  196. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/seh.py +0 -0
  197. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ses.py +0 -0
  198. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sg.py +0 -0
  199. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/shi-Latn.py +0 -0
  200. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/shi-Tfng.py +0 -0
  201. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/shi.py +0 -0
  202. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/si.py +0 -0
  203. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sk.py +0 -0
  204. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sl.py +0 -0
  205. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/smn.py +0 -0
  206. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sn.py +0 -0
  207. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/so.py +0 -0
  208. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sq.py +0 -0
  209. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sr-Cyrl.py +0 -0
  210. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sr-Latn.py +0 -0
  211. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sr.py +0 -0
  212. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sv.py +0 -0
  213. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/sw.py +0 -0
  214. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ta.py +0 -0
  215. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/te.py +0 -0
  216. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/teo.py +0 -0
  217. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/th.py +0 -0
  218. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ti.py +0 -0
  219. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/tl.py +0 -0
  220. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/to.py +0 -0
  221. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/tr.py +0 -0
  222. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/twq.py +0 -0
  223. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/tzm.py +0 -0
  224. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ug.py +0 -0
  225. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uk.py +0 -0
  226. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/ur.py +0 -0
  227. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uz-Arab.py +0 -0
  228. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uz-Cyrl.py +0 -0
  229. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uz-Latn.py +0 -0
  230. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/uz.py +0 -0
  231. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/vi.py +0 -0
  232. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/vun.py +0 -0
  233. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/wae.py +0 -0
  234. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/xog.py +0 -0
  235. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/yav.py +0 -0
  236. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/yi.py +0 -0
  237. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/yo.py +0 -0
  238. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/yue.py +0 -0
  239. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zgh.py +0 -0
  240. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zh-Hans.py +0 -0
  241. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zh-Hant.py +0 -0
  242. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zh.py +0 -0
  243. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/data/date_translation_data/zu.py +0 -0
  244. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/date_parser.py +0 -0
  245. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/freshness_date_parser.py +0 -0
  246. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/__init__.py +0 -0
  247. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/loader.py +0 -0
  248. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/languages/validation.py +0 -0
  249. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/parser.py +0 -0
  250. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/search/__init__.py +0 -0
  251. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/search/detection.py +0 -0
  252. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/search/search.py +0 -0
  253. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/search/text_detection.py +0 -0
  254. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/timezones.py +0 -0
  255. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/utils/__init__.py +0 -0
  256. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/utils/strptime.py +0 -0
  257. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser/utils/time_spans.py +0 -0
  258. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/dependency_links.txt +0 -0
  259. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/entry_points.txt +0 -0
  260. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/not-zip-safe +0 -0
  261. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/requires.txt +0 -0
  262. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser.egg-info/top_level.txt +0 -0
  263. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/__init__.py +0 -0
  264. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/cli.py +0 -0
  265. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/exceptions.py +0 -0
  266. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/fasttext_manager.py +0 -0
  267. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_cli/utils.py +0 -0
  268. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_data/__init__.py +0 -0
  269. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_data/settings.py +0 -0
  270. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/__init__.py +0 -0
  271. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/get_cldr_data.py +0 -0
  272. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/order_languages.py +0 -0
  273. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/update_supported_languages_and_locales.py +0 -0
  274. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/utils.py +0 -0
  275. {dateparser-1.3.0 → dateparser-1.4.0}/dateparser_scripts/write_complete_data.py +0 -0
  276. {dateparser-1.3.0 → dateparser-1.4.0}/docs/Makefile +0 -0
  277. {dateparser-1.3.0 → dateparser-1.4.0}/docs/authors.rst +0 -0
  278. {dateparser-1.3.0 → dateparser-1.4.0}/docs/conf.py +0 -0
  279. {dateparser-1.3.0 → dateparser-1.4.0}/docs/contributing.rst +0 -0
  280. {dateparser-1.3.0 → dateparser-1.4.0}/docs/custom_language_detection.rst +0 -0
  281. {dateparser-1.3.0 → dateparser-1.4.0}/docs/dateparser.calendars.rst +0 -0
  282. {dateparser-1.3.0 → dateparser-1.4.0}/docs/dateparser.languages.rst +0 -0
  283. {dateparser-1.3.0 → dateparser-1.4.0}/docs/dateparser.rst +0 -0
  284. {dateparser-1.3.0 → dateparser-1.4.0}/docs/history.rst +0 -0
  285. {dateparser-1.3.0 → dateparser-1.4.0}/docs/index.rst +0 -0
  286. {dateparser-1.3.0 → dateparser-1.4.0}/docs/introduction.rst +0 -0
  287. {dateparser-1.3.0 → dateparser-1.4.0}/docs/make.bat +0 -0
  288. {dateparser-1.3.0 → dateparser-1.4.0}/docs/modules.rst +0 -0
  289. {dateparser-1.3.0 → dateparser-1.4.0}/docs/settings.rst +0 -0
  290. {dateparser-1.3.0 → dateparser-1.4.0}/docs/template.rst +0 -0
  291. {dateparser-1.3.0 → dateparser-1.4.0}/docs/usage.rst +0 -0
  292. {dateparser-1.3.0 → dateparser-1.4.0}/setup.cfg +0 -0
  293. {dateparser-1.3.0 → dateparser-1.4.0}/setup.py +0 -0
  294. {dateparser-1.3.0 → dateparser-1.4.0}/tests/__init__.py +0 -0
  295. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_data.py +0 -0
  296. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_date.py +0 -0
  297. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_date_data.py +0 -0
  298. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_dateparser_data_integrity.py +0 -0
  299. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_hijri.py +0 -0
  300. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_jalali.py +0 -0
  301. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_language_detect.py +0 -0
  302. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_parser.py +0 -0
  303. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_pickle.py +0 -0
  304. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_settings.py +0 -0
  305. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_timezone_parser.py +0 -0
  306. {dateparser-1.3.0 → dateparser-1.4.0}/tests/test_utils.py +0 -0
  307. {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
- $ python setup.py develop
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
 
@@ -3,7 +3,6 @@ include CONTRIBUTING.rst
3
3
  include HISTORY.rst
4
4
  include LICENSE
5
5
  include README.rst
6
- include dateparser/data/dateparser_tz_cache.pkl
7
6
  include dateparser_data/settings.py
8
7
  include requirements.txt
9
8
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dateparser
3
- Version: 1.3.0
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="https://raw.githubusercontent.com/scrapinghub/dateparser/master/artwork/dateparser-logo.png" alt="Dateparser" width="500">
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.netlify.app/>`__!
67
+ it quickly by visiting `this online demo <https://gnyman.github.io/dateparser-demo-app/>`__!
68
68
 
69
69
 
70
70
 
@@ -1,4 +1,4 @@
1
- __version__ = "1.3.0"
1
+ __version__ = "1.4.0"
2
2
 
3
3
  from .conf import apply_settings
4
4
  from .date import DateDataParser
@@ -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("".join(keys).encode("utf-8")).hexdigest()
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
- "(?<=from\\s+)now": "in"
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*) (decade|year|month|week|day|hour|minute|second)s? later": "in \\1 \\2"
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"
@@ -496,6 +496,7 @@ language_locale_dict = {
496
496
  "en-TZ",
497
497
  "en-UG",
498
498
  "en-UM",
499
+ "en-US",
499
500
  "en-VC",
500
501
  "en-VG",
501
502
  "en-VI",
@@ -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
- _order = self._settings.DATE_ORDER
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
- if self._settings.PREFER_LOCALE_DATE_ORDER:
281
- if "DATE_ORDER" not in self._settings._mod_settings:
282
- self._settings.DATE_ORDER = self.locale.info.get(
283
- "date_order", _order
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
- date_obj, period = date_parser.parse(
286
- self._get_translated_date(),
287
- parse_method=parse_method,
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", "False")
105
- self._no_word_spacing = bool(eval(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 = eval(self.info.get("no_word_spacing", "False"))
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)