Skip to content

Commit db20e05

Browse files
authored
Merge pull request #5452 from microDev1/patch
Use `mp_arg_validate_type` for keyword args
2 parents 797f0a1 + 1977011 commit db20e05

File tree

13 files changed

+38
-148
lines changed

13 files changed

+38
-148
lines changed

locale/circuitpython.pot

Lines changed: 5 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,6 @@ msgstr ""
103103
msgid "%q length must be >= 1"
104104
msgstr ""
105105

106-
#: shared-bindings/vectorio/Polygon.c
107-
msgid "%q list must be a list"
108-
msgstr ""
109-
110106
#: py/argcheck.c
111107
msgid "%q must <= %d"
112108
msgstr ""
@@ -144,12 +140,12 @@ msgstr ""
144140
msgid "%q must be between %d and %d"
145141
msgstr ""
146142

147-
#: ports/atmel-samd/common-hal/busio/UART.c
148-
msgid "%q must be power of 2"
143+
#: py/argcheck.c
144+
msgid "%q must be of type %q"
149145
msgstr ""
150146

151-
#: py/argcheck.c
152-
msgid "%q must of type %q"
147+
#: ports/atmel-samd/common-hal/busio/UART.c
148+
msgid "%q must be power of 2"
153149
msgstr ""
154150

155151
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
@@ -783,10 +779,6 @@ msgstr ""
783779
msgid "Clock unit in use"
784780
msgstr ""
785781

786-
#: shared-bindings/_pew/PewPew.c
787-
msgid "Column entry must be digitalio.DigitalInOut"
788-
msgstr ""
789-
790782
#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c
791783
#: shared-bindings/paralleldisplay/ParallelBus.c
792784
msgid "Command must be an int between 0 and 255"
@@ -962,36 +954,9 @@ msgstr ""
962954
#: shared-bindings/_bleio/__init__.c shared-bindings/aesio/aes.c
963955
#: shared-bindings/busio/SPI.c shared-bindings/microcontroller/Pin.c
964956
#: shared-bindings/neopixel_write/__init__.c
965-
#: shared-bindings/terminalio/Terminal.c
966957
msgid "Expected a %q"
967958
msgstr ""
968959

969-
#: shared-bindings/_bleio/CharacteristicBuffer.c
970-
#: shared-bindings/_bleio/Descriptor.c shared-bindings/_bleio/PacketBuffer.c
971-
msgid "Expected a Characteristic"
972-
msgstr ""
973-
974-
#: shared-bindings/_bleio/Adapter.c
975-
msgid "Expected a DigitalInOut"
976-
msgstr ""
977-
978-
#: shared-bindings/_bleio/Characteristic.c
979-
msgid "Expected a Service"
980-
msgstr ""
981-
982-
#: shared-bindings/_bleio/Adapter.c
983-
msgid "Expected a UART"
984-
msgstr ""
985-
986-
#: shared-bindings/_bleio/Characteristic.c shared-bindings/_bleio/Descriptor.c
987-
#: shared-bindings/_bleio/Service.c
988-
msgid "Expected a UUID"
989-
msgstr ""
990-
991-
#: shared-bindings/_bleio/Adapter.c
992-
msgid "Expected an Address"
993-
msgstr ""
994-
995960
#: shared-bindings/alarm/__init__.c
996961
msgid "Expected an alarm"
997962
msgstr ""
@@ -2032,10 +1997,6 @@ msgstr ""
20321997
msgid "Right channel unsupported"
20331998
msgstr ""
20341999

2035-
#: shared-bindings/_pew/PewPew.c
2036-
msgid "Row entry must be digitalio.DigitalInOut"
2037-
msgstr ""
2038-
20392000
#: main.c
20402001
msgid "Running in safe mode! Not running saved code.\n"
20412002
msgstr ""
@@ -2671,10 +2632,6 @@ msgstr ""
26712632
msgid "buffer too small for requested bytes"
26722633
msgstr ""
26732634

2674-
#: shared-bindings/_pew/PewPew.c
2675-
msgid "buttons must be digitalio.DigitalInOut"
2676-
msgstr ""
2677-
26782635
#: shared-bindings/adafruit_pixelbuf/PixelBuf.c
26792636
msgid "byteorder is not a string"
26802637
msgstr ""
@@ -3461,7 +3418,7 @@ msgstr ""
34613418
msgid "invalid syntax for number"
34623419
msgstr ""
34633420

3464-
#: py/objexcept.c shared-bindings/traceback/__init__.c
3421+
#: py/objexcept.c
34653422
msgid "invalid traceback"
34663423
msgstr ""
34673424

py/argcheck.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ mp_uint_t mp_arg_validate_length_range(mp_uint_t length, mp_uint_t min, mp_uint_
204204

205205
mp_obj_t mp_arg_validate_type(mp_obj_t obj, const mp_obj_type_t *type, qstr arg_name) {
206206
if (!mp_obj_is_type(obj, type)) {
207-
mp_raise_TypeError_varg(translate("%q must of type %q"), arg_name, type->name);
207+
mp_raise_TypeError_varg(translate("%q must be of type %q"), arg_name, type->name);
208208
}
209209
return obj;
210210
}

shared-bindings/_bleio/Adapter.c

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,10 @@ STATIC mp_obj_t bleio_adapter_make_new(const mp_obj_type_t *type, size_t n_args,
9595
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
9696
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
9797

98-
busio_uart_obj_t *uart = args[ARG_uart].u_obj;
99-
if (!mp_obj_is_type(uart, &busio_uart_type)) {
100-
mp_raise_ValueError(translate("Expected a UART"));
101-
}
98+
busio_uart_obj_t *uart = mp_arg_validate_type(args[ARG_uart].u_obj, &busio_uart_type, MP_QSTR_uart);
10299

103-
digitalio_digitalinout_obj_t *rts = args[ARG_rts].u_obj;
104-
digitalio_digitalinout_obj_t *cts = args[ARG_cts].u_obj;
105-
if (!mp_obj_is_type(rts, &digitalio_digitalinout_type) ||
106-
!mp_obj_is_type(cts, &digitalio_digitalinout_type)) {
107-
mp_raise_ValueError(translate("Expected a DigitalInOut"));
108-
}
100+
digitalio_digitalinout_obj_t *rts = mp_arg_validate_type(args[ARG_rts].u_obj, &digitalio_digitalinout_type, MP_QSTR_rts);
101+
digitalio_digitalinout_obj_t *cts = mp_arg_validate_type(args[ARG_cts].u_obj, &digitalio_digitalinout_type, MP_QSTR_cts);
109102

110103
// Will enable the adapter.
111104
common_hal_bleio_adapter_construct_hci_uart(self, uart, rts, cts);
@@ -257,15 +250,11 @@ STATIC mp_obj_t bleio_adapter_start_advertising(mp_uint_t n_args, const mp_obj_t
257250
mp_raise_bleio_BluetoothError(translate("Cannot have scan responses for extended, connectable advertisements."));
258251
}
259252

260-
bleio_address_obj_t *address = MP_OBJ_TO_PTR(args[ARG_directed_to].u_obj);
253+
const bleio_address_obj_t *address = mp_arg_validate_type(args[ARG_directed_to].u_obj, &bleio_address_type, MP_QSTR_directed_to);
261254
if (address != NULL && !connectable) {
262255
mp_raise_bleio_BluetoothError(translate("Only connectable advertisements can be directed"));
263256
}
264257

265-
if (address != NULL && !mp_obj_is_type(address, &bleio_address_type)) {
266-
mp_raise_TypeError(translate("Expected an Address"));
267-
}
268-
269258
common_hal_bleio_adapter_start_advertising(self, connectable, anonymous, timeout, interval,
270259
&data_bufinfo, &scan_response_bufinfo, args[ARG_tx_power].u_int, address);
271260

@@ -447,11 +436,7 @@ STATIC mp_obj_t bleio_adapter_connect(mp_uint_t n_args, const mp_obj_t *pos_args
447436
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
448437
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
449438

450-
if (!mp_obj_is_type(args[ARG_address].u_obj, &bleio_address_type)) {
451-
mp_raise_TypeError(translate("Expected an Address"));
452-
}
453-
454-
bleio_address_obj_t *address = MP_OBJ_TO_PTR(args[ARG_address].u_obj);
439+
bleio_address_obj_t *address = mp_arg_validate_type(args[ARG_address].u_obj, &bleio_address_type, MP_QSTR_address);
455440
mp_float_t timeout = mp_obj_get_float(args[ARG_timeout].u_obj);
456441

457442
return common_hal_bleio_adapter_connect(self, address, timeout);

shared-bindings/_bleio/Characteristic.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,9 @@ STATIC mp_obj_t bleio_characteristic_add_to_service(size_t n_args, const mp_obj_
9494
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
9595
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
9696

97-
const mp_obj_t service_obj = args[ARG_service].u_obj;
98-
if (!mp_obj_is_type(service_obj, &bleio_service_type)) {
99-
mp_raise_TypeError(translate("Expected a Service"));
100-
}
97+
bleio_service_obj_t *service = mp_arg_validate_type(args[ARG_service].u_obj, &bleio_service_type, MP_QSTR_service);
10198

102-
const mp_obj_t uuid_obj = args[ARG_uuid].u_obj;
103-
if (!mp_obj_is_type(uuid_obj, &bleio_uuid_type)) {
104-
mp_raise_TypeError(translate("Expected a UUID"));
105-
}
99+
bleio_uuid_obj_t *uuid = mp_arg_validate_type(args[ARG_uuid].u_obj, &bleio_uuid_type, MP_QSTR_uuid);
106100

107101
const bleio_characteristic_properties_t properties = args[ARG_properties].u_int;
108102
if (properties & ~CHAR_PROP_ALL) {
@@ -149,7 +143,7 @@ STATIC mp_obj_t bleio_characteristic_add_to_service(size_t n_args, const mp_obj_
149143
// Range checking on max_length arg is done by the common_hal layer, because
150144
// it may vary depending on underlying BLE implementation.
151145
common_hal_bleio_characteristic_construct(
152-
characteristic, MP_OBJ_TO_PTR(service_obj), 0, MP_OBJ_TO_PTR(uuid_obj),
146+
characteristic, service, 0, uuid,
153147
properties, read_perm, write_perm,
154148
max_length, fixed_length, &initial_value_bufinfo,
155149
user_description);

shared-bindings/_bleio/CharacteristicBuffer.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ STATIC mp_obj_t bleio_characteristic_buffer_make_new(const mp_obj_type_t *type,
6868
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
6969
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
7070

71-
const mp_obj_t characteristic = args[ARG_characteristic].u_obj;
71+
bleio_characteristic_obj_t *characteristic = mp_arg_validate_type(args[ARG_characteristic].u_obj, &bleio_characteristic_type, MP_QSTR_characteristic);
7272

7373
mp_float_t timeout = mp_obj_get_float(args[ARG_timeout].u_obj);
7474
if (timeout < 0.0f) {
@@ -80,14 +80,10 @@ STATIC mp_obj_t bleio_characteristic_buffer_make_new(const mp_obj_type_t *type,
8080
mp_raise_ValueError_varg(translate("%q must be >= 1"), MP_QSTR_buffer_size);
8181
}
8282

83-
if (!mp_obj_is_type(characteristic, &bleio_characteristic_type)) {
84-
mp_raise_TypeError(translate("Expected a Characteristic"));
85-
}
86-
8783
bleio_characteristic_buffer_obj_t *self = m_new_obj(bleio_characteristic_buffer_obj_t);
8884
self->base.type = &bleio_characteristic_buffer_type;
8985

90-
common_hal_bleio_characteristic_buffer_construct(self, MP_OBJ_TO_PTR(characteristic), timeout, buffer_size);
86+
common_hal_bleio_characteristic_buffer_construct(self, characteristic, timeout, buffer_size);
9187

9288
return MP_OBJ_FROM_PTR(self);
9389
}

shared-bindings/_bleio/Descriptor.c

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,9 @@ STATIC mp_obj_t bleio_descriptor_add_to_characteristic(size_t n_args, const mp_o
8484
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
8585
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
8686

87-
const mp_obj_t characteristic_obj = args[ARG_characteristic].u_obj;
88-
if (!mp_obj_is_type(characteristic_obj, &bleio_characteristic_type)) {
89-
mp_raise_TypeError(translate("Expected a Characteristic"));
90-
}
87+
bleio_characteristic_obj_t *characteristic = mp_arg_validate_type(args[ARG_characteristic].u_obj, &bleio_characteristic_type, MP_QSTR_characteristic);
9188

92-
const mp_obj_t uuid_obj = args[ARG_uuid].u_obj;
93-
if (!mp_obj_is_type(uuid_obj, &bleio_uuid_type)) {
94-
mp_raise_TypeError(translate("Expected a UUID"));
95-
}
89+
bleio_uuid_obj_t *uuid = mp_arg_validate_type(args[ARG_uuid].u_obj, &bleio_uuid_type, MP_QSTR_uuid);
9690

9791
const bleio_attribute_security_mode_t read_perm = args[ARG_read_perm].u_int;
9892
common_hal_bleio_attribute_security_mode_check_valid(read_perm);
@@ -128,11 +122,11 @@ STATIC mp_obj_t bleio_descriptor_add_to_characteristic(size_t n_args, const mp_o
128122
// Range checking on max_length arg is done by the common_hal layer, because
129123
// it may vary depending on underlying BLE implementation.
130124
common_hal_bleio_descriptor_construct(
131-
descriptor, MP_OBJ_TO_PTR(characteristic_obj), MP_OBJ_TO_PTR(uuid_obj),
125+
descriptor, characteristic, uuid,
132126
read_perm, write_perm,
133127
max_length, fixed_length, &initial_value_bufinfo);
134128

135-
common_hal_bleio_characteristic_add_descriptor(characteristic_obj, descriptor);
129+
common_hal_bleio_characteristic_add_descriptor(characteristic, descriptor);
136130

137131
return MP_OBJ_FROM_PTR(descriptor);
138132
}

shared-bindings/_bleio/PacketBuffer.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,13 @@ STATIC mp_obj_t bleio_packet_buffer_make_new(const mp_obj_type_t *type, size_t n
7171
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
7272
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
7373

74-
const mp_obj_t characteristic = args[ARG_characteristic].u_obj;
74+
bleio_characteristic_obj_t *characteristic = mp_arg_validate_type(args[ARG_characteristic].u_obj, &bleio_characteristic_type, MP_QSTR_characteristic);
7575

7676
const mp_int_t buffer_size = args[ARG_buffer_size].u_int;
7777
if (buffer_size < 1) {
7878
mp_raise_ValueError_varg(translate("%q must be >= 1"), MP_QSTR_buffer_size);
7979
}
8080

81-
if (!mp_obj_is_type(characteristic, &bleio_characteristic_type)) {
82-
mp_raise_TypeError(translate("Expected a Characteristic"));
83-
}
84-
8581
size_t max_packet_size = common_hal_bleio_characteristic_get_max_length(characteristic);
8682
if (args[ARG_max_packet_size].u_obj != mp_const_none) {
8783
max_packet_size = mp_obj_get_int(args[ARG_max_packet_size].u_obj);
@@ -90,7 +86,7 @@ STATIC mp_obj_t bleio_packet_buffer_make_new(const mp_obj_type_t *type, size_t n
9086
bleio_packet_buffer_obj_t *self = m_new_obj(bleio_packet_buffer_obj_t);
9187
self->base.type = &bleio_packet_buffer_type;
9288

93-
common_hal_bleio_packet_buffer_construct(self, MP_OBJ_TO_PTR(characteristic), buffer_size, max_packet_size);
89+
common_hal_bleio_packet_buffer_construct(self, characteristic, buffer_size, max_packet_size);
9490

9591
return MP_OBJ_FROM_PTR(self);
9692
}

shared-bindings/_bleio/Service.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,14 @@ STATIC mp_obj_t bleio_service_make_new(const mp_obj_type_t *type, size_t n_args,
5858
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
5959
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
6060

61-
const mp_obj_t uuid_obj = args[ARG_uuid].u_obj;
62-
if (!mp_obj_is_type(uuid_obj, &bleio_uuid_type)) {
63-
mp_raise_TypeError(translate("Expected a UUID"));
64-
}
61+
bleio_uuid_obj_t *uuid = mp_arg_validate_type(args[ARG_uuid].u_obj, &bleio_uuid_type, MP_QSTR_uuid);
6562

6663
const bool is_secondary = args[ARG_secondary].u_bool;
6764

6865
bleio_service_obj_t *service = m_new_obj(bleio_service_obj_t);
6966
service->base.type = &bleio_service_type;
7067

71-
common_hal_bleio_service_construct(service, MP_OBJ_TO_PTR(uuid_obj), is_secondary);
68+
common_hal_bleio_service_construct(service, uuid, is_secondary);
7269

7370
return MP_OBJ_FROM_PTR(service);
7471
}

shared-bindings/_pew/PewPew.c

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -92,31 +92,20 @@ STATIC mp_obj_t pewpew_make_new(const mp_obj_type_t *type, size_t n_args,
9292
}
9393

9494
for (size_t i = 0; i < rows_size; ++i) {
95-
if (!mp_obj_is_type(rows[i], &digitalio_digitalinout_type)) {
96-
mp_raise_TypeError(translate("Row entry must be digitalio.DigitalInOut"));
97-
}
98-
digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR(rows[i]);
95+
digitalio_digitalinout_obj_t *pin = mp_arg_validate_type(rows[i], &digitalio_digitalinout_type, MP_QSTR_rows);
9996
if (common_hal_digitalio_digitalinout_deinited(pin)) {
10097
raise_deinited_error();
10198
}
10299
}
103100

104101
for (size_t i = 0; i < cols_size; ++i) {
105-
if (!mp_obj_is_type(cols[i], &digitalio_digitalinout_type)) {
106-
mp_raise_TypeError(translate("Column entry must be digitalio.DigitalInOut"));
107-
}
108-
digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR(cols[i]);
102+
digitalio_digitalinout_obj_t *pin = mp_arg_validate_type(cols[i], &digitalio_digitalinout_type, MP_QSTR_cols);
109103
if (common_hal_digitalio_digitalinout_deinited(pin)) {
110104
raise_deinited_error();
111105
}
112106
}
113107

114-
if (!mp_obj_is_type(args[ARG_buttons].u_obj,
115-
&digitalio_digitalinout_type)) {
116-
mp_raise_TypeError(translate("buttons must be digitalio.DigitalInOut"));
117-
}
118-
digitalio_digitalinout_obj_t *buttons = MP_OBJ_TO_PTR(
119-
args[ARG_buttons].u_obj);
108+
digitalio_digitalinout_obj_t *buttons = mp_arg_validate_type(args[ARG_buttons].u_obj, &digitalio_digitalinout_type, MP_QSTR_buttons);
120109
if (common_hal_digitalio_digitalinout_deinited(buttons)) {
121110
raise_deinited_error();
122111
}

shared-bindings/bitmaptools/__init__.c

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -463,10 +463,7 @@ STATIC mp_obj_t bitmaptools_arrayblit(size_t n_args, const mp_obj_t *pos_args, m
463463
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
464464
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
465465

466-
if (!mp_obj_is_type(args[ARG_bitmap].u_obj, &displayio_bitmap_type)) {
467-
mp_raise_TypeError(NULL);
468-
}
469-
displayio_bitmap_t *bitmap = MP_OBJ_TO_PTR(args[ARG_bitmap].u_obj);
466+
displayio_bitmap_t *bitmap = mp_arg_validate_type(args[ARG_bitmap].u_obj, &displayio_bitmap_type, MP_QSTR_bitmap);
470467

471468
mp_buffer_info_t bufinfo;
472469
mp_get_buffer_raise(args[ARG_data].u_obj, &bufinfo, MP_BUFFER_READ);
@@ -533,15 +530,9 @@ STATIC mp_obj_t bitmaptools_readinto(size_t n_args, const mp_obj_t *pos_args, mp
533530
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
534531
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
535532

536-
if (!mp_obj_is_type(args[ARG_bitmap].u_obj, &displayio_bitmap_type)) {
537-
mp_raise_TypeError(NULL);
538-
}
539-
displayio_bitmap_t *bitmap = MP_OBJ_TO_PTR(args[ARG_bitmap].u_obj);
533+
displayio_bitmap_t *bitmap = mp_arg_validate_type(args[ARG_bitmap].u_obj, &displayio_bitmap_type, MP_QSTR_bitmap);
540534

541-
if (!mp_obj_is_type(args[ARG_file].u_obj, &mp_type_fileio)) {
542-
mp_raise_TypeError(NULL);
543-
}
544-
pyb_file_obj_t *file = MP_OBJ_TO_PTR(args[ARG_file].u_obj);
535+
pyb_file_obj_t *file = mp_arg_validate_type(args[ARG_file].u_obj, &mp_type_fileio, MP_QSTR_file);
545536

546537
int element_size = args[ARG_element_size].u_int;
547538
if (element_size != 1 && element_size != 2 && element_size != 4) {

0 commit comments

Comments
 (0)