)]}'
{"trove/taskmanager/models.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"92b6646d36d60755b49848a1c00674cce77575c3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from trove.extensions.mysql import models as mysql_models"},{"line_number":41,"context_line":"from trove.configuration.models import Configuration"},{"line_number":42,"context_line":"from trove.extensions.security_group.models import SecurityGroup"},{"line_number":43,"context_line":"from trove.extensions.security_group.models import SecurityGroupInstanceAssociation  # noqa"},{"line_number":44,"context_line":"from trove.extensions.security_group.models import SecurityGroupRule"},{"line_number":45,"context_line":"from swiftclient.client import ClientException"},{"line_number":46,"context_line":"from trove.instance import models as inst_models"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_014a0580","line":43,"updated":"2014-05-30 21:45:09.000000000","message":"is #noqa  because its too long?","commit_id":"6eb872e6c6c15986ae183cd03a5b330ad27062ca"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"688b83976ca3efafe8baa7a72524f4c9b97813d6","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            SecurityGroup.create(id\u003dresource.physical_resource_id,"},{"line_number":453,"context_line":"                                 name\u003dname, description\u003ddescription,"},{"line_number":454,"context_line":"                                 user\u003dself.context.user,"},{"line_number":455,"context_line":"                                 tenant_id\u003dself.context.tenant)"},{"line_number":456,"context_line":"            SecurityGroupInstanceAssociation.create("},{"line_number":457,"context_line":"                security_group_id\u003dresource.physical_resource_id,"},{"line_number":458,"context_line":"                instance_id\u003dself.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_66861115","line":455,"updated":"2014-06-04 00:48:01.000000000","message":"We should modify the AfterInstanceCreate tests to check for the existence of Security Group and any default rules.  This could have been caught if that was already in a test.","commit_id":"6d456e6362fdc859d2d11a6260680874973f77d0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"19f9096e7c5a8abc408b4c1f40ad704fe9260cd2","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            SecurityGroup.create(id\u003dresource.physical_resource_id,"},{"line_number":453,"context_line":"                                 name\u003dname, description\u003ddescription,"},{"line_number":454,"context_line":"                                 user\u003dself.context.user,"},{"line_number":455,"context_line":"                                 tenant_id\u003dself.context.tenant)"},{"line_number":456,"context_line":"            SecurityGroupInstanceAssociation.create("},{"line_number":457,"context_line":"                security_group_id\u003dresource.physical_resource_id,"},{"line_number":458,"context_line":"                instance_id\u003dself.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_925d0e7c","line":455,"in_reply_to":"1ae5cdf2_66861115","updated":"2014-06-04 07:26:06.000000000","message":"Actually, they are already there. https://github.com/openstack/trove/blob/master/trove/tests/api/instances.py#L770-L842\n\nThis patch fixes security groups integration tests for heat-based provisioning. Tests are failing when trying to run setup method that asks trove for security group for instance, and of course, setup is failing because there\u0027s no security group for given instance.","commit_id":"6d456e6362fdc859d2d11a6260680874973f77d0"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"de2b44d355f9a7d4436c4d5b0e3ed5d6d8316b2e","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            SecurityGroup.create(id\u003dresource.physical_resource_id,"},{"line_number":453,"context_line":"                                 name\u003dname, description\u003ddescription,"},{"line_number":454,"context_line":"                                 user\u003dself.context.user,"},{"line_number":455,"context_line":"                                 tenant_id\u003dself.context.tenant)"},{"line_number":456,"context_line":"            SecurityGroupInstanceAssociation.create("},{"line_number":457,"context_line":"                security_group_id\u003dresource.physical_resource_id,"},{"line_number":458,"context_line":"                instance_id\u003dself.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_e0b10590","line":455,"in_reply_to":"1ae5cdf2_925d0e7c","updated":"2014-06-04 18:52:26.000000000","message":"Thanks for pointing this out.","commit_id":"6d456e6362fdc859d2d11a6260680874973f77d0"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"9fb5209531b75473e3e5e12f430d2155c4c16f7e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from trove.extensions.mysql import models as mysql_models"},{"line_number":41,"context_line":"from trove.configuration.models import Configuration"},{"line_number":42,"context_line":"from trove.extensions.security_group.models import SecurityGroup"},{"line_number":43,"context_line":"from trove.extensions.security_group.models import SecurityGroupInstanceAssociation  # noqa"},{"line_number":44,"context_line":"from trove.extensions.security_group.models import SecurityGroupRule"},{"line_number":45,"context_line":"from swiftclient.client import ClientException"},{"line_number":46,"context_line":"from trove.instance import models as inst_models"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_5558f956","line":43,"updated":"2014-06-18 08:48:22.000000000","message":"Why #noqa?","commit_id":"5ac05e1a914c48bccf17dde9a6e3d539beec9555"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"73ef479d16443eaa5f892dfce53a7c5af8137793","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from trove.extensions.mysql import models as mysql_models"},{"line_number":41,"context_line":"from trove.configuration.models import Configuration"},{"line_number":42,"context_line":"from trove.extensions.security_group.models import SecurityGroup"},{"line_number":43,"context_line":"from trove.extensions.security_group.models import SecurityGroupInstanceAssociation  # noqa"},{"line_number":44,"context_line":"from trove.extensions.security_group.models import SecurityGroupRule"},{"line_number":45,"context_line":"from swiftclient.client import ClientException"},{"line_number":46,"context_line":"from trove.instance import models as inst_models"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_fac5fc3c","line":43,"in_reply_to":"1ae5cdf2_5558f956","updated":"2014-06-21 00:30:13.000000000","message":"This is because the line is too long. flake8 will barf it.\n\nSuggest rewriting with a line wrap like this.\n\n-from trove.extensions.security_group.models import SecurityGroupInstanceAss\n+from trove.extensions.security_group.models \\\n+    import SecurityGroupInstanceAssociation\n\nwhich works (FYI, I tested with flake8). \n\nhere\u0027s the error:\n\nmodels.py:43:80: E501 line too long (83 \u003e 79 characters)\nfrom trove.extensions.security_group.models import SecurityGroupInstanceAsso\nciation","commit_id":"5ac05e1a914c48bccf17dde9a6e3d539beec9555"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"fb0ec22b85895ff846bf1ec52a6c8fa406133489","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from trove.common.remote import create_cinder_client"},{"line_number":40,"context_line":"from trove.extensions.mysql import models as mysql_models"},{"line_number":41,"context_line":"from trove.configuration.models import Configuration"},{"line_number":42,"context_line":"from trove.extensions.security_group import models as sg_models"},{"line_number":43,"context_line":"from swiftclient.client import ClientException"},{"line_number":44,"context_line":"from trove.instance import models as inst_models"},{"line_number":45,"context_line":"from trove.instance.models import BuiltInstance"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab895d6_68990b6e","line":42,"updated":"2014-06-29 09:02:41.000000000","message":"Instead of changing the existing imports, why not just import SecurityGroupInstanceAssociation separately and use that? \n\nThat would reduce the footprint of the required changes, and would minimize regression risk.","commit_id":"1cef16d64bc4d67b9709186149b1fc51570f0aa5"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"7c92cd1951843c58a4f6e39287bf89fb23d85125","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from trove.common.remote import create_cinder_client"},{"line_number":40,"context_line":"from trove.extensions.mysql import models as mysql_models"},{"line_number":41,"context_line":"from trove.configuration.models import Configuration"},{"line_number":42,"context_line":"from trove.extensions.security_group import models as sg_models"},{"line_number":43,"context_line":"from swiftclient.client import ClientException"},{"line_number":44,"context_line":"from trove.instance import models as inst_models"},{"line_number":45,"context_line":"from trove.instance.models import BuiltInstance"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_3b04c314","line":42,"in_reply_to":"dab895d6_56121cb5","updated":"2014-06-30 14:31:19.000000000","message":"why not just wrap the line?\n\nhttps://dev.launchpad.net/PythonStyleGuide\n\nsection \"Multiline imports\"","commit_id":"1cef16d64bc4d67b9709186149b1fc51570f0aa5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c852daead9a6f2ecc584d2becfbd326bd9a727a5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from trove.common.remote import create_cinder_client"},{"line_number":40,"context_line":"from trove.extensions.mysql import models as mysql_models"},{"line_number":41,"context_line":"from trove.configuration.models import Configuration"},{"line_number":42,"context_line":"from trove.extensions.security_group import models as sg_models"},{"line_number":43,"context_line":"from swiftclient.client import ClientException"},{"line_number":44,"context_line":"from trove.instance import models as inst_models"},{"line_number":45,"context_line":"from trove.instance.models import BuiltInstance"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab895d6_56121cb5","line":42,"in_reply_to":"dab895d6_68990b6e","updated":"2014-06-30 09:30:25.000000000","message":"Import line will be too long, longer than 79 symbols, Pep8 check would deny it.","commit_id":"1cef16d64bc4d67b9709186149b1fc51570f0aa5"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"c4f572ebd10e3f275ac6568fc888147190a939dc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"from trove.configuration.models import Configuration"},{"line_number":42,"context_line":"from trove.extensions.security_group.models import ("},{"line_number":43,"context_line":"    SecurityGroup, SecurityGroupRule,"},{"line_number":44,"context_line":"    SecurityGroupInstanceAssociation)"},{"line_number":45,"context_line":"from swiftclient.client import ClientException"},{"line_number":46,"context_line":"from trove.instance import models as inst_models"},{"line_number":47,"context_line":"from trove.instance.models import BuiltInstance"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_eed212d1","line":44,"updated":"2014-07-03 08:28:34.000000000","message":"Let\u0027s follow H301 from the style guide and not import more than one module per line:\nhttp://docs.openstack.org/developer/hacking/#imports\n\nI\u0027d suggest:\n\n from trove.extensions.security_group.models import SecurityGroup\n from trove.extensions.security_group.models import SecurityGroupRule\n from trove.extensions.security_group.models import SecurityGroupInatanceAssociation","commit_id":"3573c9cbf45db704028f0fb4211108c8b3a18295"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8afa5b7424e8564311795b81162b1f71c3942b09","unresolved":false,"context_lines":[{"line_number":41,"context_line":"from trove.configuration.models import Configuration"},{"line_number":42,"context_line":"from trove.extensions.security_group.models import ("},{"line_number":43,"context_line":"    SecurityGroup, SecurityGroupRule,"},{"line_number":44,"context_line":"    SecurityGroupInstanceAssociation)"},{"line_number":45,"context_line":"from swiftclient.client import ClientException"},{"line_number":46,"context_line":"from trove.instance import models as inst_models"},{"line_number":47,"context_line":"from trove.instance.models import BuiltInstance"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_48d92f21","line":44,"updated":"2014-07-03 10:35:41.000000000","message":"denis, what Nikhil is suggesting is this.\n\nfrom trove.extensions.security_group.models import SecurityGroup\nfrom trove.extensions.security_group.models import SecurityGroupRule\nfrom trove.extensions.security_group.models import SecurityGroupInatanceAssociation\n\nBut since those lines would be too long, do this.\n\nfrom trove.extensions.security_group.models import (\nSecurityGroup)\n\nfrom trove.extensions.security_group.models import (\nSecurityGroupRule)\nfrom trove.extensions.security_group.models import (\nSecurityGroupInatanceAssociation)\n\nWhat he is objecting to is your doing three imports on a single (albeit wrapped) line.","commit_id":"3573c9cbf45db704028f0fb4211108c8b3a18295"}],"trove/tests/unittests/taskmanager/test_models.py":[{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"9ce26ad4e466bb96b71439a3a697490a6db6daf7","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def test_create_sg_rules_success(self):"},{"line_number":280,"context_line":"        datastore_manager \u003d \u0027mysql\u0027"},{"line_number":281,"context_line":"        taskmanager_models.sg_models.SecurityGroup.create_for_instance \u003d ("},{"line_number":282,"context_line":"            Mock(return_value\u003d{\u0027id\u0027: uuid.uuid4(),"},{"line_number":283,"context_line":"                               \u0027name\u0027: uuid.uuid4()}))"},{"line_number":284,"context_line":"        taskmanager_models.CONF.get \u003d Mock(return_value\u003dFakeOptGroup())"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_69b82cc8","line":281,"updated":"2014-06-23 13:24:47.000000000","message":"Is is a best practice to re-use the imports or aliases defined in another module? (I realize it was already being done before.)","commit_id":"1b2504781b65e91c8a01f138ae3320d391c56138"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"fb0ec22b85895ff846bf1ec52a6c8fa406133489","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def test_create_sg_rules_success(self):"},{"line_number":280,"context_line":"        datastore_manager \u003d \u0027mysql\u0027"},{"line_number":281,"context_line":"        taskmanager_models.sg_models.SecurityGroup.create_for_instance \u003d ("},{"line_number":282,"context_line":"            Mock(return_value\u003d{\u0027id\u0027: uuid.uuid4(),"},{"line_number":283,"context_line":"                               \u0027name\u0027: uuid.uuid4()}))"},{"line_number":284,"context_line":"        taskmanager_models.CONF.get \u003d Mock(return_value\u003dFakeOptGroup())"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab895d6_08732f4e","line":281,"updated":"2014-06-29 09:02:41.000000000","message":"Just import SecurityGroupInstanceAssociation separately; then all these will not have to be touched. Thia also minimizes regression risk, in case there are other areas in the codebase like this.","commit_id":"1cef16d64bc4d67b9709186149b1fc51570f0aa5"}]}
