)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ed3218920c5b474c37d9dfe24a6c26a3539ac516","unresolved":true,"context_lines":[{"line_number":7,"context_line":"API to pass fields to node object list"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change modifies the nodes _get_nodes_collection method to"},{"line_number":10,"context_line":"consider and pass in an explicit lisst of requested fields into"},{"line_number":11,"context_line":"the node list method, while also including the required fields"},{"line_number":12,"context_line":"for things like ownership/policy checking."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"b1be9a76_002328f2","line":10,"updated":"2021-06-30 22:21:25.000000000","message":"s/lisst/list/","commit_id":"87e42afb9e98204a683baff22c67171dca2100fe"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ed3218920c5b474c37d9dfe24a6c26a3539ac516","unresolved":true,"context_lines":[{"line_number":15,"context_line":"it while enabling field validity to be checked, and specific"},{"line_number":16,"context_line":"requisite field lists provided in based upon that value."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"And also optionally builds the traits list as they are nolonger"},{"line_number":19,"context_line":"*always* populated on all objects with fully populated objects"},{"line_number":20,"context_line":"as only partially hydrated objects are provided back when specific"},{"line_number":21,"context_line":"fields are requested."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"25d44013_cf217f8c","line":18,"updated":"2021-06-30 22:21:25.000000000","message":"s/nolonger/no longer/","commit_id":"87e42afb9e98204a683baff22c67171dca2100fe"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4ab39cf73d84e7356e189c8720947b5eb0a2fbe2","unresolved":true,"context_lines":[{"line_number":1271,"context_line":"            \u0027vendor_interface\u0027"},{"line_number":1272,"context_line":"        ),"},{"line_number":1273,"context_line":"    )"},{"line_number":1274,"context_line":"    node[\u0027traits\u0027] \u003d rpc_node.traits.get_trait_names()"},{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"    if (api_utils.allow_expose_conductors()"},{"line_number":1277,"context_line":"            and (fields is None or \u0027conductor\u0027 in fields)):"}],"source_content_type":"text/x-python","patch_set":4,"id":"b4c7d012_e85b6bf5","side":"PARENT","line":1274,"range":{"start_line":1274,"start_character":30,"end_line":1274,"end_character":54},"updated":"2021-05-24 23:57:55.000000000","message":"this is failing because get_trait_names() is no longer being called. But this method is TraitList specific. See my comment in utils.py for a suggestion to do this without any TraitList type awareness","commit_id":"c6f0eb277dbcd2eea3330a365fa28846e48764af"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a9b2ac4d66fca7dfccb3e24e2fbcd4f52cf72ab2","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"                    \u0027target_provision_state\u0027,"},{"line_number":1267,"context_line":"                    \u0027target_raid_config\u0027,"},{"line_number":1268,"context_line":"                    \u0027traits\u0027,"},{"line_number":1269,"context_line":"                    \u0027vendor_interface\u0027]"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"    if not fields:"},{"line_number":1272,"context_line":"        return valid_fields"}],"source_content_type":"text/x-python","patch_set":14,"id":"d925666a_fff4bf06","line":1269,"updated":"2021-07-02 15:32:15.000000000","message":"Cannot we take it from node_schema()? I\u0027m pretty sure we\u0027ll forget to update this place one day.","commit_id":"87e42afb9e98204a683baff22c67171dca2100fe"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ed3218920c5b474c37d9dfe24a6c26a3539ac516","unresolved":true,"context_lines":[{"line_number":1266,"context_line":"                    \u0027target_provision_state\u0027,"},{"line_number":1267,"context_line":"                    \u0027target_raid_config\u0027,"},{"line_number":1268,"context_line":"                    \u0027traits\u0027,"},{"line_number":1269,"context_line":"                    \u0027vendor_interface\u0027]"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"    if not fields:"},{"line_number":1272,"context_line":"        return valid_fields"}],"source_content_type":"text/x-python","patch_set":14,"id":"358013e3_2d89a1d9","line":1269,"updated":"2021-06-30 22:21:25.000000000","message":"I really wish there was a way to get this list without having it specifically enumerated here... I presume this list of fields has to exist elsewhere, too... right? (the DB model if nothing else? But I guess that may not be 1:1)","commit_id":"87e42afb9e98204a683baff22c67171dca2100fe"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cc8e2da951224a88fe5cbab171c6b3a9c4405603","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"                    \u0027target_provision_state\u0027,"},{"line_number":1267,"context_line":"                    \u0027target_raid_config\u0027,"},{"line_number":1268,"context_line":"                    \u0027traits\u0027,"},{"line_number":1269,"context_line":"                    \u0027vendor_interface\u0027]"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"    if not fields:"},{"line_number":1272,"context_line":"        return valid_fields"}],"source_content_type":"text/x-python","patch_set":14,"id":"85c23fdb_6bf4af4d","line":1269,"in_reply_to":"d925666a_fff4bf06","updated":"2021-07-07 20:19:04.000000000","message":"w/r/t Jay\u0027s question, DB model to node model is not 1:1. Dmitry\u0027s comment on node_schema might actually work, but would require someone to spend time looking at it.","commit_id":"87e42afb9e98204a683baff22c67171dca2100fe"}],"ironic/api/controllers/v1/utils.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4ab39cf73d84e7356e189c8720947b5eb0a2fbe2","unresolved":true,"context_lines":[{"line_number":227,"context_line":"            empty_value \u003d {}"},{"line_number":228,"context_line":"        elif isinstance(obj.fields[field], ofields.DateTimeField):"},{"line_number":229,"context_line":"            if value:"},{"line_number":230,"context_line":"                value \u003d value.isoformat()"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        if value is not None:"},{"line_number":233,"context_line":"            to_dict[field] \u003d value"}],"source_content_type":"text/x-python","patch_set":4,"id":"03aa8e4d_8e99ebc4","line":230,"updated":"2021-05-24 23:57:55.000000000","message":"Lets say if the field is type ObjectField and the value is an IronicObjectListBase then replace the value with the objects list. The following fixes the test for me:\n\n        elif isinstance(obj.fields[field], ofields.ObjectField):\n            if isinstance(value, obase.IronicObjectListBase):\n                value \u003d value.objects[:]","commit_id":"e600129308c241c02854650a2e7d1046afc21446"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f33a1bd34cafcb9fad378c5ea537eb184326ed38","unresolved":true,"context_lines":[{"line_number":227,"context_line":"            empty_value \u003d {}"},{"line_number":228,"context_line":"        elif isinstance(obj.fields[field], ofields.DateTimeField):"},{"line_number":229,"context_line":"            if value:"},{"line_number":230,"context_line":"                value \u003d value.isoformat()"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        if value is not None:"},{"line_number":233,"context_line":"            to_dict[field] \u003d value"}],"source_content_type":"text/x-python","patch_set":4,"id":"f01e8ed5_94d3df08","line":230,"in_reply_to":"03aa8e4d_8e99ebc4","updated":"2021-05-25 13:43:52.000000000","message":"Freaky, but okay. I *think* it was hitting the issue on line 233, but hey if an explicit copy instead of object association works, then \\o/","commit_id":"e600129308c241c02854650a2e7d1046afc21446"}],"ironic/objects/base.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6efd29e4ce056c78f0f7bd84fd7718b456613ea2","unresolved":true,"context_lines":[{"line_number":307,"context_line":"        :param db_objects: A  list of DB models of the object"},{"line_number":308,"context_line":"        :returns: A list of objects corresponding to the database entities"},{"line_number":309,"context_line":"        \"\"\""},{"line_number":310,"context_line":"        return [cls._from_db_object(context, cls(), db_obj, fields\u003dfields)"},{"line_number":311,"context_line":"                for db_obj in db_objects]"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def do_version_changes_for_db(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"683e063a_b9bb2277","line":310,"range":{"start_line":310,"start_character":64,"end_line":310,"end_character":72},"updated":"2021-05-24 17:40:19.000000000","message":"Changing this here now, forces many of the API changes so it makes sense to pair with the API changes where required fields are re-sorted to be ideal.","commit_id":"e249c7a165a5f5ad4be712ff4884043c11365468"}],"ironic/objects/node.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"4ab39cf73d84e7356e189c8720947b5eb0a2fbe2","unresolved":true,"context_lines":[{"line_number":213,"context_line":"        if not fields or \u0027traits\u0027 in fields:"},{"line_number":214,"context_line":"            # NOTE(TheJulia): No reason to do additional work on a field"},{"line_number":215,"context_line":"            # selected query, unless they are seeking the traits themselves."},{"line_number":216,"context_line":"            print(db_object.traits)"},{"line_number":217,"context_line":"            self.traits \u003d object_base.obj_make_list("},{"line_number":218,"context_line":"                context, objects.TraitList(context),"},{"line_number":219,"context_line":"                objects.Trait, db_object[\u0027traits\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"e8ba94ca_cf6ef184","line":216,"updated":"2021-05-24 23:57:55.000000000","message":"db_object is dict-like here, so everything except TestListNodes.test_get_traits_fields passes when this is changed to db_object[\u0027traits\u0027], like at line #219","commit_id":"e600129308c241c02854650a2e7d1046afc21446"}]}
