1__version__ = "1.2.0"
2
3from .conf import apply_settings
4from .date import DateDataParser
5
6_default_parser = DateDataParser()
7
8
9@apply_settings
10def 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):
19 """Parse date and time from given date string.
20
21 :param date_string:
22 A string representing date and/or time in a recognizably valid format.
23 :type date_string: str
24
25 :param date_formats:
26 A list of format strings using directives as given
27 `here <https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior>`_.
28 The parser applies formats one by one, taking into account the detected languages/locales.
29 :type date_formats: list
30
31 :param languages:
32 A list of language codes, e.g. ['en', 'es', 'zh-Hant'].
33 If locales are not given, languages and region are used to construct locales for translation.
34 :type languages: list
35
36 :param locales:
37 A list of locale codes, e.g. ['fr-PF', 'qu-EC', 'af-NA'].
38 The parser uses only these locales to translate date string.
39 :type locales: list
40
41 :param region:
42 A region code, e.g. 'IN', '001', 'NE'.
43 If locales are not given, languages and region are used to construct locales for translation.
44 :type region: str
45
46 :param settings:
47 Configure customized behavior using settings defined in :mod:`dateparser.conf.Settings`.
48 :type settings: dict
49
50 :param detect_languages_function:
51 A function for language detection that takes as input a string (the `date_string`) and
52 a `confidence_threshold`, and returns a list of detected language codes.
53 Note: this function is only used if ``languages`` and ``locales`` are not provided.
54 :type detect_languages_function: function
55
56 :return: Returns :class:`datetime <datetime.datetime>` representing parsed date if successful, else returns None
57 :rtype: :class:`datetime <datetime.datetime>`.
58 :raises:
59 ``ValueError``: Unknown Language, ``TypeError``: Languages argument must be a list,
60 ``SettingValidationError``: A provided setting is not valid.
61 """
62 parser = _default_parser
63
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 )
78
79 data = parser.get_date_data(date_string, date_formats)
80
81 if data:
82 return data["date_obj"]