)]}'
{"octavia/api/root_controller.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a7a01434d322a07c28a7f642c111aad1d21d3282","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                \u00272018-07-31T00:00:00Z\u0027, host_url)"},{"line_number":80,"context_line":"            self._add_a_version(versions, \u0027v2.3\u0027, \u0027v2\u0027, \u0027SUPPORTED\u0027,"},{"line_number":81,"context_line":"                                \u00272018-12-18T00:00:00Z\u0027, host_url)"},{"line_number":82,"context_line":"            # amp statistics"},{"line_number":83,"context_line":"            self._add_a_version(versions, \u0027v2.4\u0027, \u0027v2\u0027, \u0027SUPPORTED\u0027,"},{"line_number":84,"context_line":"                                \u00272018-12-19T00:00:00Z\u0027, host_url)"},{"line_number":85,"context_line":"            # Flavors"}],"source_content_type":"text/x-python","patch_set":33,"id":"bfdaf3ff_24517563","line":82,"updated":"2019-01-24 23:21:37.000000000","message":"I like this, makes it nice and easy to see in code what feature each version was from, without having to dig through git history. :thumbsup:","commit_id":"f4f9d6ea1b27444055e6522f1dd53aaecf2de7c6"}],"octavia/api/v2/controllers/flavor_profiles.py":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"17c55c29ab2dca1af27c260012082c476a6d4102","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self._auth_validate_action(context, context.project_id,"},{"line_number":169,"context_line":"                                   constants.RBAC_DELETE)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self.repositories.flavor_profile.delete(context.session,"},{"line_number":172,"context_line":"                                                id\u003dflavor_profile_id)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_8c7ead18","line":172,"range":{"start_line":171,"start_character":8,"end_line":172,"end_character":69},"updated":"2018-12-12 13:02:21.000000000","message":"Before this, we should verify that the flavor_profile is still being used by any flavor.","commit_id":"c2c280c1e4e4a30d4423ebe029a067759b10589b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ff0186f7d668f11d38a46348bf1c529cf989ac79","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self._auth_validate_action(context, context.project_id,"},{"line_number":169,"context_line":"                                   constants.RBAC_DELETE)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self.repositories.flavor_profile.delete(context.session,"},{"line_number":172,"context_line":"                                                id\u003dflavor_profile_id)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_fe064a19","line":172,"range":{"start_line":171,"start_character":8,"end_line":172,"end_character":69},"in_reply_to":"3f79a3b5_8c7ead18","updated":"2018-12-20 05:31:21.000000000","message":"Yes, good call. I will fix that.","commit_id":"c2c280c1e4e4a30d4423ebe029a067759b10589b"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"902a59b529bfd70628fcd333296b8da1970c292d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @wsme_pecan.wsexpose(profile_types.FlavorProfileRootResponse,"},{"line_number":75,"context_line":"                         body\u003dprofile_types.FlavorProfileRootPOST,"},{"line_number":76,"context_line":"                         status_code\u003d201)"},{"line_number":77,"context_line":"    def post(self, flavor_profile_):"},{"line_number":78,"context_line":"        \"\"\"Creates a flavor Profile.\"\"\""},{"line_number":79,"context_line":"        flavorprofile \u003d flavor_profile_.flavorprofile"},{"line_number":80,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"bfdaf3ff_cdbb3e0c","line":77,"range":{"start_line":77,"start_character":33,"end_line":77,"end_character":34},"updated":"2019-01-11 06:54:16.000000000","message":"What does that mean???","commit_id":"c81731fed9c64e1a385a03dc9824c84f3434f28c"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"020a85db6e619697df0c4bd3d9633222e457fc24","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @wsme_pecan.wsexpose(profile_types.FlavorProfileRootResponse,"},{"line_number":75,"context_line":"                         body\u003dprofile_types.FlavorProfileRootPOST,"},{"line_number":76,"context_line":"                         status_code\u003d201)"},{"line_number":77,"context_line":"    def post(self, flavor_profile_):"},{"line_number":78,"context_line":"        \"\"\"Creates a flavor Profile.\"\"\""},{"line_number":79,"context_line":"        flavorprofile \u003d flavor_profile_.flavorprofile"},{"line_number":80,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"bfdaf3ff_ed20824c","line":77,"range":{"start_line":77,"start_character":33,"end_line":77,"end_character":34},"in_reply_to":"bfdaf3ff_cdbb3e0c","updated":"2019-01-11 07:00:11.000000000","message":"Sorry, this is an incorrect review. Please ignore it.","commit_id":"c81731fed9c64e1a385a03dc9824c84f3434f28c"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a7a01434d322a07c28a7f642c111aad1d21d3282","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        result \u003d self._convert_db_to_type(db_flavor_profile,"},{"line_number":52,"context_line":"                                          profile_types.FlavorProfileResponse)"},{"line_number":53,"context_line":"        if fields is not None:"},{"line_number":54,"context_line":"            result \u003d self._filter_fields([result], fields)[0]"},{"line_number":55,"context_line":"        return profile_types.FlavorProfileRootResponse(flavorprofile\u003dresult)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @wsme_pecan.wsexpose(profile_types.FlavorProfilesRootResponse,"}],"source_content_type":"text/x-python","patch_set":33,"id":"bfdaf3ff_04db11ed","line":54,"updated":"2019-01-24 23:21:37.000000000","message":"Note to self for later: if we made _filter_fields able to handle \"None\" intelligently, we wouldn\u0027t need to do an `if` in every single function.","commit_id":"f4f9d6ea1b27444055e6522f1dd53aaecf2de7c6"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a7a01434d322a07c28a7f642c111aad1d21d3282","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def get_all(self, fields\u003dNone):"},{"line_number":60,"context_line":"        \"\"\"Lists all flavor profiles.\"\"\""},{"line_number":61,"context_line":"        pcontext \u003d pecan.request.context"},{"line_number":62,"context_line":"        context \u003d pcontext.get(\u0027octavia_context\u0027)"},{"line_number":63,"context_line":"        self._auth_validate_action(context, context.project_id,"},{"line_number":64,"context_line":"                                   constants.RBAC_GET_ALL)"},{"line_number":65,"context_line":"        db_flavor_profiles, links \u003d self.repositories.flavor_profile.get_all("}],"source_content_type":"text/x-python","patch_set":33,"id":"bfdaf3ff_c4fd093b","line":62,"updated":"2019-01-24 23:21:37.000000000","message":"Note to self for later: if we made a property on the BaseController for `context`, we could probably remove a ton of these lines that are practically boilerplate for every function","commit_id":"f4f9d6ea1b27444055e6522f1dd53aaecf2de7c6"}],"octavia/db/migration/alembic_migrations/versions/26fc3e33b665_add_flavor_and_flavor_profile_table.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"60bffeab3c7cbf8b6ba23a67088a70776b0ca5f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"df87a7cf_6f513436","updated":"2017-12-19 17:45:10.000000000","message":"This migration is out of date and needs to be updated:\nhttp://logs.openstack.org/99/486499/14/check/octavia-v1-dsvm-scenario/aa20e12/logs/devstacklog.txt.gz#_2017-12-19_11_33_15_485","commit_id":"640e9f4a2591eee85631f5011f7a47e9ee463a23"}],"octavia/db/migration/alembic_migrations/versions/b9c703669314_add_flavor_and_flavor_profile_table.py":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"17c55c29ab2dca1af27c260012082c476a6d4102","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    op.create_table("},{"line_number":34,"context_line":"        u\u0027flavor_profile\u0027,"},{"line_number":35,"context_line":"        sa.Column(u\u0027id\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":36,"context_line":"        sa.Column(u\u0027name\u0027, sa.String(255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(u\u0027provider_name\u0027, sa.String(255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_e96b931a","line":34,"range":{"start_line":33,"start_character":0,"end_line":34,"end_character":26},"updated":"2018-12-12 13:02:21.000000000","message":"I think we should add project_id to this table.","commit_id":"c2c280c1e4e4a30d4423ebe029a067759b10589b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ff0186f7d668f11d38a46348bf1c529cf989ac79","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    op.create_table("},{"line_number":34,"context_line":"        u\u0027flavor_profile\u0027,"},{"line_number":35,"context_line":"        sa.Column(u\u0027id\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":36,"context_line":"        sa.Column(u\u0027name\u0027, sa.String(255), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(u\u0027provider_name\u0027, sa.String(255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_1efc6608","line":34,"range":{"start_line":33,"start_character":0,"end_line":34,"end_character":26},"in_reply_to":"3f79a3b5_e96b931a","updated":"2018-12-20 05:31:21.000000000","message":"No, these are not per-project but global settings for the operator to use.","commit_id":"c2c280c1e4e4a30d4423ebe029a067759b10589b"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"17c55c29ab2dca1af27c260012082c476a6d4102","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(u\u0027flavor_data\u0027, sa.String(4096), nullable\u003dFalse),"},{"line_number":39,"context_line":"        sa.PrimaryKeyConstraint(u\u0027id\u0027))"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    op.create_table("},{"line_number":42,"context_line":"        u\u0027flavor\u0027,"},{"line_number":43,"context_line":"        sa.Column(u\u0027id\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":44,"context_line":"        sa.Column(u\u0027name\u0027, sa.String(255), nullable\u003dFalse),"},{"line_number":45,"context_line":"        sa.Column(u\u0027description\u0027, sa.String(255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_c95c9781","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":18},"updated":"2018-12-12 13:02:21.000000000","message":"ditto","commit_id":"c2c280c1e4e4a30d4423ebe029a067759b10589b"}],"octavia/db/models.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"60bffeab3c7cbf8b6ba23a67088a70776b0ca5f5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 Rackspace #    Copyright 2016 Blue Box, an IBM Company"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_5bc82054","line":1,"updated":"2017-12-19 17:45:10.000000000","message":"This needs to be put back","commit_id":"f67578ae023080dfa4720dfd9287e0410b4f6a05"}],"setup.cfg":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a7a01434d322a07c28a7f642c111aad1d21d3282","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    octavia-status \u003d octavia.cmd.status:main"},{"line_number":55,"context_line":"octavia.api.drivers \u003d"},{"line_number":56,"context_line":"    noop_driver \u003d octavia.api.drivers.noop_driver.driver:NoopProviderDriver"},{"line_number":57,"context_line":"    noop_driver-alt \u003d octavia.api.drivers.noop_driver.driver:NoopProviderDriver"},{"line_number":58,"context_line":"    amphora \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"},{"line_number":59,"context_line":"    # octavia is an alias for backward compatibility"},{"line_number":60,"context_line":"    octavia \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":33,"id":"9fdfeff1_4c64d2e4","line":57,"updated":"2019-01-24 23:21:37.000000000","message":"Wait, what is this for? Did I miss it?","commit_id":"f4f9d6ea1b27444055e6522f1dd53aaecf2de7c6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ddb493d68bc8eb0a6ab7e4e122cd837abf116833","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    octavia-status \u003d octavia.cmd.status:main"},{"line_number":55,"context_line":"octavia.api.drivers \u003d"},{"line_number":56,"context_line":"    noop_driver \u003d octavia.api.drivers.noop_driver.driver:NoopProviderDriver"},{"line_number":57,"context_line":"    noop_driver-alt \u003d octavia.api.drivers.noop_driver.driver:NoopProviderDriver"},{"line_number":58,"context_line":"    amphora \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"},{"line_number":59,"context_line":"    # octavia is an alias for backward compatibility"},{"line_number":60,"context_line":"    octavia \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":33,"id":"9fdfeff1_cc83e2cb","line":57,"in_reply_to":"9fdfeff1_4c64d2e4","updated":"2019-01-25 00:06:24.000000000","message":"octavia/tests/functional/api/v2/test_flavor_profiles.py L237","commit_id":"f4f9d6ea1b27444055e6522f1dd53aaecf2de7c6"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"108af35ce25202695d064e6b221ead7645c8c894","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    octavia-status \u003d octavia.cmd.status:main"},{"line_number":55,"context_line":"octavia.api.drivers \u003d"},{"line_number":56,"context_line":"    noop_driver \u003d octavia.api.drivers.noop_driver.driver:NoopProviderDriver"},{"line_number":57,"context_line":"    noop_driver-alt \u003d octavia.api.drivers.noop_driver.driver:NoopProviderDriver"},{"line_number":58,"context_line":"    amphora \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"},{"line_number":59,"context_line":"    # octavia is an alias for backward compatibility"},{"line_number":60,"context_line":"    octavia \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":33,"id":"9fdfeff1_bdd538e7","line":57,"in_reply_to":"9fdfeff1_cc83e2cb","updated":"2019-01-28 20:51:52.000000000","message":"We have to add a real driver config alias just for testing? seems odd \u003c_\u003c","commit_id":"f4f9d6ea1b27444055e6522f1dd53aaecf2de7c6"}]}
