)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"e00e0cd27a2a580b45c04f99b5197d08428f062b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Michal Nasiadka \u003cmnasiadka@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-05-26 10:37:09 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Initial jinja2 templates syntax checks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If42b7324b58851a4f0beb3a80c70ca2c9dd729af"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ff570b3c_a49a196b","line":7,"updated":"2020-05-26 16:23:50.000000000","message":"CI:","commit_id":"f8d42a9ca1659925d722da1b70fe6b6559052e65"}],"tests/j2lint.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python3"},{"line_number":2,"context_line":"\"\"\""},{"line_number":3,"context_line":"@author Gerard van Helden \u003cdrm@melp.nl\u003e"},{"line_number":4,"context_line":"@license DBAD, see \u003chttp://www.dbad-license.org/\u003e"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_70e4d1e0","line":1,"updated":"2020-05-18 15:35:23.000000000","message":"linters: H102: Apache 2.0 license header not found","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python3"},{"line_number":2,"context_line":"\"\"\""},{"line_number":3,"context_line":"@author Gerard van Helden \u003cdrm@melp.nl\u003e"},{"line_number":4,"context_line":"@license DBAD, see \u003chttp://www.dbad-license.org/\u003e"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_70fdf16c","line":1,"updated":"2020-05-18 15:35:23.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"\"\"\""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"import os.path"},{"line_number":12,"context_line":"from kolla_ansible import kolla_address, put_address_in_context"},{"line_number":13,"context_line":"from functools import reduce"},{"line_number":14,"context_line":"from jinja2 import BaseLoader, TemplateNotFound, Environment, exceptions"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_50e9cdb4","line":12,"updated":"2020-05-18 15:35:23.000000000","message":"linters: H301: one import per line","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"\"\"\""},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"import os.path"},{"line_number":12,"context_line":"from kolla_ansible import kolla_address, put_address_in_context"},{"line_number":13,"context_line":"from functools import reduce"},{"line_number":14,"context_line":"from jinja2 import BaseLoader, TemplateNotFound, Environment, exceptions"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_50026d70","line":12,"updated":"2020-05-18 15:35:23.000000000","message":"pep8: H301: one import per line","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"import os.path"},{"line_number":12,"context_line":"from kolla_ansible import kolla_address, put_address_in_context"},{"line_number":13,"context_line":"from functools import reduce"},{"line_number":14,"context_line":"from jinja2 import BaseLoader, TemplateNotFound, Environment, exceptions"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class AbsolutePathLoader(BaseLoader):"},{"line_number":17,"context_line":"    def get_source(self, environment, template):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_b0d149fe","line":14,"updated":"2020-05-18 15:35:23.000000000","message":"linters: H301: one import per line","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"import os.path"},{"line_number":12,"context_line":"from kolla_ansible import kolla_address, put_address_in_context"},{"line_number":13,"context_line":"from functools import reduce"},{"line_number":14,"context_line":"from jinja2 import BaseLoader, TemplateNotFound, Environment, exceptions"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class AbsolutePathLoader(BaseLoader):"},{"line_number":17,"context_line":"    def get_source(self, environment, template):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_b0fae971","line":14,"updated":"2020-05-18 15:35:23.000000000","message":"pep8: H301: one import per line","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from functools import reduce"},{"line_number":14,"context_line":"from jinja2 import BaseLoader, TemplateNotFound, Environment, exceptions"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class AbsolutePathLoader(BaseLoader):"},{"line_number":17,"context_line":"    def get_source(self, environment, template):"},{"line_number":18,"context_line":"        if not os.path.exists(template):"},{"line_number":19,"context_line":"            raise TemplateNotFound(template)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_90cec557","line":16,"updated":"2020-05-18 15:35:23.000000000","message":"linters: E302 expected 2 blank lines, found 1","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from functools import reduce"},{"line_number":14,"context_line":"from jinja2 import BaseLoader, TemplateNotFound, Environment, exceptions"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class AbsolutePathLoader(BaseLoader):"},{"line_number":17,"context_line":"    def get_source(self, environment, template):"},{"line_number":18,"context_line":"        if not os.path.exists(template):"},{"line_number":19,"context_line":"            raise TemplateNotFound(template)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_90f7e58b","line":16,"updated":"2020-05-18 15:35:23.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            source \u003d file.read()"},{"line_number":23,"context_line":"        return source, template, lambda: mtime \u003d\u003d os.path.getmtime(template)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def check(template, out, err, env\u003dEnvironment(loader\u003dAbsolutePathLoader())):"},{"line_number":26,"context_line":"    try:"},{"line_number":27,"context_line":"        env.filters[\u0027basename\u0027] \u003d os.path.basename"},{"line_number":28,"context_line":"        env.filters[\u0027bool\u0027] \u003d bool"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_f0d741ed","line":25,"updated":"2020-05-18 15:35:23.000000000","message":"linters: E302 expected 2 blank lines, found 1","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            source \u003d file.read()"},{"line_number":23,"context_line":"        return source, template, lambda: mtime \u003d\u003d os.path.getmtime(template)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def check(template, out, err, env\u003dEnvironment(loader\u003dAbsolutePathLoader())):"},{"line_number":26,"context_line":"    try:"},{"line_number":27,"context_line":"        env.filters[\u0027basename\u0027] \u003d os.path.basename"},{"line_number":28,"context_line":"        env.filters[\u0027bool\u0027] \u003d bool"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_f0f0e193","line":25,"updated":"2020-05-18 15:35:23.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                  % (template, ex.message, ex.filename, ex.lineno))"},{"line_number":41,"context_line":"        return 1"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def main(**kwargs):"},{"line_number":44,"context_line":"    import sys"},{"line_number":45,"context_line":"    try:"},{"line_number":46,"context_line":"        sys.exit(reduce(lambda r, fn: r +"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_d0d4bdeb","line":43,"updated":"2020-05-18 15:35:23.000000000","message":"linters: E302 expected 2 blank lines, found 1","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                  % (template, ex.message, ex.filename, ex.lineno))"},{"line_number":41,"context_line":"        return 1"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def main(**kwargs):"},{"line_number":44,"context_line":"    import sys"},{"line_number":45,"context_line":"    try:"},{"line_number":46,"context_line":"        sys.exit(reduce(lambda r, fn: r +"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_d0edddb7","line":43,"updated":"2020-05-18 15:35:23.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    import sys"},{"line_number":45,"context_line":"    try:"},{"line_number":46,"context_line":"        sys.exit(reduce(lambda r, fn: r +"},{"line_number":47,"context_line":"                        check(fn, sys.stdout, sys.stderr, **kwargs), sys.argv[1:], 0))"},{"line_number":48,"context_line":"    except IndexError:"},{"line_number":49,"context_line":"        sys.stdout.write(\"Usage: j2lint.py filename [filename ...]\\n\")"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_3007f984","line":47,"updated":"2020-05-18 15:35:23.000000000","message":"linters: E501 line too long (86 \u003e 79 characters)","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    import sys"},{"line_number":45,"context_line":"    try:"},{"line_number":46,"context_line":"        sys.exit(reduce(lambda r, fn: r +"},{"line_number":47,"context_line":"                        check(fn, sys.stdout, sys.stderr, **kwargs), sys.argv[1:], 0))"},{"line_number":48,"context_line":"    except IndexError:"},{"line_number":49,"context_line":"        sys.stdout.write(\"Usage: j2lint.py filename [filename ...]\\n\")"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_302c1901","line":47,"updated":"2020-05-18 15:35:23.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    except IndexError:"},{"line_number":49,"context_line":"        sys.stdout.write(\"Usage: j2lint.py filename [filename ...]\\n\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"if __name__ \u003d\u003d \"__main__\":"},{"line_number":52,"context_line":"    main()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_100c75a3","line":51,"updated":"2020-05-18 15:35:23.000000000","message":"linters: E305 expected 2 blank lines after class or function definition, found 1","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2d3bf571f0258430511fe3243275de6773ba38b8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    except IndexError:"},{"line_number":49,"context_line":"        sys.stdout.write(\"Usage: j2lint.py filename [filename ...]\\n\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"if __name__ \u003d\u003d \"__main__\":"},{"line_number":52,"context_line":"    main()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_1031155b","line":51,"updated":"2020-05-18 15:35:23.000000000","message":"pep8: E305 expected 2 blank lines after class or function definition, found 1","commit_id":"f705276e64d8f60b36eec192a104c40277a47e3b"},{"author":{"_account_id":167,"name":"Christian Berendt","email":"berendt@osism.tech","username":"berendt"},"change_message_id":"3474b77f87f964adce78112ffa972d95c95b1d31","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"@author Gerard van Helden \u003cdrm@melp.nl\u003e"},{"line_number":18,"context_line":"@license DBAD, see \u003chttp://www.dbad-license.org/\u003e"},{"line_number":19,"context_line":"@url https://github.com/drm/jinja2-lint"},{"line_number":20,"context_line":"Simple j2 linter, useful for checking jinja2 template syntax"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ff570b3c_acb80d2a","line":18,"updated":"2020-05-28 18:27:49.000000000","message":"This license does not match the license mentioned in line 4.","commit_id":"da9b08f2619c50777b618676abf10142ee0b7a6d"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"e9bf28f191d8c9fcfc74b8a94b0e1bf227ce1ea4","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"@author Gerard van Helden \u003cdrm@melp.nl\u003e"},{"line_number":18,"context_line":"@license DBAD, see \u003chttp://www.dbad-license.org/\u003e"},{"line_number":19,"context_line":"@url https://github.com/drm/jinja2-lint"},{"line_number":20,"context_line":"Simple j2 linter, useful for checking jinja2 template syntax"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_0c87b963","line":18,"in_reply_to":"ff570b3c_acb80d2a","updated":"2020-07-21 09:34:29.000000000","message":"Yes, it\u0027s only a mention of the original license. DBAD is a \"do-whatever-you-like\" type of license (http://dbad-license.org)","commit_id":"da9b08f2619c50777b618676abf10142ee0b7a6d"}],"tox.ini":[{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"d33874977d8f1553e2ce50598f2c1991b76bf10a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"  {[testenv:doc8]commands}"},{"line_number":98,"context_line":"  {[testenv:bandit]commands}"},{"line_number":99,"context_line":"  {[testenv:bashate]commands}"},{"line_number":100,"context_line":"  {[testenv:jinja2]commands}"},{"line_number":101,"context_line":"  {[testenv:yamllint]commands}"},{"line_number":102,"context_line":"  {[testenv:ansible-lint]commands}"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-properties","patch_set":3,"id":"ff570b3c_4427bd65","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":18},"updated":"2020-05-26 16:23:35.000000000","message":"j2lint","commit_id":"f8d42a9ca1659925d722da1b70fe6b6559052e65"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"d33874977d8f1553e2ce50598f2c1991b76bf10a","unresolved":false,"context_lines":[{"line_number":131,"context_line":"deps \u003d {[testenv:linters]deps}"},{"line_number":132,"context_line":"commands \u003d bandit --skip B303 -r ansible kolla_ansible tests tools"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"[testenv:jinja2]"},{"line_number":135,"context_line":"deps \u003d {[testenv:linters]deps}"},{"line_number":136,"context_line":"commands \u003d"},{"line_number":137,"context_line":"  find {toxinidir} -type f -name \"*.j2\" -not -path \"*/.tox/*\" -exec {toxinidir}/tests/j2lint.py \\{\\} +"}],"source_content_type":"text/x-properties","patch_set":3,"id":"ff570b3c_e431b1a4","line":134,"range":{"start_line":134,"start_character":9,"end_line":134,"end_character":15},"updated":"2020-05-26 16:23:35.000000000","message":"j2lint","commit_id":"f8d42a9ca1659925d722da1b70fe6b6559052e65"}]}
