1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4
5 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
6 # include "pycore_gc.h" // PyGC_Head
7 # include "pycore_runtime.h" // _Py_ID()
8 #endif
9
10
11 PyDoc_STRVAR(zoneinfo_ZoneInfo_from_file__doc__,
12 "from_file($type, file_obj, /, key=None)\n"
13 "--\n"
14 "\n"
15 "Create a ZoneInfo file from a file object.");
16
17 #define ZONEINFO_ZONEINFO_FROM_FILE_METHODDEF \
18 {"from_file", _PyCFunction_CAST(zoneinfo_ZoneInfo_from_file), METH_METHOD|METH_FASTCALL|METH_KEYWORDS|METH_CLASS, zoneinfo_ZoneInfo_from_file__doc__},
19
20 static PyObject *
21 zoneinfo_ZoneInfo_from_file_impl(PyTypeObject *type, PyTypeObject *cls,
22 PyObject *file_obj, PyObject *key);
23
24 static PyObject *
25 zoneinfo_ZoneInfo_from_file(PyTypeObject *type, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
26 {
27 PyObject *return_value = NULL;
28 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
29
30 #define NUM_KEYWORDS 1
31 static struct {
32 PyGC_Head _this_is_not_used;
33 PyObject_VAR_HEAD
34 PyObject *ob_item[NUM_KEYWORDS];
35 } _kwtuple = {
36 .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
37 .ob_item = { &_Py_ID(key), },
38 };
39 #undef NUM_KEYWORDS
40 #define KWTUPLE (&_kwtuple.ob_base.ob_base)
41
42 #else // !Py_BUILD_CORE
43 # define KWTUPLE NULL
44 #endif // !Py_BUILD_CORE
45
46 static const char * const _keywords[] = {"", "key", NULL};
47 static _PyArg_Parser _parser = {
48 .keywords = _keywords,
49 .fname = "from_file",
50 .kwtuple = KWTUPLE,
51 };
52 #undef KWTUPLE
53 PyObject *argsbuf[2];
54 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
55 PyObject *file_obj;
56 PyObject *key = Py_None;
57
58 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
59 if (!args) {
60 goto exit;
61 }
62 file_obj = args[0];
63 if (!noptargs) {
64 goto skip_optional_pos;
65 }
66 key = args[1];
67 skip_optional_pos:
68 return_value = zoneinfo_ZoneInfo_from_file_impl(type, cls, file_obj, key);
69
70 exit:
71 return return_value;
72 }
73
74 PyDoc_STRVAR(zoneinfo_ZoneInfo_no_cache__doc__,
75 "no_cache($type, /, key)\n"
76 "--\n"
77 "\n"
78 "Get a new instance of ZoneInfo, bypassing the cache.");
79
80 #define ZONEINFO_ZONEINFO_NO_CACHE_METHODDEF \
81 {"no_cache", _PyCFunction_CAST(zoneinfo_ZoneInfo_no_cache), METH_METHOD|METH_FASTCALL|METH_KEYWORDS|METH_CLASS, zoneinfo_ZoneInfo_no_cache__doc__},
82
83 static PyObject *
84 zoneinfo_ZoneInfo_no_cache_impl(PyTypeObject *type, PyTypeObject *cls,
85 PyObject *key);
86
87 static PyObject *
88 zoneinfo_ZoneInfo_no_cache(PyTypeObject *type, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
89 {
90 PyObject *return_value = NULL;
91 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
92
93 #define NUM_KEYWORDS 1
94 static struct {
95 PyGC_Head _this_is_not_used;
96 PyObject_VAR_HEAD
97 PyObject *ob_item[NUM_KEYWORDS];
98 } _kwtuple = {
99 .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
100 .ob_item = { &_Py_ID(key), },
101 };
102 #undef NUM_KEYWORDS
103 #define KWTUPLE (&_kwtuple.ob_base.ob_base)
104
105 #else // !Py_BUILD_CORE
106 # define KWTUPLE NULL
107 #endif // !Py_BUILD_CORE
108
109 static const char * const _keywords[] = {"key", NULL};
110 static _PyArg_Parser _parser = {
111 .keywords = _keywords,
112 .fname = "no_cache",
113 .kwtuple = KWTUPLE,
114 };
115 #undef KWTUPLE
116 PyObject *argsbuf[1];
117 PyObject *key;
118
119 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
120 if (!args) {
121 goto exit;
122 }
123 key = args[0];
124 return_value = zoneinfo_ZoneInfo_no_cache_impl(type, cls, key);
125
126 exit:
127 return return_value;
128 }
129
130 PyDoc_STRVAR(zoneinfo_ZoneInfo_clear_cache__doc__,
131 "clear_cache($type, /, *, only_keys=None)\n"
132 "--\n"
133 "\n"
134 "Clear the ZoneInfo cache.");
135
136 #define ZONEINFO_ZONEINFO_CLEAR_CACHE_METHODDEF \
137 {"clear_cache", _PyCFunction_CAST(zoneinfo_ZoneInfo_clear_cache), METH_METHOD|METH_FASTCALL|METH_KEYWORDS|METH_CLASS, zoneinfo_ZoneInfo_clear_cache__doc__},
138
139 static PyObject *
140 zoneinfo_ZoneInfo_clear_cache_impl(PyTypeObject *type, PyTypeObject *cls,
141 PyObject *only_keys);
142
143 static PyObject *
144 zoneinfo_ZoneInfo_clear_cache(PyTypeObject *type, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
145 {
146 PyObject *return_value = NULL;
147 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
148
149 #define NUM_KEYWORDS 1
150 static struct {
151 PyGC_Head _this_is_not_used;
152 PyObject_VAR_HEAD
153 PyObject *ob_item[NUM_KEYWORDS];
154 } _kwtuple = {
155 .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
156 .ob_item = { &_Py_ID(only_keys), },
157 };
158 #undef NUM_KEYWORDS
159 #define KWTUPLE (&_kwtuple.ob_base.ob_base)
160
161 #else // !Py_BUILD_CORE
162 # define KWTUPLE NULL
163 #endif // !Py_BUILD_CORE
164
165 static const char * const _keywords[] = {"only_keys", NULL};
166 static _PyArg_Parser _parser = {
167 .keywords = _keywords,
168 .fname = "clear_cache",
169 .kwtuple = KWTUPLE,
170 };
171 #undef KWTUPLE
172 PyObject *argsbuf[1];
173 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
174 PyObject *only_keys = Py_None;
175
176 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
177 if (!args) {
178 goto exit;
179 }
180 if (!noptargs) {
181 goto skip_optional_kwonly;
182 }
183 only_keys = args[0];
184 skip_optional_kwonly:
185 return_value = zoneinfo_ZoneInfo_clear_cache_impl(type, cls, only_keys);
186
187 exit:
188 return return_value;
189 }
190
191 PyDoc_STRVAR(zoneinfo_ZoneInfo_utcoffset__doc__,
192 "utcoffset($self, dt, /)\n"
193 "--\n"
194 "\n"
195 "Retrieve a timedelta representing the UTC offset in a zone at the given datetime.");
196
197 #define ZONEINFO_ZONEINFO_UTCOFFSET_METHODDEF \
198 {"utcoffset", _PyCFunction_CAST(zoneinfo_ZoneInfo_utcoffset), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, zoneinfo_ZoneInfo_utcoffset__doc__},
199
200 static PyObject *
201 zoneinfo_ZoneInfo_utcoffset_impl(PyObject *self, PyTypeObject *cls,
202 PyObject *dt);
203
204 static PyObject *
205 zoneinfo_ZoneInfo_utcoffset(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
206 {
207 PyObject *return_value = NULL;
208 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
209 # define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
210 #else
211 # define KWTUPLE NULL
212 #endif
213
214 static const char * const _keywords[] = {"", NULL};
215 static _PyArg_Parser _parser = {
216 .keywords = _keywords,
217 .fname = "utcoffset",
218 .kwtuple = KWTUPLE,
219 };
220 #undef KWTUPLE
221 PyObject *argsbuf[1];
222 PyObject *dt;
223
224 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
225 if (!args) {
226 goto exit;
227 }
228 dt = args[0];
229 return_value = zoneinfo_ZoneInfo_utcoffset_impl(self, cls, dt);
230
231 exit:
232 return return_value;
233 }
234
235 PyDoc_STRVAR(zoneinfo_ZoneInfo_dst__doc__,
236 "dst($self, dt, /)\n"
237 "--\n"
238 "\n"
239 "Retrieve a timedelta representing the amount of DST applied in a zone at the given datetime.");
240
241 #define ZONEINFO_ZONEINFO_DST_METHODDEF \
242 {"dst", _PyCFunction_CAST(zoneinfo_ZoneInfo_dst), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, zoneinfo_ZoneInfo_dst__doc__},
243
244 static PyObject *
245 zoneinfo_ZoneInfo_dst_impl(PyObject *self, PyTypeObject *cls, PyObject *dt);
246
247 static PyObject *
248 zoneinfo_ZoneInfo_dst(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
249 {
250 PyObject *return_value = NULL;
251 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
252 # define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
253 #else
254 # define KWTUPLE NULL
255 #endif
256
257 static const char * const _keywords[] = {"", NULL};
258 static _PyArg_Parser _parser = {
259 .keywords = _keywords,
260 .fname = "dst",
261 .kwtuple = KWTUPLE,
262 };
263 #undef KWTUPLE
264 PyObject *argsbuf[1];
265 PyObject *dt;
266
267 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
268 if (!args) {
269 goto exit;
270 }
271 dt = args[0];
272 return_value = zoneinfo_ZoneInfo_dst_impl(self, cls, dt);
273
274 exit:
275 return return_value;
276 }
277
278 PyDoc_STRVAR(zoneinfo_ZoneInfo_tzname__doc__,
279 "tzname($self, dt, /)\n"
280 "--\n"
281 "\n"
282 "Retrieve a string containing the abbreviation for the time zone that applies in a zone at a given datetime.");
283
284 #define ZONEINFO_ZONEINFO_TZNAME_METHODDEF \
285 {"tzname", _PyCFunction_CAST(zoneinfo_ZoneInfo_tzname), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, zoneinfo_ZoneInfo_tzname__doc__},
286
287 static PyObject *
288 zoneinfo_ZoneInfo_tzname_impl(PyObject *self, PyTypeObject *cls,
289 PyObject *dt);
290
291 static PyObject *
292 zoneinfo_ZoneInfo_tzname(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
293 {
294 PyObject *return_value = NULL;
295 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
296 # define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
297 #else
298 # define KWTUPLE NULL
299 #endif
300
301 static const char * const _keywords[] = {"", NULL};
302 static _PyArg_Parser _parser = {
303 .keywords = _keywords,
304 .fname = "tzname",
305 .kwtuple = KWTUPLE,
306 };
307 #undef KWTUPLE
308 PyObject *argsbuf[1];
309 PyObject *dt;
310
311 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
312 if (!args) {
313 goto exit;
314 }
315 dt = args[0];
316 return_value = zoneinfo_ZoneInfo_tzname_impl(self, cls, dt);
317
318 exit:
319 return return_value;
320 }
321
322 PyDoc_STRVAR(zoneinfo_ZoneInfo__unpickle__doc__,
323 "_unpickle($type, key, from_cache, /)\n"
324 "--\n"
325 "\n"
326 "Private method used in unpickling.");
327
328 #define ZONEINFO_ZONEINFO__UNPICKLE_METHODDEF \
329 {"_unpickle", _PyCFunction_CAST(zoneinfo_ZoneInfo__unpickle), METH_METHOD|METH_FASTCALL|METH_KEYWORDS|METH_CLASS, zoneinfo_ZoneInfo__unpickle__doc__},
330
331 static PyObject *
332 zoneinfo_ZoneInfo__unpickle_impl(PyTypeObject *type, PyTypeObject *cls,
333 PyObject *key, unsigned char from_cache);
334
335 static PyObject *
336 zoneinfo_ZoneInfo__unpickle(PyTypeObject *type, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
337 {
338 PyObject *return_value = NULL;
339 #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
340 # define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
341 #else
342 # define KWTUPLE NULL
343 #endif
344
345 static const char * const _keywords[] = {"", "", NULL};
346 static _PyArg_Parser _parser = {
347 .keywords = _keywords,
348 .fname = "_unpickle",
349 .kwtuple = KWTUPLE,
350 };
351 #undef KWTUPLE
352 PyObject *argsbuf[2];
353 PyObject *key;
354 unsigned char from_cache;
355
356 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
357 if (!args) {
358 goto exit;
359 }
360 key = args[0];
361 {
362 unsigned long ival = PyLong_AsUnsignedLongMask(args[1]);
363 if (ival == (unsigned long)-1 && PyErr_Occurred()) {
364 goto exit;
365 }
366 else {
367 from_cache = (unsigned char) ival;
368 }
369 }
370 return_value = zoneinfo_ZoneInfo__unpickle_impl(type, cls, key, from_cache);
371
372 exit:
373 return return_value;
374 }
375 /*[clinic end generated code: output=54051388dfc408af input=a9049054013a1b77]*/