| 162 | |
| 163 | |
| 164 | class FixedTimezone(_datetime.tzinfo, PendulumTimezone): |
| 165 | def __init__(self, offset: int, name: str | None = None) -> None: |
| 166 | sign = "-" if offset < 0 else "+" |
| 167 | |
| 168 | minutes = offset / 60 |
| 169 | hour, minute = divmod(abs(int(minutes)), 60) |
| 170 | |
| 171 | if not name: |
| 172 | name = f"{sign}{hour:02d}:{minute:02d}" |
| 173 | |
| 174 | self._name = name |
| 175 | self._offset = offset |
| 176 | self._utcoffset = _datetime.timedelta(seconds=offset) |
| 177 | |
| 178 | def __eq__(self, other: object) -> bool: |
| 179 | return isinstance(other, FixedTimezone) and self._offset == other._offset |
| 180 | |
| 181 | @property |
| 182 | def name(self) -> str: |
| 183 | return self._name |
| 184 | |
| 185 | def convert(self, dt: _DT, raise_on_unknown_times: bool = False) -> _DT: |
| 186 | if dt.tzinfo is None: |
| 187 | return dt.__class__( |
| 188 | dt.year, |
| 189 | dt.month, |
| 190 | dt.day, |
| 191 | dt.hour, |
| 192 | dt.minute, |
| 193 | dt.second, |
| 194 | dt.microsecond, |
| 195 | tzinfo=self, |
| 196 | fold=0, |
| 197 | ) |
| 198 | |
| 199 | return cast("_DT", dt.astimezone(self)) |
| 200 | |
| 201 | def datetime( |
| 202 | self, |
| 203 | year: int, |
| 204 | month: int, |
| 205 | day: int, |
| 206 | hour: int = 0, |
| 207 | minute: int = 0, |
| 208 | second: int = 0, |
| 209 | microsecond: int = 0, |
| 210 | ) -> _datetime.datetime: |
| 211 | return self.convert( |
| 212 | _datetime.datetime( |
| 213 | year, month, day, hour, minute, second, microsecond, fold=1 |
| 214 | ) |
| 215 | ) |
| 216 | |
| 217 | @property |
| 218 | def offset(self) -> int: |
| 219 | return self._offset |
| 220 | |
| 221 | def utcoffset(self, dt: _datetime.datetime | None) -> _datetime.timedelta: |
no outgoing calls
no test coverage detected
searching dependent graphs…