)]}'
{"octavia/amphorae/DriverExceptions/Exceptions.py":[{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011-2014 OpenStack Foundation,author: Min Wang,German Eichberger"},{"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"},{"line_number":5,"context_line":"# a copy of the License at"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_4d033973","line":2,"updated":"2014-11-06 01:33:05.000000000","message":"Code just written - copyright should be just 2014, not 2011-2014.  Then increment copyright range any year the file is edited.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class AmphoraDriverError(Exception):"},{"line_number":19,"context_line":"    # a super class for all other exceptions and the catch"},{"line_number":20,"context_line":"    message \u003d _(\"A super class for all other exceptions and the catch.\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_ad781df3","line":19,"updated":"2014-11-06 01:33:05.000000000","message":"Agree with Brandon Logan that these comments are redundant and add no meaningful value, so should be removed.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def __unicode__(self):"},{"line_number":34,"context_line":"        return unicode(self.msg)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def use_fatal_exceptions(self):"},{"line_number":37,"context_line":"        return False"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_ad4f3dbc","line":36,"updated":"2014-11-06 01:33:05.000000000","message":"Public methods should have a docstring in OpenStack format, meaning not starting with a space and with proper punctuation.  See PEP 257.  Bonus if you want to go multi-line with full Sphinx semantics for parameters and return values, but  for simple methods like this, a simple one-liner will suffice:\n\"\"\"Return True if use fatal exceptions by reraising them.\"\"\"","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"55f2e7d97eb3d659951fc8921bdbf6696eb4cab7","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":41,"context_line":"    # this amphora couldn\u0027t be found/ was deleted by nova"},{"line_number":42,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"},{"line_number":43,"context_line":"    # pass"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_8ad7c7be","line":41,"updated":"2014-11-05 22:39:23.000000000","message":"Nit: Don\u0027t think this comment is needed since it is the string of the message.  If the message changes so does this comment.\n\nSame goes for all below.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12403,"name":"Al Miller","email":"al.miller@ajmiller.net","username":"ajmiller"},"change_message_id":"3544e0f7e8a2518f671e8d0344c198827c0ea93b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":41,"context_line":"    # this amphora couldn\u0027t be found/ was deleted by nova"},{"line_number":42,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"},{"line_number":43,"context_line":"    # pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_db2fd5f4","line":42,"updated":"2014-11-06 16:28:44.000000000","message":"General question about grammar.  Does OpenStack have a convention about using contractions (\"couldn\u0027t vs could not\")?  Some projects don\u0027t like using them in messages for stylisticand practical reasons.  The practical reason is that the apostrophe also has special meaning as a single quote, which can be a slight hassle when grepping log files for that word.\n\nContractions also give a less formal feel, which is neither good or bad, but something to be aware of","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"ac27dbceeed7d3229b221ab82a2ba0cdee1d9562","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":41,"context_line":"    # this amphora couldn\u0027t be found/ was deleted by nova"},{"line_number":42,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"},{"line_number":43,"context_line":"    # pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_721efe64","line":42,"in_reply_to":"7a8c0949_db2fd5f4","updated":"2014-11-07 00:25:30.000000000","message":"I could support not using contractions.  Not sure if there is an openstack rule on it though.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"55f2e7d97eb3d659951fc8921bdbf6696eb4cab7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":41,"context_line":"    # this amphora couldn\u0027t be found/ was deleted by nova"},{"line_number":42,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"},{"line_number":43,"context_line":"    # pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class InfoException(AmphoraDriverError):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_eaef6b85","line":43,"updated":"2014-11-05 22:39:23.000000000","message":"Nit: This comment is needed either.  Since message exists in the class that is the last line in the class.\n\nSame goes for all below.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    # pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class InfoException(AmphoraDriverError):"},{"line_number":47,"context_line":"    # gathering information about this amphora failed"},{"line_number":48,"context_line":"    message \u003d _(\u0027gathering information about this amphora failed\u0027)"},{"line_number":49,"context_line":"    # pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_0d7e91e4","line":46,"updated":"2014-11-06 01:33:05.000000000","message":"These classes should be all be labeled Errors like:\nNotFoundError\n\nor labeled Exceptions:\nInfoException\n\nor implied (less verbose but not as clear):\nDeleteFailed\n\nBut they should not be randomly named.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class SuspendFaied(AmphoraDriverError):"},{"line_number":89,"context_line":"    # this load balancer couldn\u0027t be suspended"},{"line_number":90,"context_line":"    message \u003d _(\u0027this load balancer couldn\\\u0027t be suspended\u0027)"},{"line_number":91,"context_line":"    # pass"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_6d40f5a5","line":89,"updated":"2014-11-06 01:33:05.000000000","message":"SuspendFailed, not SuspendFaied.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12403,"name":"Al Miller","email":"al.miller@ajmiller.net","username":"ajmiller"},"change_message_id":"3544e0f7e8a2518f671e8d0344c198827c0ea93b","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class ListenerProvisioningError(ProvisioningErrors):"},{"line_number":111,"context_line":"    # could not provision Listener"},{"line_number":112,"context_line":"    message \u003d _(\u0027could not provision Listener\u0027)"},{"line_number":113,"context_line":"    # pass"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_3b27f913","line":112,"updated":"2014-11-06 16:28:44.000000000","message":"Now here the code switches to not using contractions.  From a usability perspective, I would prefer consistency so that if I am searching log files for things that could not be done, I can just search for \"couldn\\\u0027t\" or \"could not\", but not have to do both.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"671e58febebc99110744466f0f39f7f14719ab3c","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class InfoException(AmphoraDriverError):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_adc6bd47","line":44,"updated":"2014-11-07 18:34:10.000000000","message":"I don\u0027t think stating \"deleted by nova\" is appropriate here.  Aren\u0027t there other ways to lose connectivity to an amphora other than just nova deletion?","commit_id":"295392b28bbb3fd24142a07668ab8c2b91c14487"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"671e58febebc99110744466f0f39f7f14719ab3c","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class ProvisioningErrors(AmphoraDriverError):"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    message \u003d _(\u0027those are errors which happen during provisioning\u0027)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"class ListenerProvisioningError(ProvisioningErrors):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_0d04317d","line":99,"updated":"2014-11-07 18:34:10.000000000","message":"Shouldn\u0027t this say something like \"Error provisioning amphora\" or something?  As it is, this message sounds more like documentation of code.","commit_id":"295392b28bbb3fd24142a07668ab8c2b91c14487"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d2c0efc701a3a334fba7b941af275c307c25bfa0","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class InfoException(AmphoraDriverError):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_e0bfc8ce","line":44,"updated":"2014-11-11 05:30:10.000000000","message":"you don\u0027t need the \"/ was deleted by nova\" part.","commit_id":"b0304265793f104eb6476d5e470bf9a7091cbf39"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"ade01dce8da9852f8e5c2c070097d28664213cf3","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class InfoException(AmphoraDriverError):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_d4d8c01f","line":44,"in_reply_to":"5a890539_e0bfc8ce","updated":"2014-11-11 21:47:03.000000000","message":"done","commit_id":"b0304265793f104eb6476d5e470bf9a7091cbf39"}],"octavia/amphorae/drivers/NoopDriver/driver.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"952c4c85565c1e8de7ce84be59adddcc6990753f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# ###################"},{"line_number":23,"context_line":"# Driver API Methods"},{"line_number":24,"context_line":"# ###################"},{"line_number":25,"context_line":"class LoggingMixIn(HealthMixIn, StatsMixIn):"},{"line_number":26,"context_line":"    def update_stats(self, stats):"},{"line_number":27,"context_line":"        LOG.debug(\"Amphora %s no-op, update stats %s\", self.__class__.__name__,"},{"line_number":28,"context_line":"                  stats)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_17ca336e","line":25,"updated":"2014-11-04 16:55:57.000000000","message":"I believe \"Mixin\" is one word.  Generally the \u0027i\u0027 shouldn\u0027t be capitalized.","commit_id":"34b77d9bbf198ef3795a165bb66ecd4136ffc41b"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from octavia.amphorae.drivers import driver_base as driver_base"},{"line_number":17,"context_line":"from octavia.openstack.common import log as logging"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_2dd34dd7","line":15,"updated":"2014-11-06 01:33:05.000000000","message":"Remove extraneous newline.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from octavia.amphorae.drivers import driver_base as driver_base"},{"line_number":17,"context_line":"from octavia.openstack.common import log as logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":"# ###################"},{"line_number":21,"context_line":"# Driver API Methods"},{"line_number":22,"context_line":"# ###################"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_ade65db2","line":19,"updated":"2014-11-06 01:33:05.000000000","message":"Insert newline.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"ac27dbceeed7d3229b221ab82a2ba0cdee1d9562","unresolved":false,"context_lines":[{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":"# ###################"},{"line_number":21,"context_line":"# Driver API Methods"},{"line_number":22,"context_line":"# ###################"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class LoggingMixIn(driver_base.HealthMixin, driver_base.StatsMixin):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_9219aa7b","line":22,"updated":"2014-11-07 00:25:30.000000000","message":"I\u0027m not sure how I feel about this one but its not a big deal.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class LoggingMixIn(driver_base.HealthMixin, driver_base.StatsMixin):"},{"line_number":26,"context_line":"    def update_stats(self, stats):"},{"line_number":27,"context_line":"        LOG.debug(\"Amphora %s no-op, update stats %s\","},{"line_number":28,"context_line":"                  self.__class__.__name__, stats)"},{"line_number":29,"context_line":"        self.stats \u003d stats"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_cde1e99b","line":27,"updated":"2014-11-06 01:33:05.000000000","message":"Docstrings.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"55f2e7d97eb3d659951fc8921bdbf6696eb4cab7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"class NoopManager(object):"},{"line_number":38,"context_line":"    # def create(self,context,obj):"},{"line_number":39,"context_line":"    # LOG.debug(\"LB %s no-op, create %s\","},{"line_number":40,"context_line":"    # self.__class__.__name__, obj.id)"},{"line_number":41,"context_line":"    def __init__(self):"},{"line_number":42,"context_line":"        super(NoopManager, self).__init__()"},{"line_number":43,"context_line":"        self.amphoraconfig \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_0af3d773","line":40,"updated":"2014-11-05 22:39:23.000000000","message":"remove these if they\u0027re not going to be used.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"a4d7608fdbe8a52dc5e870251c17616965765ffb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.amphoraconfig \u003d {}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def update(self, listener, vip):"},{"line_number":46,"context_line":"        LOG.debug(\"Amphora %s no-op, update listener %s,vip %s\","},{"line_number":47,"context_line":"                  self.__class__.__name__, listener.protocol_port,"},{"line_number":48,"context_line":"                  vip.ip_address)"},{"line_number":49,"context_line":"        self.amphoraconfig[(listener.protocol_port,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_20b7d5d9","line":46,"updated":"2014-11-05 19:20:27.000000000","message":"Space behind vip here, and in the following methods.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"55f2e7d97eb3d659951fc8921bdbf6696eb4cab7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.log \u003d log"},{"line_number":98,"context_line":"        self.driver \u003d NoopManager()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def getLogger(self):"},{"line_number":101,"context_line":"        # return the logger to use - this is a way to inject"},{"line_number":102,"context_line":"        # a custom logger for testing, etc"},{"line_number":103,"context_line":"        return self.log"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_0a1d9773","line":100,"updated":"2014-11-05 22:39:23.000000000","message":"get_logger","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"55f2e7d97eb3d659951fc8921bdbf6696eb4cab7","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def getLogger(self):"},{"line_number":101,"context_line":"        # return the logger to use - this is a way to inject"},{"line_number":102,"context_line":"        # a custom logger for testing, etc"},{"line_number":103,"context_line":"        return self.log"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def update(self, listener, vip):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_8a08a72e","line":102,"updated":"2014-11-05 22:39:23.000000000","message":"All of these comments can be removed in favor of docstrings on the abstract base class this inherits from.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"ac27dbceeed7d3229b221ab82a2ba0cdee1d9562","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def getLogger(self):"},{"line_number":101,"context_line":"        # return the logger to use - this is a way to inject"},{"line_number":102,"context_line":"        # a custom logger for testing, etc"},{"line_number":103,"context_line":"        return self.log"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def update(self, listener, vip):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_523662e8","line":102,"in_reply_to":"7a8c0949_8a08a72e","updated":"2014-11-07 00:25:30.000000000","message":"Scratch that.  Comments should be replaced by docstrings that at least describe what the NoopAmphoraLoadBalancerDriver version of these methods do.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"}],"octavia/amphorae/drivers/driver_base.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"952c4c85565c1e8de7ce84be59adddcc6990753f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from octavia.openstack.common import excutils"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class AmphoraLoadBalancerDriver(object):"},{"line_number":19,"context_line":"    def getLogger(self):"},{"line_number":20,"context_line":"        #return the logger to use - this is a way to inject a custom logger for testing, etc"},{"line_number":21,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_b7e87fb5","line":18,"updated":"2014-11-04 16:55:57.000000000","message":"I would like to see this as an abstract base class.  There are also some extra methods in here, and some missing methods.","commit_id":"34b77d9bbf198ef3795a165bb66ecd4136ffc41b"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"952c4c85565c1e8de7ce84be59adddcc6990753f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def use_fatal_exceptions(self):"},{"line_number":103,"context_line":"        return False"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":107,"context_line":"    #this amphora couldn\u0027t be found/ was deleted by nova"},{"line_number":108,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_37dc8f12","line":105,"updated":"2014-11-04 16:55:57.000000000","message":"These errors should be defined in a specific exceptions file in the appropriate directory.","commit_id":"34b77d9bbf198ef3795a165bb66ecd4136ffc41b"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"0625caceb2f42306bef994341a2e88622292f447","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def use_fatal_exceptions(self):"},{"line_number":103,"context_line":"        return False"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class NotFoundError(AmphoraDriverError):"},{"line_number":107,"context_line":"    #this amphora couldn\u0027t be found/ was deleted by nova"},{"line_number":108,"context_line":"    message \u003d _(\u0027this amphora couldn\\\u0027t be found/ was deleted by nova\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_923b919b","line":105,"in_reply_to":"7a8c0949_37dc8f12","updated":"2014-11-04 18:13:36.000000000","message":"need to discuss with German, and make proper change cause he is the initial designer of this structure, but putting exceptions in independent file will definitely make the code much clear","commit_id":"34b77d9bbf198ef3795a165bb66ecd4136ffc41b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"55f2e7d97eb3d659951fc8921bdbf6696eb4cab7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":21,"context_line":"class AmphoraLoadBalancerDriver(object):"},{"line_number":22,"context_line":"    @abc.abstractmethod"},{"line_number":23,"context_line":"    def getLogger(self):"},{"line_number":24,"context_line":"        # return the logger to use - this is a way to inject a custom logger"},{"line_number":25,"context_line":"        # for testing, etc"},{"line_number":26,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_caf8ef4b","line":23,"updated":"2014-11-05 22:39:23.000000000","message":"get_logger","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"55f2e7d97eb3d659951fc8921bdbf6696eb4cab7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    @abc.abstractmethod"},{"line_number":23,"context_line":"    def getLogger(self):"},{"line_number":24,"context_line":"        # return the logger to use - this is a way to inject a custom logger"},{"line_number":25,"context_line":"        # for testing, etc"},{"line_number":26,"context_line":"        pass"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_ca8f0fcb","line":25,"updated":"2014-11-05 22:39:23.000000000","message":"use docstrings instead:\n\nhttp://docs.openstack.org/developer/hacking/#docstrings","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"a4d7608fdbe8a52dc5e870251c17616965765ffb","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    @abc.abstractmethod"},{"line_number":29,"context_line":"    def update(self, listener, vip):"},{"line_number":30,"context_line":"        # update the amphora with a new configuration for the ;listener on vip"},{"line_number":31,"context_line":"        raise NotImplementedError()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @abc.abstractmethod"},{"line_number":34,"context_line":"    def suspend(self, listener, vip):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_40ba21c1","line":31,"updated":"2014-11-05 19:20:27.000000000","message":"The decorator will already throw a \"NotImplementedError\" if someone implements this class without this method.  \"pass\" is sufficient here.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d2c0efc701a3a334fba7b941af275c307c25bfa0","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class AmphoraLoadBalancerDriver(object):"},{"line_number":22,"context_line":"    @abc.abstractmethod"},{"line_number":23,"context_line":"    def get_logger(self):"},{"line_number":24,"context_line":"        \"\"\"return the logger to use."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        this is a way to inject a customer for logger for testing,etc."},{"line_number":27,"context_line":"        :returns: the logger"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_a073004c","line":24,"updated":"2014-11-11 05:30:10.000000000","message":"nit: each sentence should start with a capital letter, here and all below.","commit_id":"b0304265793f104eb6476d5e470bf9a7091cbf39"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"ade01dce8da9852f8e5c2c070097d28664213cf3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class AmphoraLoadBalancerDriver(object):"},{"line_number":22,"context_line":"    @abc.abstractmethod"},{"line_number":23,"context_line":"    def get_logger(self):"},{"line_number":24,"context_line":"        \"\"\"return the logger to use."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        this is a way to inject a customer for logger for testing,etc."},{"line_number":27,"context_line":"        :returns: the logger"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_5404d07a","line":24,"in_reply_to":"5a890539_a073004c","updated":"2014-11-11 21:47:03.000000000","message":"done","commit_id":"b0304265793f104eb6476d5e470bf9a7091cbf39"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d2c0efc701a3a334fba7b941af275c307c25bfa0","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        :returns: return a value list (listener, vip, status flag--update)"},{"line_number":39,"context_line":"        At this moment, we just build the basic structure for testing, will"},{"line_number":40,"context_line":"        add more function along with the development"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        pass"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_c08f2c22","line":41,"updated":"2014-11-11 05:30:10.000000000","message":"need to use the sphinx docstrings markdown of :param: for parameters.  Same for all below.","commit_id":"b0304265793f104eb6476d5e470bf9a7091cbf39"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"ade01dce8da9852f8e5c2c070097d28664213cf3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        :returns: return a value list (listener, vip, status flag--update)"},{"line_number":39,"context_line":"        At this moment, we just build the basic structure for testing, will"},{"line_number":40,"context_line":"        add more function along with the development"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        pass"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_1431685a","line":41,"in_reply_to":"5a890539_c08f2c22","updated":"2014-11-11 21:47:03.000000000","message":"done","commit_id":"b0304265793f104eb6476d5e470bf9a7091cbf39"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"171ef4dbb444d6e23a5c659a46017e2e3fc87616","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def get_logger(self):"},{"line_number":24,"context_line":"        \"\"\"Return the logger to use."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        This is a way to inject a customer for logger for testing,etc."},{"line_number":27,"context_line":"        :returns: the logger"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_3b726311","line":26,"updated":"2014-11-14 16:44:20.000000000","message":"i don\u0027t think \"customer for\" belongs in this.","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"08584db4f356d38a0f17c573428d5d7769757016","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def get_logger(self):"},{"line_number":24,"context_line":"        \"\"\"Return the logger to use."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        This is a way to inject a customer for logger for testing,etc."},{"line_number":27,"context_line":"        :returns: the logger"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_f6cc728b","line":26,"in_reply_to":"5a890539_3b726311","updated":"2014-11-14 16:54:07.000000000","message":"it\u0027s meant to say \"to inject a custom logger for testing,etc.\"","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"171ef4dbb444d6e23a5c659a46017e2e3fc87616","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def update(self, listener, vip):"},{"line_number":33,"context_line":"        \"\"\"Update the amphora with a new configuration"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param listener: listener object, need to use its ip address property"},{"line_number":36,"context_line":"        :type listener: object"},{"line_number":37,"context_line":"        :param vip: vip object, need to use its protocol property"},{"line_number":38,"context_line":"        :type vip: object"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_db55df50","line":35,"updated":"2014-11-14 16:44:20.000000000","message":"listener doesn\u0027t have ip address, vip does","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"fd4dbb29e8c6c54b9be0bea77e8c7ab83540aebf","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def update(self, listener, vip):"},{"line_number":33,"context_line":"        \"\"\"Update the amphora with a new configuration"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param listener: listener object, need to use its ip address property"},{"line_number":36,"context_line":"        :type listener: object"},{"line_number":37,"context_line":"        :param vip: vip object, need to use its protocol property"},{"line_number":38,"context_line":"        :type vip: object"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_e0aae36f","line":35,"in_reply_to":"5a890539_db55df50","updated":"2014-11-14 18:33:27.000000000","message":"in the subclass driver.py, i need to use the property listener.protocol_port,will change it properly","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"171ef4dbb444d6e23a5c659a46017e2e3fc87616","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param listener: listener object, need to use its ip address property"},{"line_number":36,"context_line":"        :type listener: object"},{"line_number":37,"context_line":"        :param vip: vip object, need to use its protocol property"},{"line_number":38,"context_line":"        :type vip: object"},{"line_number":39,"context_line":"        :returns: return a value list (listener, vip, status flag--update)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_1b4cc7c7","line":37,"updated":"2014-11-14 16:44:20.000000000","message":"vip doesn\u0027t have protocol, listener does","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"fd4dbb29e8c6c54b9be0bea77e8c7ab83540aebf","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param listener: listener object, need to use its ip address property"},{"line_number":36,"context_line":"        :type listener: object"},{"line_number":37,"context_line":"        :param vip: vip object, need to use its protocol property"},{"line_number":38,"context_line":"        :type vip: object"},{"line_number":39,"context_line":"        :returns: return a value list (listener, vip, status flag--update)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_c0a16795","line":37,"in_reply_to":"5a890539_1b4cc7c7","updated":"2014-11-14 18:33:27.000000000","message":"in the subclass driver.py, i need to use the property  vip.ip_address,will change it properly","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"171ef4dbb444d6e23a5c659a46017e2e3fc87616","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        pass"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @abc.abstractmethod"},{"line_number":47,"context_line":"    def suspend(self, listener, vip):"},{"line_number":48,"context_line":"        \"\"\"Suspend the running amphora --optional"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        :param listener: listener object, need to use its ip address property"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_db8a3fbe","line":47,"updated":"2014-11-14 16:44:20.000000000","message":"I don\u0027t think we need this method in this driver.  This method woudl go into the compute driver, but we decided recently that we do not need that method, so I definitely do not see why we need this now.\n\nIf this is the counter to the enable method below, then it should just be renamed disable.","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"fd4dbb29e8c6c54b9be0bea77e8c7ab83540aebf","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        pass"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @abc.abstractmethod"},{"line_number":47,"context_line":"    def suspend(self, listener, vip):"},{"line_number":48,"context_line":"        \"\"\"Suspend the running amphora --optional"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        :param listener: listener object, need to use its ip address property"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_40e497e0","line":47,"in_reply_to":"5a890539_b6e02afb","updated":"2014-11-14 18:33:27.000000000","message":"will change its name to be Disable","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"08584db4f356d38a0f17c573428d5d7769757016","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        pass"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @abc.abstractmethod"},{"line_number":47,"context_line":"    def suspend(self, listener, vip):"},{"line_number":48,"context_line":"        \"\"\"Suspend the running amphora --optional"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        :param listener: listener object, need to use its ip address property"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_b6e02afb","line":47,"in_reply_to":"5a890539_db8a3fbe","updated":"2014-11-14 16:54:07.000000000","message":"Disable is likely a better name--\n\nI think suspending a listener is different from suspending an amphora though and likely needed.","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"171ef4dbb444d6e23a5c659a46017e2e3fc87616","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def enable(self, listener, vip):"},{"line_number":63,"context_line":"        \"\"\"Start/enable the listener"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        :param listener: listener object, need to use its ip address property"},{"line_number":66,"context_line":"        :type listener: object"},{"line_number":67,"context_line":"        :param vip : vip object, need to use its protocol property"},{"line_number":68,"context_line":"        :type vip: object"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_1b9127f1","line":65,"updated":"2014-11-14 16:44:20.000000000","message":"same comments as on the update method.","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"fd4dbb29e8c6c54b9be0bea77e8c7ab83540aebf","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def enable(self, listener, vip):"},{"line_number":63,"context_line":"        \"\"\"Start/enable the listener"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        :param listener: listener object, need to use its ip address property"},{"line_number":66,"context_line":"        :type listener: object"},{"line_number":67,"context_line":"        :param vip : vip object, need to use its protocol property"},{"line_number":68,"context_line":"        :type vip: object"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_a0d29bfd","line":65,"in_reply_to":"5a890539_1b9127f1","updated":"2014-11-14 18:33:27.000000000","message":"will change it properly","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"171ef4dbb444d6e23a5c659a46017e2e3fc87616","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def delete(self, listener, vip):"},{"line_number":78,"context_line":"        \"\"\"Delete the listener from the amphora"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        :param listener: listener object, need to use its ip address property"},{"line_number":81,"context_line":"        :type listener: object"},{"line_number":82,"context_line":"        :param vip: vip object, need to use its protocol property"},{"line_number":83,"context_line":"        :type vip: object"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_7bc30bed","line":80,"updated":"2014-11-14 16:44:20.000000000","message":"same comments as on the update method.","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"fd4dbb29e8c6c54b9be0bea77e8c7ab83540aebf","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def delete(self, listener, vip):"},{"line_number":78,"context_line":"        \"\"\"Delete the listener from the amphora"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        :param listener: listener object, need to use its ip address property"},{"line_number":81,"context_line":"        :type listener: object"},{"line_number":82,"context_line":"        :param vip: vip object, need to use its protocol property"},{"line_number":83,"context_line":"        :type vip: object"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_2006ab86","line":80,"in_reply_to":"5a890539_7bc30bed","updated":"2014-11-14 18:33:27.000000000","message":"will change it","commit_id":"19632e50e5ab60a965cefc886ded792254df7201"}],"octavia/tests/base.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"55f2e7d97eb3d659951fc8921bdbf6696eb4cab7","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BaseTestCase(testtools.TestCase):"},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super(BaseTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_ea320b0f","line":28,"updated":"2014-11-05 22:39:23.000000000","message":"I think this file should go under the octavia/tests/unit package instead of just octavia/tests.  Reason being, there will be functional tests and it will seem like the base class for those should inherit from this, which is fine.  But, you would then also need a octavia/tests/unit/base module to follow the same model.  If you just put this in octavia/tests/unit now it\u0027ll be an easy change to add an octavia/tests/base.py when we need it.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"}],"octavia/tests/unit/amphorae/drivers/test_NoopAmphoraLoadBalancerDriver.py":[{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.amphora \u003d models.Amphora()"},{"line_number":51,"context_line":"        self.amphora.id \u003d self.FAKE_UUID_1"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def testgetLogger(self):"},{"line_number":54,"context_line":"        # return the logger to use - this is a way to inject"},{"line_number":55,"context_line":"        #  a custom logger for testing, etc"},{"line_number":56,"context_line":"        self.assertEqual(LOG, self.driver.log)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_8dac4137","line":53,"updated":"2014-11-06 01:33:05.000000000","message":"Chose a method naming convention and stick to it.  Either \"lowercase underscore separated\" like test_update_stats or CamelCase.  But not both.  Unfortunately python libraries are broke here, as the testtools uses the lowerCamelCase \"setUp\" as well as underscore separated like \"attach_log_file\" but do not need to repeat that mistake.  So make all of these methods lowercase underscore separated.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"ac27dbceeed7d3229b221ab82a2ba0cdee1d9562","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.amphora \u003d models.Amphora()"},{"line_number":51,"context_line":"        self.amphora.id \u003d self.FAKE_UUID_1"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def testgetLogger(self):"},{"line_number":54,"context_line":"        # return the logger to use - this is a way to inject"},{"line_number":55,"context_line":"        #  a custom logger for testing, etc"},{"line_number":56,"context_line":"        self.assertEqual(LOG, self.driver.log)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_b24ea66d","line":53,"in_reply_to":"7a8c0949_8dac4137","updated":"2014-11-07 00:25:30.000000000","message":"good catch James.  I\u0027m not sure these even run as tests depending on whether the test runner searches for \u0027test\u0027 or \u0027test_\u0027 for methods to run.  I still prefer \u0027test_\u0027 to begin any methods you want to be run as tests, even if the runner captures \u0027test\u0027.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        #  a custom logger for testing, etc"},{"line_number":56,"context_line":"        self.assertEqual(LOG, self.driver.log)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def testupdate(self):"},{"line_number":59,"context_line":"        # update the amphora with a new configuration"},{"line_number":60,"context_line":"        # for the listener on vip"},{"line_number":61,"context_line":"        self.driver.update(self.listener, self.vip)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_4d7259e6","line":58,"updated":"2014-11-06 01:33:05.000000000","message":"test_update, not testupdate.  Same with all below.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                             self.amphora.id])"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_health(self):"},{"line_number":101,"context_line":"        self.driver.get_health(self.amphora)"},{"line_number":102,"context_line":"        self.assertEqual((self.amphora.id, \u0027get_health\u0027),"},{"line_number":103,"context_line":"                         self.driver.driver.amphoraconfig["},{"line_number":104,"context_line":"                             self.amphora.id])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_0d6851f4","line":101,"updated":"2014-11-06 01:33:05.000000000","message":"test_get_health, not get_health.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"fca93fd98f1611f06bed4f34959dcbcee04f5d48","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                             self.amphora.id])"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_diagnostics(self):"},{"line_number":107,"context_line":"        self.driver.get_diagnostics(self.amphora)"},{"line_number":108,"context_line":"        self.assertEqual((self.amphora.id, \u0027get_diagnostics\u0027),"},{"line_number":109,"context_line":"                         self.driver.driver.amphoraconfig["},{"line_number":110,"context_line":"                             self.amphora.id])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_2d6fcdfe","line":107,"updated":"2014-11-06 01:33:05.000000000","message":"test_get_diagnostics, not get_diagnostics.","commit_id":"9c3a2396727a93f5094084ba34d48b9950925056"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d2c0efc701a3a334fba7b941af275c307c25bfa0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class test_LoggingMixIn(base.TestCase):"},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(test_LoggingMixIn, self).setUp()"},{"line_number":28,"context_line":"        self.mixin \u003d driver.LoggingMixIn()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_009a1463","line":25,"updated":"2014-11-11 05:30:10.000000000","message":"classes don\u0027t need test_ in front, just methods within them.","commit_id":"b0304265793f104eb6476d5e470bf9a7091cbf39"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"ade01dce8da9852f8e5c2c070097d28664213cf3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class test_LoggingMixIn(base.TestCase):"},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(test_LoggingMixIn, self).setUp()"},{"line_number":28,"context_line":"        self.mixin \u003d driver.LoggingMixIn()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_08a148f8","line":25,"in_reply_to":"5a890539_009a1463","updated":"2014-11-11 21:47:03.000000000","message":"I checked the test classes in other folders under project octavia, it seems that those classes start with test, should we keep everything consistent?","commit_id":"b0304265793f104eb6476d5e470bf9a7091cbf39"}],"octavia/tests/unit/amphorae/drivers/test_noop_amphoraloadbalancer_driver.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"2bf194471d92216a509d3ff4d37c477ca6e457ed","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class test_LoggingMixIn(base.TestCase):"},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(test_LoggingMixIn, self).setUp()"},{"line_number":28,"context_line":"        self.mixin \u003d driver.LoggingMixIn()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_88b1afe3","line":25,"updated":"2014-11-12 03:17:09.000000000","message":"I haven\u0027t seen these, but its definitely something I could have overlooked.  Now they may start with \"Test\" and do all camel case which is fine, but starting with \"test_\" is not.  So removing the test_ is still the way to go for this.  Could you point me to where these test classes that start with \"test_\"?","commit_id":"f4e893e0a2e2a0ebbff5452ec36ff80e25f950e6"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"8f9740b79ff1006af0d90bf671b656f89a22e619","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class test_LoggingMixIn(base.TestCase):"},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(test_LoggingMixIn, self).setUp()"},{"line_number":28,"context_line":"        self.mixin \u003d driver.LoggingMixIn()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_95f7f1f4","line":25,"in_reply_to":"5a890539_88b1afe3","updated":"2014-11-12 18:51:26.000000000","message":"Oh Yeah, I noticed that the classes start with Test, the method start with test, and the reference is here :https://github.com/stackforge/octavia/tree/master/octavia/tests/unit/common\n\nso in order to keep things consistent, I suggest that for classes, we can start with \"Test\" and do camel case, please let me know if this works for you.\n\nSorry for the confusion :)","commit_id":"f4e893e0a2e2a0ebbff5452ec36ff80e25f950e6"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"90843c19a66c461d10ff6a576f69c2dc1d6e5734","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class test_LoggingMixIn(base.TestCase):"},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(test_LoggingMixIn, self).setUp()"},{"line_number":28,"context_line":"        self.mixin \u003d driver.LoggingMixIn()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_d56df99a","line":25,"in_reply_to":"5a890539_95f7f1f4","updated":"2014-11-12 18:53:57.000000000","message":"Yeah thats what I\u0027m looking for.  I usually start my test classes with Test, but then sometimes you need helper classes in tests that don\u0027t need to be.  So its really just about the camel case in the class names and the underscores in method names.  Now for methods you want to actually have tests run, they have to start with test_ or unittest will not run them.","commit_id":"f4e893e0a2e2a0ebbff5452ec36ff80e25f950e6"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"080ec9640d244f6980911d3be2950b5f27a4bf35","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class test_LoggingMixIn(base.TestCase):"},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(test_LoggingMixIn, self).setUp()"},{"line_number":28,"context_line":"        self.mixin \u003d driver.LoggingMixIn()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_30b72bda","line":25,"in_reply_to":"5a890539_d56df99a","updated":"2014-11-12 19:44:04.000000000","message":"will  correct the class name in the new patch","commit_id":"f4e893e0a2e2a0ebbff5452ec36ff80e25f950e6"}]}
