)]}'
{"octavia/common/constants.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"713ea7db03e38bfa9962f65ee4697fbaeeb70f25","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                              L7POLICY_ACTION_REDIRECT_TO_URL,"},{"line_number":107,"context_line":"                              L7POLICY_ACTION_REDIRECT_TO_POOL)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"URL_REGEX \u003d (r\u0027\\Ahttp[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.\u0026+]|[!*(),]|\u0027"},{"line_number":110,"context_line":"             r\u0027(?:%[0-9a-fA-F][0-9a-fA-F]))+\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"# Task/Flow constants"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_9fd02ff8","line":109,"updated":"2016-02-22 21:26:44.000000000","message":"Ideally we wouldn\u0027t have to do anything like this directly in our code -- for example:\nhttps://pypi.python.org/pypi/rfc3987\nor\nhttps://pypi.python.org/pypi/validators/","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"24ab2605d881bb78bae1ff6a39f313541974c798","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                              L7POLICY_ACTION_REDIRECT_TO_URL,"},{"line_number":107,"context_line":"                              L7POLICY_ACTION_REDIRECT_TO_POOL)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"URL_REGEX \u003d (r\u0027\\Ahttp[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.\u0026+]|[!*(),]|\u0027"},{"line_number":110,"context_line":"             r\u0027(?:%[0-9a-fA-F][0-9a-fA-F]))+\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"# Task/Flow constants"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_d6e61214","line":109,"in_reply_to":"bae84128_9fd02ff8","updated":"2016-02-23 06:00:31.000000000","message":"+1\nRFC3986 is in the global requirements and includes validation.  Can we use it?\ni.e. assert is_valid_uri","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c3cceabaf57ee59a598d6c1bfa32f50b7c562172","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                              L7POLICY_ACTION_REDIRECT_TO_URL,"},{"line_number":107,"context_line":"                              L7POLICY_ACTION_REDIRECT_TO_POOL)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"URL_REGEX \u003d (r\u0027\\Ahttp[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.\u0026+]|[!*(),]|\u0027"},{"line_number":110,"context_line":"             r\u0027(?:%[0-9a-fA-F][0-9a-fA-F]))+\u0027)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"# Task/Flow constants"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_dfb46283","line":109,"in_reply_to":"bae84128_d6e61214","updated":"2016-02-23 09:12:59.000000000","message":"I\u0027m pretty sure that one is going to be too generic for what we actually want to accomplish here. Also, this is mirroring the validation we do in the neutron-lbaas code...\n\nAnd finally, this works. If we want to use something else, can we please do that in a follow-up patch?","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"}],"octavia/common/validate.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"24ab2605d881bb78bae1ff6a39f313541974c798","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from octavia.common import exceptions"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def url(url):"},{"line_number":29,"context_line":"    \"\"\"Raises an error if the url doesn\u0027t look like a URL.\"\"\""},{"line_number":30,"context_line":"    p \u003d re.compile(constants.URL_REGEX)"},{"line_number":31,"context_line":"    if not p.match(url):"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_d6945244","line":28,"updated":"2016-02-23 06:00:31.000000000","message":"Again, I think we should leverage the rfc3986 validation","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c3cceabaf57ee59a598d6c1bfa32f50b7c562172","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from octavia.common import exceptions"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def url(url):"},{"line_number":29,"context_line":"    \"\"\"Raises an error if the url doesn\u0027t look like a URL.\"\"\""},{"line_number":30,"context_line":"    p \u003d re.compile(constants.URL_REGEX)"},{"line_number":31,"context_line":"    if not p.match(url):"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_ff7686d5","line":28,"in_reply_to":"bae84128_d6945244","updated":"2016-02-23 09:12:59.000000000","message":"So... that\u0027s a simple follow up patch to this one. I\u0027d really prefer not to mess with working code that isn\u0027t badly written given the fragility of keeping this chain together anyway.","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"}],"octavia/db/repositories.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"24ab2605d881bb78bae1ff6a39f313541974c798","unresolved":false,"context_lines":[{"line_number":614,"context_line":"            raise exceptions.NotFound("},{"line_number":615,"context_line":"                resource\u003ddata_models.Pool._name(), id\u003dpool_id)"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def _validate_l7policy_data(self, session, l7policy):"},{"line_number":618,"context_line":"        \"\"\"Does validations on a given L7 policy.\"\"\""},{"line_number":619,"context_line":"        if l7policy.redirect_url and l7policy.redirect_pool_id:"},{"line_number":620,"context_line":"            raise exceptions.InvalidL7PolicyArgs("}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_f67eb617","line":617,"updated":"2016-02-23 06:00:31.000000000","message":"There are some missing unit test branches here:\nhttp://sonar.octavia.io/archive/octavia/4d3ec29a7ad266c0ff3ab480d0666c95985046b7/357/cover/octavia_db_repositories_py.html#n619","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"24ab2605d881bb78bae1ff6a39f313541974c798","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        data_model_list \u003d [p.to_data_model() for p in l7policy_list]"},{"line_number":650,"context_line":"        return data_model_list"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"    def update(self, session, id, **model_kwargs):"},{"line_number":653,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":654,"context_line":"            l7policy_db \u003d session.query(self.model_class).filter_by("},{"line_number":655,"context_line":"                id\u003did).first()"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_76910647","line":652,"updated":"2016-02-23 06:00:31.000000000","message":"This methods also have some missing unit test branches:\nhttp://sonar.octavia.io/archive/octavia/4d3ec29a7ad266c0ff3ab480d0666c95985046b7/357/cover/octavia_db_repositories_py.html#n656","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c3cceabaf57ee59a598d6c1bfa32f50b7c562172","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        data_model_list \u003d [p.to_data_model() for p in l7policy_list]"},{"line_number":650,"context_line":"        return data_model_list"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"    def update(self, session, id, **model_kwargs):"},{"line_number":653,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":654,"context_line":"            l7policy_db \u003d session.query(self.model_class).filter_by("},{"line_number":655,"context_line":"                id\u003did).first()"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_ff5de647","line":652,"in_reply_to":"bae84128_76910647","updated":"2016-02-23 09:12:59.000000000","message":"Again, let\u0027s please chat about these.","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"24ab2605d881bb78bae1ff6a39f313541974c798","unresolved":false,"context_lines":[{"line_number":726,"context_line":"            # to be larger than any existing rule position numbers which will"},{"line_number":727,"context_line":"            # definitely be the case with 2147483647"},{"line_number":728,"context_line":"            model_kwargs.update(position\u003d2147483647)"},{"line_number":729,"context_line":"            if not model_kwargs.get(\u0027id\u0027):"},{"line_number":730,"context_line":"                model_kwargs.update(id\u003duuidutils.generate_uuid())"},{"line_number":731,"context_line":"            l7policy \u003d self.model_class(**model_kwargs)"},{"line_number":732,"context_line":"            self._validate_l7policy_data(session, l7policy)"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_36ac9e8b","line":729,"updated":"2016-02-23 06:00:31.000000000","message":"Missing unit test branch\nhttp://sonar.octavia.io/archive/octavia/4d3ec29a7ad266c0ff3ab480d0666c95985046b7/357/cover/octavia_db_repositories_py.html#n729","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"24ab2605d881bb78bae1ff6a39f313541974c798","unresolved":false,"context_lines":[{"line_number":753,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":754,"context_line":"            l7policy_db \u003d session.query(self.model_class).filter_by("},{"line_number":755,"context_line":"                id\u003did).first()"},{"line_number":756,"context_line":"            if not l7policy_db:"},{"line_number":757,"context_line":"                raise exceptions.NotFound("},{"line_number":758,"context_line":"                    resource\u003ddata_models.L7Policy._name(), id\u003did)"},{"line_number":759,"context_line":"            listener_id \u003d l7policy_db.listener_id"}],"source_content_type":"text/x-python","patch_set":33,"id":"bae84128_76b8e6c8","line":756,"updated":"2016-02-23 06:00:31.000000000","message":"Missing unit test branches\nhttp://sonar.octavia.io/archive/octavia/4d3ec29a7ad266c0ff3ab480d0666c95985046b7/357/cover/octavia_db_repositories_py.html#n756","commit_id":"4d3ec29a7ad266c0ff3ab480d0666c95985046b7"}]}
