)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fb765c8ff6b28cb39c74cf37895aa49de9adf8f1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Switch to flake8 3.x"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Need to figure out how to migrate tests, if that\u0027s even possible. For"},{"line_number":10,"context_line":"now, I\u0027ve just dropped them \u0027cos it\u0027s easier."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0bb9077f1cea2243b7945e87cfa140f9cf89d558"},{"line_number":13,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_c90efc3b","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":45},"updated":"2019-12-11 21:58:21.000000000","message":"This is no longer true. Should reword.","commit_id":"9df4dfee2f201a21a3ebec51c413f1c0f1e98570"}],"lower-constraints.txt":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cf61c7bf6c8b4cf5d4a96bb927d6b202b0b76333","unresolved":false,"context_lines":[{"line_number":111,"context_line":"pycadf\u003d\u003d2.7.0"},{"line_number":112,"context_line":"pycparser\u003d\u003d2.18"},{"line_number":113,"context_line":"pyflakes\u003d\u003d2.0.0"},{"line_number":114,"context_line":"pycodestyle\u003d\u003d2.4.0"},{"line_number":115,"context_line":"pyinotify\u003d\u003d0.9.6"},{"line_number":116,"context_line":"pyroute2\u003d\u003d0.5.4"},{"line_number":117,"context_line":"PyJWT\u003d\u003d1.7.0"}],"source_content_type":"text/plain","patch_set":3,"id":"3fa7e38b_f12efd8b","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":18},"updated":"2020-01-14 11:49:24.000000000","message":"nit: since you removed pycodestyle form the test requiremetn we could proably remove it here as well","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4ed97c2cf24fac02a9ac056ea933ed99f82bd31a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"pycadf\u003d\u003d2.7.0"},{"line_number":112,"context_line":"pycparser\u003d\u003d2.18"},{"line_number":113,"context_line":"pyflakes\u003d\u003d2.0.0"},{"line_number":114,"context_line":"pycodestyle\u003d\u003d2.4.0"},{"line_number":115,"context_line":"pyinotify\u003d\u003d0.9.6"},{"line_number":116,"context_line":"pyroute2\u003d\u003d0.5.4"},{"line_number":117,"context_line":"PyJWT\u003d\u003d1.7.0"}],"source_content_type":"text/plain","patch_set":3,"id":"3fa7e38b_3177b53f","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":18},"in_reply_to":"3fa7e38b_f12efd8b","updated":"2020-01-14 12:12:04.000000000","message":"lower-constraints is essentially the output of \u0027pip freeze\u0027 with the lowest version of each package in \u0027requirements.txt\u0027 and \u0027test-requirements.txt\u0027 installed. We can removed it from \u0027test-requirements.txt\u0027 because we no longer import it directly, but it must stay here because we get it implicitly from flake8 and therefore it\u0027s present in the venv.","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"}],"nova/hacking/checks.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0eaf82752360c6810b616ae29f9306732aac4670","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    \"\"\"Decorate flake8_asserts functions\"\"\""},{"line_number":136,"context_line":"    _func.name \u003d _func.__name__"},{"line_number":137,"context_line":"    _func.version \u003d \u00270.1\u0027"},{"line_number":138,"context_line":"    _func.code \u003d _func.__name__.upper()"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    return _func"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_79045a7e","line":138,"range":{"start_line":138,"start_character":4,"end_line":138,"end_character":39},"updated":"2019-12-13 13:03:46.000000000","message":"wont this make the funciton not executable because you replaced the code or is it just not parseable by flake8 so it will skip it. basically i dont know why this decorator is a thing can you explain in a comment/doc string","commit_id":"9df4dfee2f201a21a3ebec51c413f1c0f1e98570"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8d9e1f4c6e9a2e96db3eb5f7a9dbc4c68024648a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    \"\"\"Decorate flake8_asserts functions\"\"\""},{"line_number":136,"context_line":"    _func.name \u003d _func.__name__"},{"line_number":137,"context_line":"    _func.version \u003d \u00270.1\u0027"},{"line_number":138,"context_line":"    _func.code \u003d _func.__name__.upper()"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    return _func"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d2a1a393","line":138,"range":{"start_line":138,"start_character":4,"end_line":138,"end_character":39},"in_reply_to":"3fa7e38b_79045a7e","updated":"2019-12-16 16:26:06.000000000","message":"It\u0027s setting attributes on the function. It\u0027s a weird one but you can do it. I copied this from hacking so a comment would be a good call.","commit_id":"9df4dfee2f201a21a3ebec51c413f1c0f1e98570"}],"nova/virt/hardware.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0eaf82752360c6810b616ae29f9306732aac4670","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from nova import objects"},{"line_number":32,"context_line":"from nova.objects import fields"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"if False:"},{"line_number":35,"context_line":"    from typing import List, Optional, Set, Tuple"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_59a87e89","line":35,"range":{"start_line":34,"start_character":1,"end_line":35,"end_character":49},"updated":"2019-12-13 13:03:46.000000000","message":"let do this properly.\n\nthis has two issues first you are doing multiple imports on the same line which is a flake8 issue. second once we merge\nhttps://review.opendev.org/#/c/698890/ we can use the native support and get rid of the typeing comments and use use the native typing syntax below. as a result the imports will not be considered unused. new version of flake8 are smart enough to not consider it unused either if you use the comments if you prefer to do the convertions form comment to native form seperatly.","commit_id":"9df4dfee2f201a21a3ebec51c413f1c0f1e98570"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cf61c7bf6c8b4cf5d4a96bb927d6b202b0b76333","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import itertools"},{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"import re"},{"line_number":20,"context_line":"from typing import List, Optional, Set, Tuple"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import os_resource_classes as orc"},{"line_number":23,"context_line":"import os_traits"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_313575dd","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":45},"updated":"2020-01-14 11:49:24.000000000","message":"+1 thanks for making this an import\n\nalthough normally we would add a space between the import lines and from lines but its fine.","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d15fdf88780d7eed61d42224a8c267a8bc7eb8d2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import itertools"},{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"import re"},{"line_number":20,"context_line":"from typing import List, Optional, Set, Tuple"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import os_resource_classes as orc"},{"line_number":23,"context_line":"import os_traits"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_c86eb3c7","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":45},"in_reply_to":"3fa7e38b_2c8e7e33","updated":"2020-01-14 14:48:41.000000000","message":"https://docs.python.org/3/library/typing.html :)","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"31eb17b802fce03112604545a33af96146243dfa","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import itertools"},{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"import re"},{"line_number":20,"context_line":"from typing import List, Optional, Set, Tuple"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import os_resource_classes as orc"},{"line_number":23,"context_line":"import os_traits"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_31c5753f","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":45},"in_reply_to":"3fa7e38b_313575dd","updated":"2020-01-14 12:14:41.000000000","message":"The imports section gets a little too noisy if we do this so I\u0027ve added an exception for the hacking check like we do for oslo.i18n. Also note that I\u0027m importing objects themselves, which we don\u0027t normally do, because otherwise the function declarations (or \u0027type\u0027 comments, for Python 2) get too long and fugly","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bafb13af7c5a84cb19ffb8dd3bd5ab26aed1478f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import itertools"},{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"import re"},{"line_number":20,"context_line":"from typing import List, Optional, Set, Tuple"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import os_resource_classes as orc"},{"line_number":23,"context_line":"import os_traits"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_2c8e7e33","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":45},"in_reply_to":"3fa7e38b_31c5753f","updated":"2020-01-14 13:06:48.000000000","message":"oh just ment doing \n\nimport collections\nimport fractions\nimport itertools\nimport math\nimport re\n\nfrom typing import List, Optional, Set, Tuple\n\n\nso its \n\nimports statements from external/standard libs\n\u003cnew line\u003e\nfrom statement from external/standard libs\n\u003cnew line\u003e\nimports statements from other openstack project\n\u003cnew line\u003e\nfrom statement from  other openstack project\n\u003cnew line\u003e\nimports statements from nova\n\u003cnew line\u003e\nfrom statement from  nova\n\u003cnew line\u003e\n\nthat is how we should be grouping imports","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"47d23176dc005c5f9978b9951f06dee690b36738","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import itertools"},{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"import re"},{"line_number":20,"context_line":"from typing import List, Optional, Set, Tuple"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import os_resource_classes as orc"},{"line_number":23,"context_line":"import os_traits"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_a821f751","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":45},"in_reply_to":"3fa7e38b_88419b0b","updated":"2020-01-14 14:56:46.000000000","message":"Oh, sorry, I thought you were suggesting that typing was a third part library and belonged in the below group. FWIW, the import checker defined by hacking ignores the \u0027from\u0027 and \u0027import\u0027 keywords - it just check the symbols in between so this is technically fine","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e2b6bb6fcc8c2d067bc469425fdc1607bef33460","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import itertools"},{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"import re"},{"line_number":20,"context_line":"from typing import List, Optional, Set, Tuple"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import os_resource_classes as orc"},{"line_number":23,"context_line":"import os_traits"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_88419b0b","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":45},"in_reply_to":"3fa7e38b_c86eb3c7","updated":"2020-01-14 14:54:02.000000000","message":"im not sure how that is relevant i did not say dont do \n\"from typing import List, Optional, Set, Tuple\"\nwith multple on the same line.\n\ni just suggested add a new line before the from.\nanyway im not askign you to respin this just annoys me if we mix import and from statements in the same group as it make puttign the imports/froms in alphbetical order much harder.","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bafb13af7c5a84cb19ffb8dd3bd5ab26aed1478f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_log import log as logging"},{"line_number":25,"context_line":"from oslo_utils import strutils"},{"line_number":26,"context_line":"from oslo_utils import units"},{"line_number":27,"context_line":"import six"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import nova.conf"},{"line_number":30,"context_line":"from nova import exception"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_2c775e3f","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":10},"updated":"2020-01-14 13:06:48.000000000","message":"if you dont do that you get inconsistencies like six being imported here or trying to figure out how import ... and from ... will need to be ordered as different tool interpret the analphabetic ordering differently. anyway it just a nit but at some point i would like to fix this and add a hacking check to prevent it but it never been worth the time.","commit_id":"2169a00d5db964eef4acd0c89a9ee60ab9f9a533"}],"test-requirements.txt":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7566147da1910a5aa46422a45584af09fe32e8fe","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# of appearance. Changing the order has an impact on the overall integration"},{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d2.0\u003c3.0"},{"line_number":6,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":7,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":8,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"3fa7e38b_713b94c8","line":5,"range":{"start_line":5,"start_character":12,"end_line":5,"end_character":16},"updated":"2020-01-20 14:28:10.000000000","message":"should we cap with 2.1.0 ? because if minor version change enables some rule which fails nova to pass, then capping with 2.1.0 will protect it.","commit_id":"e3da87a45dc9302c1c9d9418ed2b80a8c68d1507"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"140dcae50d62b26c7e27c16191cbb67883c028f1","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# of appearance. Changing the order has an impact on the overall integration"},{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d2.0\u003c3.0"},{"line_number":6,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":7,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":8,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"3fa7e38b_b1782c7e","line":5,"range":{"start_line":5,"start_character":12,"end_line":5,"end_character":16},"in_reply_to":"3fa7e38b_713b94c8","updated":"2020-01-20 14:29:55.000000000","message":"Not a bad idea. I can submit a follow-up","commit_id":"e3da87a45dc9302c1c9d9418ed2b80a8c68d1507"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"46fd1af2d30e3cbdc7addeb3957030b01e38d18f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# of appearance. Changing the order has an impact on the overall integration"},{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d2.0\u003c3.0"},{"line_number":6,"context_line":"coverage!\u003d4.4,\u003e\u003d4.0 # Apache-2.0"},{"line_number":7,"context_line":"ddt\u003e\u003d1.0.1 # MIT"},{"line_number":8,"context_line":"fixtures\u003e\u003d3.0.0 # Apache-2.0/BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"3fa7e38b_5111b8f7","line":5,"range":{"start_line":5,"start_character":12,"end_line":5,"end_character":16},"in_reply_to":"3fa7e38b_b1782c7e","updated":"2020-01-20 14:39:23.000000000","message":"https://review.opendev.org/#/c/703405/","commit_id":"e3da87a45dc9302c1c9d9418ed2b80a8c68d1507"}],"tox.ini":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0eaf82752360c6810b616ae29f9306732aac4670","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"[flake8:local-plugins]"},{"line_number":253,"context_line":"extension \u003d"},{"line_number":254,"context_line":"  N307 \u003d checks:import_no_db_in_virt"},{"line_number":255,"context_line":"  N309 \u003d checks:no_db_session_in_public_api"},{"line_number":256,"context_line":"  N310 \u003d checks:use_timeutils_utcnow"},{"line_number":257,"context_line":"  N311 \u003d checks:import_no_virt_driver_import_deps"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fa7e38b_392fc2f5","line":254,"range":{"start_line":254,"start_character":1,"end_line":254,"end_character":36},"updated":"2019-12-13 13:03:46.000000000","message":"is the Flake8ext what allows you  to reference this","commit_id":"9df4dfee2f201a21a3ebec51c413f1c0f1e98570"}]}
