@@ -80,22 +80,21 @@ MP_DEFINE_CONST_FUN_OBJ_1(time_sleep_obj, time_sleep);
8080
8181#if MICROPY_PY_COLLECTIONS
8282mp_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 ) {
8788 mp_raise_TypeError (translate ("time.struct_time() takes a 9-sequence" ));
8889 }
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 );
9291}
9392
9493//| 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.
9796//|
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)``
9998//|
10099//| * ``tm_year``: the year, 2017 for example
101100//| * ``tm_mon``: the month, range [1, 12]
0 commit comments