)]}'
{"designate/central/service.py":[{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"b568ebbb04b8a8b86185fda43377ad4c7610bcd6","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            return result"},{"line_number":112,"context_line":"        retry_wrapper.__wrapped_function \u003d f"},{"line_number":113,"context_line":"        retry_wrapper.__wrapper_name \u003d \u0027retry\u0027"},{"line_number":114,"context_line":"        return retry_wrapper"},{"line_number":115,"context_line":"    return outer"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_d6b7e4f3","line":114,"updated":"2015-07-23 23:35:44.000000000","message":"Can these attributes be removed? I would prefer that the unit tests not rely on these sorts of code changes, even if they are harmless.","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"b30af029c00b06fdbb8b53cbb7a0bde99ad5beef","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            return result"},{"line_number":112,"context_line":"        retry_wrapper.__wrapped_function \u003d f"},{"line_number":113,"context_line":"        retry_wrapper.__wrapper_name \u003d \u0027retry\u0027"},{"line_number":114,"context_line":"        return retry_wrapper"},{"line_number":115,"context_line":"    return outer"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_8720ec9c","line":114,"in_reply_to":"3a50d1a3_d6b7e4f3","updated":"2015-07-27 10:41:23.000000000","message":"This is related to the unwrap() function in test_basic.py","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"}],"designate/tests/unit/test_central/test_basic.py":[{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"b568ebbb04b8a8b86185fda43377ad4c7610bcd6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        except AttributeError:"},{"line_number":50,"context_line":"            return f"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    return f"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class RwObject(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_e3ea61ac","line":52,"updated":"2015-07-23 23:35:44.000000000","message":"Can you explain why you wanted to do this? What problem were decorated functions causing? I\u0027d like to avoid using this, if possible.","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"b30af029c00b06fdbb8b53cbb7a0bde99ad5beef","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        except AttributeError:"},{"line_number":50,"context_line":"            return f"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    return f"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class RwObject(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_67cda05c","line":52,"in_reply_to":"3a50d1a3_e3ea61ac","updated":"2015-07-27 10:41:23.000000000","message":"The decorators called synchronized_domain, notification, retry and transaction are applied to many methods under unit testing.\n- this breaks the unit testing isolation by executing code outside of the function under test and is an anti-pattern\n- the decorator can (now or in future) mangle the function inputs and outputs making the tests unreliable or not applicable\n- the decorators can contain persistent state (breaking isolation between tests)\n- as a side effect, they make tracebacks a bit lengthy\n\n\nI\u0027m not happy either about those ugly attributes in service.py, e.g.\n+        retry_wrapper.__wrapped_function \u003d f\n+        retry_wrapper.__wrapper_name \u003d \u0027retry\u0027\n\n...but I don\u0027t have a better way to remove the decorators at runtime (and this is still WIP).\nIf you have a cleaner way to remove the decos please let me know :)","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"b568ebbb04b8a8b86185fda43377ad4c7610bcd6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    return f"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class RwObject(object):"},{"line_number":56,"context_line":"    \"\"\"Object mock: raise exception on __setitem__ or __setattr__"},{"line_number":57,"context_line":"    on any item/attr created after initialization."},{"line_number":58,"context_line":"    Allows updating existing items/attrs"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_119f96b5","line":55,"updated":"2015-07-23 23:35:44.000000000","message":"Can this have a more readable name? Like \"WritableObject\", \"ReadWriteObject\", or \"ReadableWriteableObject\" or something a bit clearer.","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"b568ebbb04b8a8b86185fda43377ad4c7610bcd6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.__setitem__(k, v)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class RoObject(RwObject):"},{"line_number":91,"context_line":"    \"\"\"Read-only Object mock: raise exception on unexpected"},{"line_number":92,"context_line":"    __setitem__ or __setattr__"},{"line_number":93,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_d1cdaeb8","line":90,"updated":"2015-07-23 23:35:44.000000000","message":"Same here: \"ReadOnlyObject\" would be a great name.","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"b568ebbb04b8a8b86185fda43377ad4c7610bcd6","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            \u0027update_pool\u0027, \u0027update_pool_attribute\u0027, \u0027update_quota\u0027,"},{"line_number":256,"context_line":"            \u0027update_record\u0027, \u0027update_recordset\u0027, \u0027update_tld\u0027,"},{"line_number":257,"context_line":"            \u0027update_tsigkey\u0027, \u0027update_zone_task\u0027, \u0027commit\u0027, \u0027begin\u0027,"},{"line_number":258,"context_line":"            \u0027rollback\u0027, ])"},{"line_number":259,"context_line":"        attrs \u003d {"},{"line_number":260,"context_line":"            \u0027count_domains.return_value\u0027: 0,"},{"line_number":261,"context_line":"            \u0027find_domain.return_value\u0027: MockDomain(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_a369b927","line":258,"updated":"2015-07-23 23:35:44.000000000","message":"I don\u0027t have a fix for this right now, but it would be nice if we didn\u0027t have to list these methods out like this.","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"},{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"b568ebbb04b8a8b86185fda43377ad4c7610bcd6","unresolved":false,"context_lines":[{"line_number":477,"context_line":"    def test__is_valid_domain_name_invalid_tld(self):"},{"line_number":478,"context_line":"        self.service._is_blacklisted_domain_name \u003d Mock()"},{"line_number":479,"context_line":"        with raises(exceptions.InvalidDomainName):"},{"line_number":480,"context_line":"            self.service._is_valid_domain_name(self.context, \u0027tld.\u0027)"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    def test__is_valid_domain_name_blacklisted(self):"},{"line_number":483,"context_line":"        self.service._is_blacklisted_domain_name \u003d Mock("}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_e37101aa","line":480,"updated":"2015-07-23 23:35:44.000000000","message":"These _is_valid_domain_name tests are doing pretty much the same checks with slightly different data. I\u0027d really like to see this use the parameterized decorator that is used in the functionaltests to make these tests data-driven. This decorator actually generates one test case per entry in the dictionary passed to the \u0027parameterized\u0027 decorator. You add the paramaterized_class decorator to the test class: https://github.com/openstack/designate/blob/master/functionaltests/api/v2/test_recordset.py#L26. And then you add the parameterized decorator to the test method: https://github.com/openstack/designate/blob/master/functionaltests/api/v2/test_recordset.py#L41.\n\nYou should be able to import this decorator from the functionaltests module for now (and then we can possibly find a better place for that decorator in the future).","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"}],"designate/tests/unit/test_pool.py":[{"author":{"_account_id":11662,"name":"Paul Glass","email":"paul.glass@rackspace.com","username":"pglass"},"change_message_id":"b568ebbb04b8a8b86185fda43377ad4c7610bcd6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_log import log as logging"},{"line_number":18,"context_line":"import oslotest.base"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_83f83dc6","line":16,"updated":"2015-07-23 23:35:44.000000000","message":"If you don\u0027t mind, can this file be added later, in a different patch set?","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"},{"author":{"_account_id":16962,"name":"Federico Ceratto","email":"federico.ceratto@gmail.com","username":"ceratto"},"change_message_id":"b30af029c00b06fdbb8b53cbb7a0bde99ad5beef","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_log import log as logging"},{"line_number":18,"context_line":"import oslotest.base"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_acd4efbc","line":16,"in_reply_to":"3a50d1a3_83f83dc6","updated":"2015-07-27 10:41:23.000000000","message":"Done","commit_id":"989b051857740bab920391981f1301bf2f6f74f9"}]}
