Пример #1
0
    def parse_to_datetime(self,
                          *,
                          datetime_string: str,
                          timezone=pytz.UTC) -> typing.Tuple[str, dt.datetime]:

        settings = self.dateparser_settings.copy()
        if not timezone.zone == 'UTC':
            settings['TO_TIMEZONE'] = timezone.zone

        search = dateparser.search.search_dates(datetime_string,
                                                languages=['en'],
                                                settings=settings)

        if not search:

            search = ctparse.ctparse(datetime_string)

            if not search or not isinstance(search.resolution,
                                            ctparse.types.Time):
                raise exceptions.ArgumentError(
                    'I was not able to find a valid datetime within that query.'
                )

            return datetime_string, timezone.localize(search.resolution.dt)

        if len(search) > 1:
            raise exceptions.ArgumentError(
                'Two or more datetimes were detected within that query.')

        return search[0][0], search[0][1]
Пример #2
0
                    action="store_true")
parser.add_argument(
    "--book",
    help=
    "automatically book the appointment without allowing the user to correct the form(risky).",
    action="store_true")
parser.add_argument("--login", action="store_true")
args = parser.parse_args()

from ctparse import ctparse
from datetime import datetime
ts = datetime.now()
if (args.login):
    first_name = input('What is your first name: ')
    last_name = input('What is your last name: ')
appt_time = ctparse(
    input('Enter the time you want the appointment to be made: '), ts=ts)
appt_time = datetime(year=appt_time.resolution.year,
                     month=appt_time.resolution.month,
                     day=appt_time.resolution.day,
                     minute=appt_time.resolution.minute,
                     hour=appt_time.resolution.hour)
while (datetime.now() < appt_time):
    pass
driver = webdriver.Firefox()
driver.get(
    "https://www.walmart.com/pharmacy/clinical-services/immunization/scheduled?imzType=covid&r=yes"
)
if (not args.login):
    try:

        #assert "Python" in driver.title
Пример #3
0
def get_date(text: str):
    date_result = ctparse(text)
    if date_result and date_result.score > -2000:
        return date_result.resolution.dt
    return None
Пример #4
0
def parse_relative_date(data_to_parse=None):
    """
    Return a ctparse.Time dict and a datetime object for a string of relative date and/or time to parse.

    Parameters
    ----------
    data_to_parse : string
        string with relative time information which should be parsed into absolute datetime object

    Returns
    -------
    dict: date/time data + datetime object

        example_output = {
            'mstart': 0,
            'mend': 8,
            'year': 2019,
            'month': 11,
            'day': 5,
            'hour': 17,
            'minute': 33,
            'DOW': None,
            'POD': None,
            'dt': datetime.datetime(2019, 11, 5, 17, 33)
        }
    """

    string_to_parse = None
    if isinstance(data_to_parse, list):
        string_to_parse = " ".join(data_to_parse)

    elif isinstance(data_to_parse, str):
        string_to_parse = data_to_parse

    if string_to_parse is None:
        logging.warning(
            "Trying to parse date but submitted data is not a string or a list."
        )
        return None

    logging.debug("%s START ctparse %s" % ("*" * 10, "*" * 50))
    parsed_date = ctparse(string_to_parse)
    logging.debug("%s END ctparse %s" % ("*" * 10, "*" * 52))

    if parsed_date is None or parsed_date.resolution is None:
        logging.debug("Unable to parse a date from string: %s" %
                      string_to_parse)
        return None

    data_parts = parsed_date.resolution

    # just do some own additional parsing
    time_string = string_to_parse[data_parts.mstart:data_parts.mend]

    if any(keyword in time_string for keyword in ["lunch", "noon", "mittag"]):
        data_parts.hour = 12

    if "morning" in time_string:
        data_parts.hour = 9

    if "afternoon" in time_string:
        data_parts.hour = 15

    if "evening" in time_string:
        data_parts.hour = 18

    # unable to determine time of the day
    # use current time
    if data_parts.hour is None:
        now = datetime.today()
        data_parts.hour = now.hour
        data_parts.minute = now.minute

    # if minute returned None set to full hour
    if data_parts.minute is None:
        data_parts.minute = 0

    dt = None
    try:
        dt = datetime(year=data_parts.year,
                      month=data_parts.month,
                      day=data_parts.day,
                      hour=data_parts.hour,
                      minute=data_parts.minute)
    except TypeError:
        pass

    if data_parts:
        logging.debug(
            "Parsed date from string (%s): %s" %
            (string_to_parse[data_parts.mstart:data_parts.mend], parsed_date))
    else:
        logging.debug("Unable to parse a date from string: %s" %
                      string_to_parse)

    return_data = data_parts.__dict__
    return_data["dt"] = dt

    return return_data
Пример #5
0
def test_military_time():
    result = ctparse.ctparse("3 March 2020", ts=datetime(2020, 2, 25))
    assert result
    assert str(result.resolution) == "2020-03-03 X:X (X/X)"
Пример #6
0
def test_parse_years_ahead():
    result = ctparse.ctparse("3 March 2023", ts=datetime(2020, 2, 25))
    assert result
    assert str(result.resolution) == "2023-03-03 X:X (X/X)"