@@ -80,22 +80,21 @@ MP_DEFINE_CONST_FUN_OBJ_1(time_sleep_obj, time_sleep);
80
80
81
81
#if MICROPY_PY_COLLECTIONS
82
82
mp_obj_t struct_time_make_new (const mp_obj_type_t * type , size_t n_args , const mp_obj_t * args , mp_map_t * kw_args ) {
83
- if (n_args != 1 || (kw_args != NULL && kw_args -> used > 0 )) {
84
- return namedtuple_make_new (type , n_args , args , kw_args );
85
- }
86
- if (mp_obj_get_type (args [0 ])-> getiter != mp_obj_tuple_getiter || ((mp_obj_tuple_t * )MP_OBJ_TO_PTR (args [0 ]))-> len != 9 ) {
83
+ mp_arg_check_num (n_args , kw_args , 1 , 1 , false);
84
+ size_t len ;
85
+ mp_obj_t * items ;
86
+ mp_obj_get_array (args [0 ], & len , & items );
87
+ if (len != 9 ) {
87
88
mp_raise_TypeError (translate ("time.struct_time() takes a 9-sequence" ));
88
89
}
89
-
90
- mp_obj_tuple_t * tuple = MP_OBJ_TO_PTR (args [0 ]);
91
- return namedtuple_make_new (type , 9 , tuple -> items , NULL );
90
+ return namedtuple_make_new (type , len , items , NULL );
92
91
}
93
92
94
93
//| class struct_time:
95
- //| def __init__(self, time_tuple: Tuple[int, int, int, int, int, int, int, int, int]) -> None:
96
- //| """Structure used to capture a date and time. Note that it takes a tuple!
94
+ //| def __init__(self, time_tuple: Sequence[ int]) -> None:
95
+ //| """Structure used to capture a date and time. Can be constructed from a `struct_time`, ` tuple`, `list`, or `namedtuple` with 9 elements.
97
96
//|
98
- //| :param tuple time_tuple: Tuple of time info: ``(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)``
97
+ //| :param Sequence time_tuple: Sequence of time info: ``(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)``
99
98
//|
100
99
//| * ``tm_year``: the year, 2017 for example
101
100
//| * ``tm_mon``: the month, range [1, 12]
0 commit comments