dateparser 1.1.8__tar.gz → 1.2.1__tar.gz

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