Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
datetime.py170 linesDownload Raw Back to fields
1import datetime2 3from wtforms import widgets4from wtforms.fields.core import Field5from wtforms.utils import clean_datetime_format_for_strptime6 7__all__ = (8    "DateTimeField",9    "DateField",10    "TimeField",11    "MonthField",12    "DateTimeLocalField",13    "WeekField",14)15 16 17class DateTimeField(Field):18    """19    A text field which stores a :class:`datetime.datetime` matching one or20    several formats. If ``format`` is a list, any input value matching any21    format will be accepted, and the first format in the list will be used22    to produce HTML values.23    """24 25    widget = widgets.DateTimeInput()26 27    def __init__(28        self, label=None, validators=None, format="%Y-%m-%d %H:%M:%S", **kwargs29    ):30        super().__init__(label, validators, **kwargs)31        self.format = format if isinstance(format, list) else [format]32        self.strptime_format = clean_datetime_format_for_strptime(self.format)33 34    def _value(self):35        if self.raw_data:36            return " ".join(self.raw_data)37        return self.data and self.data.strftime(self.format[0]) or ""38 39    def process_formdata(self, valuelist):40        if not valuelist:41            return42 43        date_str = " ".join(valuelist)44        for format in self.strptime_format:45            try:46                self.data = datetime.datetime.strptime(date_str, format)47                return48            except ValueError:49                self.data = None50 51        raise ValueError(self.gettext("Not a valid datetime value."))52 53 54class DateField(DateTimeField):55    """56    Same as :class:`~wtforms.fields.DateTimeField`, except stores a57    :class:`datetime.date`.58    """59 60    widget = widgets.DateInput()61 62    def __init__(self, label=None, validators=None, format="%Y-%m-%d", **kwargs):63        super().__init__(label, validators, format, **kwargs)64 65    def process_formdata(self, valuelist):66        if not valuelist:67            return68 69        date_str = " ".join(valuelist)70        for format in self.strptime_format:71            try:72                self.data = datetime.datetime.strptime(date_str, format).date()73                return74            except ValueError:75                self.data = None76 77        raise ValueError(self.gettext("Not a valid date value."))78 79 80class TimeField(DateTimeField):81    """82    Same as :class:`~wtforms.fields.DateTimeField`, except stores a83    :class:`datetime.time`.84    """85 86    widget = widgets.TimeInput()87 88    def __init__(self, label=None, validators=None, format="%H:%M", **kwargs):89        super().__init__(label, validators, format, **kwargs)90 91    def process_formdata(self, valuelist):92        if not valuelist:93            return94 95        time_str = " ".join(valuelist)96        for format in self.strptime_format:97            try:98                self.data = datetime.datetime.strptime(time_str, format).time()99                return100            except ValueError:101                self.data = None102 103        raise ValueError(self.gettext("Not a valid time value."))104 105 106class MonthField(DateField):107    """108    Same as :class:`~wtforms.fields.DateField`, except represents a month,109    stores a :class:`datetime.date` with `day = 1`.110    """111 112    widget = widgets.MonthInput()113 114    def __init__(self, label=None, validators=None, format="%Y-%m", **kwargs):115        super().__init__(label, validators, format, **kwargs)116 117 118class WeekField(DateField):119    """120    Same as :class:`~wtforms.fields.DateField`, except represents a week,121    stores a :class:`datetime.date` of the monday of the given week.122    """123 124    widget = widgets.WeekInput()125 126    def __init__(self, label=None, validators=None, format="%Y-W%W", **kwargs):127        super().__init__(label, validators, format, **kwargs)128 129    def process_formdata(self, valuelist):130        if not valuelist:131            return132 133        time_str = " ".join(valuelist)134        for format in self.strptime_format:135            try:136                if "%w" not in format:137                    # The '%w' week starting day is needed. This defaults it to monday138                    # like ISO 8601 indicates.139                    self.data = datetime.datetime.strptime(140                        f"{time_str}-1", f"{format}-%w"141                    ).date()142                else:143                    self.data = datetime.datetime.strptime(time_str, format).date()144                return145            except ValueError:146                self.data = None147 148        raise ValueError(self.gettext("Not a valid week value."))149 150 151class DateTimeLocalField(DateTimeField):152    """153    Same as :class:`~wtforms.fields.DateTimeField`, but represents an154    ``<input type="datetime-local">``.155    """156 157    widget = widgets.DateTimeLocalInput()158 159    def __init__(self, *args, **kwargs):160        kwargs.setdefault(161            "format",162            [163                "%Y-%m-%d %H:%M:%S",164                "%Y-%m-%dT%H:%M:%S",165                "%Y-%m-%d %H:%M",166                "%Y-%m-%dT%H:%M",167            ],168        )169        super().__init__(*args, **kwargs)170 
codekingpro/portable-devtools · Team Ai