This repository was archived by the owner on Dec 25, 2024. It is now read-only.
Commit 4b13be5
committed
Updates __new__ to take one arg input (#183)
* Adds section for required property type writing
* Adds required property classes
* Adds template adjustment for optional properties
* Adds template to write optional properties typeddict
* Successfully generates required and optional typeddicts
* Writes DictInput class to store required and optional input properties
* Changes new dict inptut type for arg_ and changes args_* to arg_
* Update new signature
* Removes unsets from optional properties, allows self in when optionalandreqproperties exist
* Typeddicts only generated when addProps is false
* Tweaks when reqanoptprops are generated
* Adds types to dictchema input
* Adds many use cases object inputs
* Adds req property mapping writing when addprops set
* Adds last required object type definition
* Fixes allAreInline for DictInput
* Adds optional properties type hint when addProps unset
* Adds and uses new partial
* Adds mapping type for required + opt + addProps
* Writes all property input mapping types
* Updates new signature to use DictInput for all object use cases
* Updates 3 test files
* Fixes more python tests
* Fixes manual tests
* Fixes python tests
* Converts example properties into example keys, fixes schema naming bug
* Adds braces aroudn object input
* Fixes example addProp key
* arg_ -> arg
* Schema input configuration_ -> configuration
* Removes 'from_openapi_data_'
* Fixes java tests
* Samples regenerated
* Unit test sample updated
* Fixes bug with allof/anyOf/oneOf type names
* Fixes python non compliant discriminator test1 parent 9bc1ae1 commit 4b13be5
620 files changed
Lines changed: 9502 additions & 8950 deletions
File tree
- modules/openapi-json-schema-generator/src
- main
- java/org/openapijsonschematools/codegen
- languages
- model
- resources/python
- components/schemas
- paths/path/verb
- servers
- test/resources/3_0
- samples/openapi3/client
- 3_0_3_unit_test/python
- .openapi-generator
- docs
- components/schema
- paths
- request_body_post_additionalproperties_allows_a_schema_which_should_validate_request_body
- request_body_post_additionalproperties_can_exist_by_itself_request_body
- request_body_post_enums_in_properties_request_body
- request_body_post_object_type_matches_objects_request_body
- request_body_post_oneof_with_required_request_body
- request_body_post_ref_in_additionalproperties_request_body
- request_body_post_the_default_keyword_does_not_do_anything_if_the_property_is_missing_request_body
- src/unit_test_api
- components/schema
- test
- components/schema
- test_paths
- test_request_body_post_additionalproperties_allows_a_schema_which_should_validate_request_body
- test_request_body_post_additionalproperties_are_allowed_by_default_request_body
- test_request_body_post_additionalproperties_can_exist_by_itself_request_body
- test_request_body_post_additionalproperties_should_not_look_in_applicators_request_body
- test_request_body_post_allof_combined_with_anyof_oneof_request_body
- test_request_body_post_allof_request_body
- test_request_body_post_allof_simple_types_request_body
- test_request_body_post_allof_with_base_schema_request_body
- test_request_body_post_allof_with_one_empty_schema_request_body
- test_request_body_post_allof_with_the_first_empty_schema_request_body
- test_request_body_post_allof_with_the_last_empty_schema_request_body
- test_request_body_post_allof_with_two_empty_schemas_request_body
- test_request_body_post_anyof_complex_types_request_body
- test_request_body_post_anyof_request_body
- test_request_body_post_anyof_with_base_schema_request_body
- test_request_body_post_anyof_with_one_empty_schema_request_body
- test_request_body_post_array_type_matches_arrays_request_body
- test_request_body_post_boolean_type_matches_booleans_request_body
- test_request_body_post_by_int_request_body
- test_request_body_post_by_number_request_body
- test_request_body_post_by_small_number_request_body
- test_request_body_post_date_time_format_request_body
- test_request_body_post_email_format_request_body
- test_request_body_post_enum_with0_does_not_match_false_request_body
- test_request_body_post_enum_with1_does_not_match_true_request_body
- test_request_body_post_enum_with_escaped_characters_request_body
- test_request_body_post_enum_with_false_does_not_match0_request_body
- test_request_body_post_enum_with_true_does_not_match1_request_body
- test_request_body_post_enums_in_properties_request_body
- test_request_body_post_forbidden_property_request_body
- test_request_body_post_hostname_format_request_body
- test_request_body_post_integer_type_matches_integers_request_body
- test_request_body_post_invalid_instance_should_not_raise_error_when_float_division_inf_request_body
- test_request_body_post_invalid_string_value_for_default_request_body
- test_request_body_post_ipv4_format_request_body
- test_request_body_post_ipv6_format_request_body
- test_request_body_post_json_pointer_format_request_body
- test_request_body_post_maximum_validation_request_body
- test_request_body_post_maximum_validation_with_unsigned_integer_request_body
- test_request_body_post_maxitems_validation_request_body
- test_request_body_post_maxlength_validation_request_body
- test_request_body_post_maxproperties0_means_the_object_is_empty_request_body
- test_request_body_post_maxproperties_validation_request_body
- test_request_body_post_minimum_validation_request_body
- test_request_body_post_minimum_validation_with_signed_integer_request_body
- test_request_body_post_minitems_validation_request_body
- test_request_body_post_minlength_validation_request_body
- test_request_body_post_minproperties_validation_request_body
- test_request_body_post_nested_allof_to_check_validation_semantics_request_body
- test_request_body_post_nested_anyof_to_check_validation_semantics_request_body
- test_request_body_post_nested_items_request_body
- test_request_body_post_nested_oneof_to_check_validation_semantics_request_body
- test_request_body_post_not_more_complex_schema_request_body
- test_request_body_post_not_request_body
- test_request_body_post_nul_characters_in_strings_request_body
- test_request_body_post_null_type_matches_only_the_null_object_request_body
- test_request_body_post_number_type_matches_numbers_request_body
- test_request_body_post_object_properties_validation_request_body
- test_request_body_post_object_type_matches_objects_request_body
- test_request_body_post_oneof_complex_types_request_body
- test_request_body_post_oneof_request_body
- test_request_body_post_oneof_with_base_schema_request_body
- test_request_body_post_oneof_with_empty_schema_request_body
- test_request_body_post_oneof_with_required_request_body
- test_request_body_post_pattern_is_not_anchored_request_body
- test_request_body_post_pattern_validation_request_body
- test_request_body_post_properties_with_escaped_characters_request_body
- test_request_body_post_property_named_ref_that_is_not_a_reference_request_body
- test_request_body_post_ref_in_additionalproperties_request_body
- test_request_body_post_ref_in_allof_request_body
- test_request_body_post_ref_in_anyof_request_body
- test_request_body_post_ref_in_items_request_body
- test_request_body_post_ref_in_not_request_body
- test_request_body_post_ref_in_oneof_request_body
- test_request_body_post_ref_in_property_request_body
- test_request_body_post_required_default_validation_request_body
- test_request_body_post_required_validation_request_body
- test_request_body_post_required_with_empty_array_request_body
- test_request_body_post_required_with_escaped_characters_request_body
- test_request_body_post_simple_enum_validation_request_body
- test_request_body_post_string_type_matches_strings_request_body
- test_request_body_post_the_default_keyword_does_not_do_anything_if_the_property_is_missing_request_body
- test_request_body_post_uniqueitems_false_validation_request_body
- test_request_body_post_uniqueitems_validation_request_body
- test_request_body_post_uri_format_request_body
- test_request_body_post_uri_reference_format_request_body
- test_request_body_post_uri_template_format_request_body
- test_response_body_post_additionalproperties_allows_a_schema_which_should_validate_response_body_for_content_types
- test_response_body_post_additionalproperties_are_allowed_by_default_response_body_for_content_types
- test_response_body_post_additionalproperties_can_exist_by_itself_response_body_for_content_types
- test_response_body_post_additionalproperties_should_not_look_in_applicators_response_body_for_content_types
- test_response_body_post_allof_combined_with_anyof_oneof_response_body_for_content_types
- test_response_body_post_allof_response_body_for_content_types
- test_response_body_post_allof_simple_types_response_body_for_content_types
- test_response_body_post_allof_with_base_schema_response_body_for_content_types
- test_response_body_post_allof_with_one_empty_schema_response_body_for_content_types
- test_response_body_post_allof_with_the_first_empty_schema_response_body_for_content_types
- test_response_body_post_allof_with_the_last_empty_schema_response_body_for_content_types
- test_response_body_post_allof_with_two_empty_schemas_response_body_for_content_types
- test_response_body_post_anyof_complex_types_response_body_for_content_types
- test_response_body_post_anyof_response_body_for_content_types
- test_response_body_post_anyof_with_base_schema_response_body_for_content_types
- test_response_body_post_anyof_with_one_empty_schema_response_body_for_content_types
- test_response_body_post_array_type_matches_arrays_response_body_for_content_types
- test_response_body_post_boolean_type_matches_booleans_response_body_for_content_types
- test_response_body_post_by_int_response_body_for_content_types
- test_response_body_post_by_number_response_body_for_content_types
- test_response_body_post_by_small_number_response_body_for_content_types
- test_response_body_post_date_time_format_response_body_for_content_types
- test_response_body_post_email_format_response_body_for_content_types
- test_response_body_post_enum_with0_does_not_match_false_response_body_for_content_types
- test_response_body_post_enum_with1_does_not_match_true_response_body_for_content_types
- test_response_body_post_enum_with_escaped_characters_response_body_for_content_types
- test_response_body_post_enum_with_false_does_not_match0_response_body_for_content_types
- test_response_body_post_enum_with_true_does_not_match1_response_body_for_content_types
- test_response_body_post_enums_in_properties_response_body_for_content_types
- test_response_body_post_forbidden_property_response_body_for_content_types
- test_response_body_post_hostname_format_response_body_for_content_types
- test_response_body_post_integer_type_matches_integers_response_body_for_content_types
- test_response_body_post_invalid_instance_should_not_raise_error_when_float_division_inf_response_body_for_content_types
- test_response_body_post_invalid_string_value_for_default_response_body_for_content_types
- test_response_body_post_ipv4_format_response_body_for_content_types
- test_response_body_post_ipv6_format_response_body_for_content_types
- test_response_body_post_json_pointer_format_response_body_for_content_types
- test_response_body_post_maximum_validation_response_body_for_content_types
- test_response_body_post_maximum_validation_with_unsigned_integer_response_body_for_content_types
- test_response_body_post_maxitems_validation_response_body_for_content_types
- test_response_body_post_maxlength_validation_response_body_for_content_types
- test_response_body_post_maxproperties0_means_the_object_is_empty_response_body_for_content_types
- test_response_body_post_maxproperties_validation_response_body_for_content_types
- test_response_body_post_minimum_validation_response_body_for_content_types
- test_response_body_post_minimum_validation_with_signed_integer_response_body_for_content_types
- test_response_body_post_minitems_validation_response_body_for_content_types
- test_response_body_post_minlength_validation_response_body_for_content_types
- test_response_body_post_minproperties_validation_response_body_for_content_types
- test_response_body_post_nested_allof_to_check_validation_semantics_response_body_for_content_types
- test_response_body_post_nested_anyof_to_check_validation_semantics_response_body_for_content_types
- test_response_body_post_nested_items_response_body_for_content_types
- test_response_body_post_nested_oneof_to_check_validation_semantics_response_body_for_content_types
- test_response_body_post_not_more_complex_schema_response_body_for_content_types
- test_response_body_post_not_response_body_for_content_types
- test_response_body_post_nul_characters_in_strings_response_body_for_content_types
- test_response_body_post_null_type_matches_only_the_null_object_response_body_for_content_types
- test_response_body_post_number_type_matches_numbers_response_body_for_content_types
- test_response_body_post_object_properties_validation_response_body_for_content_types
- test_response_body_post_object_type_matches_objects_response_body_for_content_types
- test_response_body_post_oneof_complex_types_response_body_for_content_types
- test_response_body_post_oneof_response_body_for_content_types
- test_response_body_post_oneof_with_base_schema_response_body_for_content_types
- test_response_body_post_oneof_with_empty_schema_response_body_for_content_types
- test_response_body_post_oneof_with_required_response_body_for_content_types
- test_response_body_post_pattern_is_not_anchored_response_body_for_content_types
- test_response_body_post_pattern_validation_response_body_for_content_types
- test_response_body_post_properties_with_escaped_characters_response_body_for_content_types
- test_response_body_post_property_named_ref_that_is_not_a_reference_response_body_for_content_types
- test_response_body_post_ref_in_additionalproperties_response_body_for_content_types
- test_response_body_post_ref_in_allof_response_body_for_content_types
- test_response_body_post_ref_in_anyof_response_body_for_content_types
- test_response_body_post_ref_in_items_response_body_for_content_types
- test_response_body_post_ref_in_not_response_body_for_content_types
- test_response_body_post_ref_in_oneof_response_body_for_content_types
- test_response_body_post_ref_in_property_response_body_for_content_types
- test_response_body_post_required_default_validation_response_body_for_content_types
- test_response_body_post_required_validation_response_body_for_content_types
- test_response_body_post_required_with_empty_array_response_body_for_content_types
- test_response_body_post_required_with_escaped_characters_response_body_for_content_types
- test_response_body_post_simple_enum_validation_response_body_for_content_types
- test_response_body_post_string_type_matches_strings_response_body_for_content_types
- test_response_body_post_the_default_keyword_does_not_do_anything_if_the_property_is_missing_response_body_for_content_types
- test_response_body_post_uniqueitems_false_validation_response_body_for_content_types
- test_response_body_post_uniqueitems_validation_response_body_for_content_types
- test_response_body_post_uri_format_response_body_for_content_types
- test_response_body_post_uri_reference_format_response_body_for_content_types
- test_response_body_post_uri_template_format_response_body_for_content_types
- features
- nonCompliantUseDiscriminatorIfCompositionFails/python
- .openapi-generator
- docs/paths/operators
- src/this_package
- components/schema
- test_manual
- security/python
- .openapi-generator
- src/this_package
- petstore/python
- .openapi-generator
- docs
- components/schema
- paths
- another_fake_dummy
- fake_additional_properties_with_array_of_enums
- fake_body_with_file_schema
- fake_body_with_query_params
- fake_classname_test
- fake_inline_additional_properties
- fake_inline_composition
- fake_json_form_data
- fake_obj_in_query
- fake_pet_id_upload_image_with_required_file
- fake_ref_obj_in_query
- fake_refs_arraymodel
- fake_refs_mammal
- fake_refs_object_model_with_ref_props
- fake_upload_files
- fake_upload_file
- fake
- pet_pet_id_upload_image
- pet_pet_id
- pet
- store_order
- user_create_with_array
- user_create_with_list
- user_username
- user
- src/petstore_api
- components
- request_bodies/request_body_user_array/content/application_json
- responses
- response_success_inline_content_and_header/content/application_json
- response_successful_xml_and_json_array_of_pet/content
- application_json
- application_xml
- schema
- paths
- fake_inline_additional_properties/post/request_body/content/application_json
- fake_inline_composition/post
- parameters
- parameter_0
- parameter_1
- request_body/content
- application_json
- multipart_form_data
- responses/response_200/content
- application_json
- multipart_form_data
- fake_json_form_data/get/request_body/content/application_x_www_form_urlencoded
- fake_json_with_charset/post
- request_body/content/application_json_charsetutf8
- responses/response_200/content/application_json_charsetutf8
- fake_multiple_response_bodies/get/responses
- response_200/content/application_json
- response_202/content/application_json
- fake_multiple_securities/get/responses/response_200/content/application_json
- fake_obj_in_query/get/parameters/parameter_0
- fake_parameter_collisions1_abab_self_ab/post
- request_body/content/application_json
- responses/response_200/content/application_json
- fake_pet_id_upload_image_with_required_file/post/request_body/content/multipart_form_data
- fake_query_param_with_json_content_type/get
- parameters/parameter_0/content/application_json
- responses/response_200/content/application_json
- fake_test_query_paramters/put/parameters
- parameter_0
- parameter_1
- parameter_2
- parameter_3
- parameter_4
- fake_upload_files/post/request_body/content/multipart_form_data
- fake_upload_file/post/request_body/content/multipart_form_data
- fake_wild_card_responses/get/responses
- response_1xx/content/application_json
- response_200/content/application_json
- response_2xx/content/application_json
- response_3xx/content/application_json
- response_4xx/content/application_json
- response_5xx/content/application_json
- fake
- get
- parameters
- parameter_0
- parameter_2
- request_body/content/application_x_www_form_urlencoded
- responses/response_404/content/application_json
- post/request_body/content/application_x_www_form_urlencoded
- foo/get
- responses/response_default/content/application_json
- servers
- pet_find_by_status
- get/parameters/parameter_0
- servers
- pet_find_by_tags/get/parameters/parameter_0
- pet_pet_id_upload_image/post/request_body/content/multipart_form_data
- pet_pet_id/post/request_body/content/application_x_www_form_urlencoded
- servers
- tests_manual
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 92 additions & 20 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
430 | 430 | | |
431 | 431 | | |
432 | 432 | | |
| 433 | + | |
| 434 | + | |
433 | 435 | | |
434 | 436 | | |
435 | 437 | | |
| |||
1560 | 1562 | | |
1561 | 1563 | | |
1562 | 1564 | | |
1563 | | - | |
| 1565 | + | |
1564 | 1566 | | |
1565 | 1567 | | |
1566 | 1568 | | |
| |||
2265 | 2267 | | |
2266 | 2268 | | |
2267 | 2269 | | |
| 2270 | + | |
| 2271 | + | |
2268 | 2272 | | |
2269 | 2273 | | |
2270 | 2274 | | |
| |||
2286 | 2290 | | |
2287 | 2291 | | |
2288 | 2292 | | |
| 2293 | + | |
| 2294 | + | |
| 2295 | + | |
| 2296 | + | |
| 2297 | + | |
| 2298 | + | |
| 2299 | + | |
| 2300 | + | |
| 2301 | + | |
| 2302 | + | |
| 2303 | + | |
| 2304 | + | |
| 2305 | + | |
| 2306 | + | |
| 2307 | + | |
2289 | 2308 | | |
2290 | 2309 | | |
2291 | 2310 | | |
| |||
2352 | 2371 | | |
2353 | 2372 | | |
2354 | 2373 | | |
2355 | | - | |
2356 | | - | |
2357 | | - | |
2358 | | - | |
2359 | 2374 | | |
2360 | 2375 | | |
2361 | 2376 | | |
| |||
3295 | 3310 | | |
3296 | 3311 | | |
3297 | 3312 | | |
3298 | | - | |
| 3313 | + | |
3299 | 3314 | | |
3300 | 3315 | | |
3301 | 3316 | | |
3302 | | - | |
3303 | | - | |
3304 | | - | |
3305 | 3317 | | |
3306 | | - | |
| 3318 | + | |
| 3319 | + | |
| 3320 | + | |
| 3321 | + | |
| 3322 | + | |
| 3323 | + | |
| 3324 | + | |
3307 | 3325 | | |
3308 | 3326 | | |
3309 | | - | |
| 3327 | + | |
| 3328 | + | |
| 3329 | + | |
3310 | 3330 | | |
3311 | 3331 | | |
3312 | 3332 | | |
3313 | 3333 | | |
3314 | 3334 | | |
3315 | 3335 | | |
| 3336 | + | |
| 3337 | + | |
| 3338 | + | |
3316 | 3339 | | |
3317 | 3340 | | |
| 3341 | + | |
| 3342 | + | |
| 3343 | + | |
| 3344 | + | |
| 3345 | + | |
| 3346 | + | |
| 3347 | + | |
3318 | 3348 | | |
3319 | 3349 | | |
3320 | 3350 | | |
| |||
4280 | 4310 | | |
4281 | 4311 | | |
4282 | 4312 | | |
4283 | | - | |
4284 | | - | |
| 4313 | + | |
| 4314 | + | |
4285 | 4315 | | |
4286 | 4316 | | |
4287 | 4317 | | |
| |||
4299 | 4329 | | |
4300 | 4330 | | |
4301 | 4331 | | |
4302 | | - | |
| 4332 | + | |
| 4333 | + | |
| 4334 | + | |
| 4335 | + | |
| 4336 | + | |
4303 | 4337 | | |
4304 | | - | |
| 4338 | + | |
4305 | 4339 | | |
4306 | 4340 | | |
4307 | 4341 | | |
| |||
4352 | 4386 | | |
4353 | 4387 | | |
4354 | 4388 | | |
4355 | | - | |
| 4389 | + | |
4356 | 4390 | | |
4357 | 4391 | | |
4358 | 4392 | | |
4359 | 4393 | | |
| 4394 | + | |
| 4395 | + | |
| 4396 | + | |
| 4397 | + | |
| 4398 | + | |
| 4399 | + | |
| 4400 | + | |
4360 | 4401 | | |
4361 | 4402 | | |
4362 | 4403 | | |
4363 | 4404 | | |
4364 | 4405 | | |
4365 | 4406 | | |
4366 | | - | |
| 4407 | + | |
| 4408 | + | |
| 4409 | + | |
| 4410 | + | |
| 4411 | + | |
| 4412 | + | |
| 4413 | + | |
4367 | 4414 | | |
4368 | 4415 | | |
4369 | 4416 | | |
4370 | 4417 | | |
4371 | 4418 | | |
4372 | 4419 | | |
4373 | 4420 | | |
| 4421 | + | |
4374 | 4422 | | |
| 4423 | + | |
| 4424 | + | |
| 4425 | + | |
| 4426 | + | |
| 4427 | + | |
4375 | 4428 | | |
4376 | 4429 | | |
4377 | 4430 | | |
4378 | 4431 | | |
4379 | 4432 | | |
4380 | | - | |
| 4433 | + | |
| 4434 | + | |
4381 | 4435 | | |
4382 | 4436 | | |
4383 | 4437 | | |
4384 | 4438 | | |
4385 | 4439 | | |
4386 | 4440 | | |
| 4441 | + | |
| 4442 | + | |
| 4443 | + | |
4387 | 4444 | | |
4388 | 4445 | | |
4389 | 4446 | | |
| |||
4394 | 4451 | | |
4395 | 4452 | | |
4396 | 4453 | | |
| 4454 | + | |
| 4455 | + | |
| 4456 | + | |
4397 | 4457 | | |
4398 | | - | |
| 4458 | + | |
4399 | 4459 | | |
4400 | 4460 | | |
4401 | 4461 | | |
4402 | 4462 | | |
4403 | 4463 | | |
| 4464 | + | |
| 4465 | + | |
| 4466 | + | |
| 4467 | + | |
| 4468 | + | |
| 4469 | + | |
| 4470 | + | |
| 4471 | + | |
| 4472 | + | |
| 4473 | + | |
| 4474 | + | |
| 4475 | + | |
4404 | 4476 | | |
4405 | 4477 | | |
4406 | 4478 | | |
| |||
4783 | 4855 | | |
4784 | 4856 | | |
4785 | 4857 | | |
4786 | | - | |
| 4858 | + | |
4787 | 4859 | | |
4788 | 4860 | | |
4789 | 4861 | | |
| |||
Lines changed: 10 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1285 | 1285 | | |
1286 | 1286 | | |
1287 | 1287 | | |
| 1288 | + | |
| 1289 | + | |
| 1290 | + | |
| 1291 | + | |
1288 | 1292 | | |
1289 | 1293 | | |
1290 | 1294 | | |
| |||
1361 | 1365 | | |
1362 | 1366 | | |
1363 | 1367 | | |
1364 | | - | |
| 1368 | + | |
1365 | 1369 | | |
1366 | 1370 | | |
1367 | 1371 | | |
| |||
1483 | 1487 | | |
1484 | 1488 | | |
1485 | 1489 | | |
1486 | | - | |
1487 | | - | |
| 1490 | + | |
| 1491 | + | |
1488 | 1492 | | |
1489 | 1493 | | |
1490 | 1494 | | |
| |||
1528 | 1532 | | |
1529 | 1533 | | |
1530 | 1534 | | |
1531 | | - | |
| 1535 | + | |
1532 | 1536 | | |
1533 | 1537 | | |
1534 | 1538 | | |
| |||
1544 | 1548 | | |
1545 | 1549 | | |
1546 | 1550 | | |
1547 | | - | |
1548 | | - | |
1549 | | - | |
1550 | | - | |
| 1551 | + | |
1551 | 1552 | | |
1552 | 1553 | | |
1553 | 1554 | | |
| |||
1602 | 1603 | | |
1603 | 1604 | | |
1604 | 1605 | | |
1605 | | - | |
| 1606 | + | |
1606 | 1607 | | |
1607 | 1608 | | |
1608 | 1609 | | |
| |||
0 commit comments