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.
Files changed (308) hide show
  1. {dateparser-1.2.0 → dateparser-1.2.1}/HISTORY.rst +24 -0
  2. {dateparser-1.2.0 → dateparser-1.2.1}/PKG-INFO +53 -16
  3. {dateparser-1.2.0 → dateparser-1.2.1}/README.rst +6 -6
  4. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/__init__.py +1 -1
  5. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/__init__.py +5 -0
  6. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/hijri_parser.py +10 -6
  7. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/jalali_parser.py +6 -0
  8. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/conf.py +1 -1
  9. dateparser-1.2.1/dateparser/data/__init__.py +2 -0
  10. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/en.py +1 -1
  11. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/date.py +0 -1
  12. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/freshness_date_parser.py +2 -5
  13. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/dictionary.py +27 -19
  14. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/parser.py +22 -20
  15. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/timezone_parser.py +2 -3
  16. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/PKG-INFO +53 -16
  17. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/SOURCES.txt +1 -2
  18. dateparser-1.2.1/dateparser.egg-info/requires.txt +15 -0
  19. {dateparser-1.2.0 → dateparser-1.2.1}/docs/custom_language_detection.rst +13 -13
  20. {dateparser-1.2.0 → dateparser-1.2.1}/docs/introduction.rst +3 -3
  21. {dateparser-1.2.0 → dateparser-1.2.1}/docs/settings.rst +2 -2
  22. dateparser-1.2.1/pyproject.toml +20 -0
  23. dateparser-1.2.1/setup.cfg +4 -0
  24. {dateparser-1.2.0 → dateparser-1.2.1}/setup.py +10 -13
  25. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_clean_api.py +81 -0
  26. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_date.py +1 -1
  27. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_date_parser.py +82 -6
  28. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_dateparser_data_integrity.py +4 -0
  29. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_hijri.py +6 -2
  30. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_jalali.py +12 -0
  31. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_language_detect.py +4 -0
  32. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_languages.py +12 -10
  33. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_search.py +18 -6
  34. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_timezone_parser.py +10 -6
  35. dateparser-1.2.0/dateparser/data/__init__.py +0 -3
  36. dateparser-1.2.0/dateparser.egg-info/requires.txt +0 -14
  37. dateparser-1.2.0/setup.cfg +0 -21
  38. dateparser-1.2.0/tests/requirements.txt +0 -4
  39. {dateparser-1.2.0 → dateparser-1.2.1}/AUTHORS.rst +0 -0
  40. {dateparser-1.2.0 → dateparser-1.2.1}/CONTRIBUTING.rst +0 -0
  41. {dateparser-1.2.0 → dateparser-1.2.1}/LICENSE +0 -0
  42. {dateparser-1.2.0 → dateparser-1.2.1}/MANIFEST.in +0 -0
  43. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/hijri.py +0 -0
  44. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/calendars/jalali.py +0 -0
  45. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/custom_language_detection/__init__.py +0 -0
  46. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/custom_language_detection/fasttext.py +0 -0
  47. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/custom_language_detection/langdetect.py +0 -0
  48. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/custom_language_detection/language_mapping.py +0 -0
  49. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/__init__.py +0 -0
  50. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/af.py +0 -0
  51. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/agq.py +0 -0
  52. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ak.py +0 -0
  53. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/am.py +0 -0
  54. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ar.py +0 -0
  55. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/as.py +0 -0
  56. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/asa.py +0 -0
  57. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ast.py +0 -0
  58. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/az-Cyrl.py +0 -0
  59. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/az-Latn.py +0 -0
  60. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/az.py +0 -0
  61. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bas.py +0 -0
  62. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/be.py +0 -0
  63. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bem.py +0 -0
  64. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bez.py +0 -0
  65. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bg.py +0 -0
  66. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bm.py +0 -0
  67. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bn.py +0 -0
  68. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bo.py +0 -0
  69. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/br.py +0 -0
  70. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/brx.py +0 -0
  71. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs-Cyrl.py +0 -0
  72. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs-Latn.py +0 -0
  73. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/bs.py +0 -0
  74. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ca.py +0 -0
  75. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ce.py +0 -0
  76. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/cgg.py +0 -0
  77. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/chr.py +0 -0
  78. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ckb.py +0 -0
  79. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/cs.py +0 -0
  80. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/cy.py +0 -0
  81. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/da.py +0 -0
  82. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dav.py +0 -0
  83. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/de.py +0 -0
  84. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dje.py +0 -0
  85. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dsb.py +0 -0
  86. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dua.py +0 -0
  87. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dyo.py +0 -0
  88. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/dz.py +0 -0
  89. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ebu.py +0 -0
  90. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ee.py +0 -0
  91. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/el.py +0 -0
  92. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/eo.py +0 -0
  93. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/es.py +0 -0
  94. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/et.py +0 -0
  95. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/eu.py +0 -0
  96. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ewo.py +0 -0
  97. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fa.py +0 -0
  98. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ff.py +0 -0
  99. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fi.py +0 -0
  100. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fil.py +0 -0
  101. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fo.py +0 -0
  102. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fr.py +0 -0
  103. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fur.py +0 -0
  104. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/fy.py +0 -0
  105. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ga.py +0 -0
  106. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gd.py +0 -0
  107. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gl.py +0 -0
  108. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gsw.py +0 -0
  109. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gu.py +0 -0
  110. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/guz.py +0 -0
  111. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/gv.py +0 -0
  112. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ha.py +0 -0
  113. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/haw.py +0 -0
  114. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/he.py +0 -0
  115. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hi.py +0 -0
  116. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hr.py +0 -0
  117. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hsb.py +0 -0
  118. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hu.py +0 -0
  119. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/hy.py +0 -0
  120. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/id.py +0 -0
  121. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ig.py +0 -0
  122. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ii.py +0 -0
  123. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/is.py +0 -0
  124. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/it.py +0 -0
  125. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ja.py +0 -0
  126. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/jgo.py +0 -0
  127. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/jmc.py +0 -0
  128. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ka.py +0 -0
  129. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kab.py +0 -0
  130. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kam.py +0 -0
  131. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kde.py +0 -0
  132. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kea.py +0 -0
  133. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/khq.py +0 -0
  134. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ki.py +0 -0
  135. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kk.py +0 -0
  136. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kl.py +0 -0
  137. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kln.py +0 -0
  138. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/km.py +0 -0
  139. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kn.py +0 -0
  140. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ko.py +0 -0
  141. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kok.py +0 -0
  142. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ks.py +0 -0
  143. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksb.py +0 -0
  144. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksf.py +0 -0
  145. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ksh.py +0 -0
  146. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/kw.py +0 -0
  147. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ky.py +0 -0
  148. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lag.py +0 -0
  149. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lb.py +0 -0
  150. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lg.py +0 -0
  151. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lkt.py +0 -0
  152. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ln.py +0 -0
  153. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lo.py +0 -0
  154. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lrc.py +0 -0
  155. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lt.py +0 -0
  156. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lu.py +0 -0
  157. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/luo.py +0 -0
  158. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/luy.py +0 -0
  159. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/lv.py +0 -0
  160. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mas.py +0 -0
  161. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mer.py +0 -0
  162. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mfe.py +0 -0
  163. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mg.py +0 -0
  164. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mgh.py +0 -0
  165. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mgo.py +0 -0
  166. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mk.py +0 -0
  167. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ml.py +0 -0
  168. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mn.py +0 -0
  169. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mr.py +0 -0
  170. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ms.py +0 -0
  171. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mt.py +0 -0
  172. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mua.py +0 -0
  173. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/my.py +0 -0
  174. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/mzn.py +0 -0
  175. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/naq.py +0 -0
  176. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nb.py +0 -0
  177. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nd.py +0 -0
  178. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ne.py +0 -0
  179. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nl.py +0 -0
  180. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nmg.py +0 -0
  181. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nn.py +0 -0
  182. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nnh.py +0 -0
  183. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nus.py +0 -0
  184. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/nyn.py +0 -0
  185. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/om.py +0 -0
  186. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/or.py +0 -0
  187. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/os.py +0 -0
  188. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa-Arab.py +0 -0
  189. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa-Guru.py +0 -0
  190. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pa.py +0 -0
  191. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pl.py +0 -0
  192. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ps.py +0 -0
  193. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/pt.py +0 -0
  194. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/qu.py +0 -0
  195. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rm.py +0 -0
  196. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rn.py +0 -0
  197. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ro.py +0 -0
  198. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rof.py +0 -0
  199. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ru.py +0 -0
  200. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rw.py +0 -0
  201. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/rwk.py +0 -0
  202. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sah.py +0 -0
  203. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/saq.py +0 -0
  204. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sbp.py +0 -0
  205. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/se.py +0 -0
  206. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/seh.py +0 -0
  207. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ses.py +0 -0
  208. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sg.py +0 -0
  209. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi-Latn.py +0 -0
  210. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi-Tfng.py +0 -0
  211. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/shi.py +0 -0
  212. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/si.py +0 -0
  213. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sk.py +0 -0
  214. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sl.py +0 -0
  215. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/smn.py +0 -0
  216. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sn.py +0 -0
  217. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/so.py +0 -0
  218. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sq.py +0 -0
  219. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr-Cyrl.py +0 -0
  220. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr-Latn.py +0 -0
  221. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sr.py +0 -0
  222. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sv.py +0 -0
  223. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/sw.py +0 -0
  224. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ta.py +0 -0
  225. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/te.py +0 -0
  226. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/teo.py +0 -0
  227. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/th.py +0 -0
  228. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ti.py +0 -0
  229. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/tl.py +0 -0
  230. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/to.py +0 -0
  231. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/tr.py +0 -0
  232. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/twq.py +0 -0
  233. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/tzm.py +0 -0
  234. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ug.py +0 -0
  235. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uk.py +0 -0
  236. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/ur.py +0 -0
  237. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Arab.py +0 -0
  238. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Cyrl.py +0 -0
  239. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz-Latn.py +0 -0
  240. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/uz.py +0 -0
  241. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/vi.py +0 -0
  242. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/vun.py +0 -0
  243. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/wae.py +0 -0
  244. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/xog.py +0 -0
  245. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/yav.py +0 -0
  246. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/yi.py +0 -0
  247. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/yo.py +0 -0
  248. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/yue.py +0 -0
  249. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zgh.py +0 -0
  250. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh-Hans.py +0 -0
  251. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh-Hant.py +0 -0
  252. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zh.py +0 -0
  253. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/date_translation_data/zu.py +0 -0
  254. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/data/languages_info.py +0 -0
  255. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/date_parser.py +0 -0
  256. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/__init__.py +0 -0
  257. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/loader.py +0 -0
  258. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/locale.py +0 -0
  259. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/languages/validation.py +0 -0
  260. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/search/__init__.py +0 -0
  261. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/search/detection.py +0 -0
  262. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/search/search.py +0 -0
  263. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/search/text_detection.py +0 -0
  264. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/timezones.py +0 -0
  265. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/utils/__init__.py +0 -0
  266. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser/utils/strptime.py +0 -0
  267. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/dependency_links.txt +0 -0
  268. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/entry_points.txt +0 -0
  269. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/not-zip-safe +0 -0
  270. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser.egg-info/top_level.txt +0 -0
  271. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/__init__.py +0 -0
  272. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/cli.py +0 -0
  273. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/exceptions.py +0 -0
  274. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/fasttext_manager.py +0 -0
  275. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_cli/utils.py +0 -0
  276. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_data/__init__.py +0 -0
  277. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_data/settings.py +0 -0
  278. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/__init__.py +0 -0
  279. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/get_cldr_data.py +0 -0
  280. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/order_languages.py +0 -0
  281. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/update_supported_languages_and_locales.py +0 -0
  282. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/utils.py +0 -0
  283. {dateparser-1.2.0 → dateparser-1.2.1}/dateparser_scripts/write_complete_data.py +0 -0
  284. {dateparser-1.2.0 → dateparser-1.2.1}/docs/Makefile +0 -0
  285. {dateparser-1.2.0 → dateparser-1.2.1}/docs/authors.rst +0 -0
  286. {dateparser-1.2.0 → dateparser-1.2.1}/docs/conf.py +2 -2
  287. {dateparser-1.2.0 → dateparser-1.2.1}/docs/contributing.rst +0 -0
  288. {dateparser-1.2.0 → dateparser-1.2.1}/docs/dateparser.calendars.rst +0 -0
  289. {dateparser-1.2.0 → dateparser-1.2.1}/docs/dateparser.languages.rst +0 -0
  290. {dateparser-1.2.0 → dateparser-1.2.1}/docs/dateparser.rst +0 -0
  291. {dateparser-1.2.0 → dateparser-1.2.1}/docs/history.rst +0 -0
  292. {dateparser-1.2.0 → dateparser-1.2.1}/docs/index.rst +0 -0
  293. {dateparser-1.2.0 → dateparser-1.2.1}/docs/installation.rst +0 -0
  294. {dateparser-1.2.0 → dateparser-1.2.1}/docs/make.bat +0 -0
  295. {dateparser-1.2.0 → dateparser-1.2.1}/docs/modules.rst +0 -0
  296. {dateparser-1.2.0 → dateparser-1.2.1}/docs/supported_locales.rst +0 -0
  297. {dateparser-1.2.0 → dateparser-1.2.1}/docs/template.rst +0 -0
  298. {dateparser-1.2.0 → dateparser-1.2.1}/docs/usage.rst +0 -0
  299. {dateparser-1.2.0 → dateparser-1.2.1}/tests/__init__.py +0 -0
  300. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_data.py +0 -0
  301. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_date_data.py +0 -0
  302. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_freshness_date_parser.py +0 -0
  303. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_loading.py +0 -0
  304. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_parser.py +0 -0
  305. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_pickle.py +0 -0
  306. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_settings.py +0 -0
  307. {dateparser-1.2.0 → dateparser-1.2.1}/tests/test_utils.py +0 -0
  308. {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
1
+ Metadata-Version: 2.2
2
2
  Name: dateparser
3
- Version: 1.2.0
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.7
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: hijri-converter; extra == "calendars"
31
- Requires-Dist: convertdate; extra == "calendars"
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
- * hijri-converter_ to convert *Hijri* dates to *Gregorian*.
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
- .. _hijri-converter: https://pypi.python.org/pypi/hijri-converter
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.6.
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/usage.html#settings>`__.
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 it's a valid date and it 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.
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.7. You can install it by doing:
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 with a really different number of purposes,
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 easiest /
194
+ - **Search engine**: allow people to search by date in an easy /
195
195
  natural format.
196
196
  - **Bots**: allow users to interact with a bot easily
197
197
 
@@ -1,4 +1,4 @@
1
- __version__ = "1.2.0"
1
+ __version__ = "1.2.1"
2
2
 
3
3
  from .conf import apply_settings
4
4
  from .date import DateDataParser
@@ -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 hijri_converter import convert
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 = convert.Hijri(
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 = convert.Gregorian(year, month, day).to_hijri()
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 = convert.Hijri(year=year, month=month, day=1)
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
@@ -176,3 +176,9 @@ class jalali_parser(non_gregorian_parser):
176
176
  ):
177
177
  result = result.replace(persian_number, str(number))
178
178
  return result
179
+
180
+ def handle_two_digit_year(self, year):
181
+ if year > 60:
182
+ return year + 1300
183
+ else:
184
+ return year + 1400
@@ -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 setting_type == setting_props["type"]:
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__
@@ -0,0 +1,2 @@
1
+ from dateparser.data import date_translation_data
2
+ from .languages_info import language_order, language_locale_dict
@@ -800,7 +800,7 @@ info = {
800
800
  "(?:12\\s+)?midnight": "00:00"
801
801
  },
802
802
  {
803
- "(\\d+[.,]?\\d*)h(\\d+[.,]?\\d*)m?": "\\1:\\2"
803
+ "(\\d+[.,]?\\d*)h(\\d+[.,]?\\d*)": "\\1:\\2"
804
804
  },
805
805
  {
806
806
  "(?<=from\\s+)now": "in"
@@ -1,5 +1,4 @@
1
1
  import collections
2
- import sys
3
2
  from collections.abc import Set
4
3
  from datetime import datetime, timedelta
5
4
 
@@ -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
- if hasattr(self.get_local_tz(), "localize"):
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
- match = regex.match(string)
190
- if not match:
191
- return (
192
- self._split_by_numerals(string, keep_formatting)
193
- if self._should_capture(string, keep_formatting)
194
- else []
195
- )
196
-
197
- unparsed, known, unknown = match.groups()
198
- splitted = [known] if self._should_capture(known, keep_formatting) else []
199
- if unparsed and self._should_capture(unparsed, keep_formatting):
200
- splitted = self._split_by_numerals(unparsed, keep_formatting) + splitted
201
- if unknown:
202
- splitted.extend(self._split_by_known_words(unknown, keep_formatting))
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.tzinfo is None and dateobj.tzinfo is not None
519
- ), "`self.now` doesn't have `tzinfo`. Review comment in code for details."
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
- except pytz.UnknownTimeZoneError:
567
- tz = None
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.time() < dateobj_time:
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.time() > dateobj_time:
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
- if getattr(self, "_token_month", None) or relative_base_month:
601
+
602
+ if getattr(self, "_token_month", None):
605
603
  return dateobj
606
604
 
607
- dateobj = set_correct_month_from_settings(dateobj, self.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
- # alternate patterns
76
- for replace, replacewith in tz_info.get("replace", []):
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
1
+ Metadata-Version: 2.2
2
2
  Name: dateparser
3
- Version: 1.2.0
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.7
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: hijri-converter; extra == "calendars"
31
- Requires-Dist: convertdate; extra == "calendars"
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
- * hijri-converter_ to convert *Hijri* dates to *Gregorian*.
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
- .. _hijri-converter: https://pypi.python.org/pypi/hijri-converter
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.6.
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
- setup.cfg
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
@@ -0,0 +1,15 @@
1
+ python-dateutil>=2.7.0
2
+ pytz>=2024.2
3
+ regex!=2019.02.19,!=2021.8.27,>=2015.06.24
4
+ tzlocal>=0.2
5
+
6
+ [calendars]
7
+ convertdate>=2.2.1
8
+ hijridate
9
+
10
+ [fasttext]
11
+ fasttext>=0.9.1
12
+ numpy<2,>=1.19.3
13
+
14
+ [langdetect]
15
+ langdetect>=1.0.0