)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"436cb3105dbfcd51c5308655666b72c5f976eecf","unresolved":false,"context_lines":[{"line_number":7,"context_line":"WIP: add a table create CLI"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is _create_ not \"do migrations\" so is not suitable for"},{"line_number":10,"context_line":"anything other than a clean devstak (thus not grenade), but is"},{"line_number":11,"context_line":"handle as quick hack to exercise a separated placement from devstack."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I1ff472106610150a587f5286f26a6bd7c1aa84f4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_c1eda725","line":10,"range":{"start_line":10,"start_character":28,"end_line":10,"end_character":35},"updated":"2018-09-05 22:25:39.000000000","message":"devstack","commit_id":"5b7b02d1371db4bd698e3c24b3df657afafddeee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"436cb3105dbfcd51c5308655666b72c5f976eecf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is _create_ not \"do migrations\" so is not suitable for"},{"line_number":10,"context_line":"anything other than a clean devstak (thus not grenade), but is"},{"line_number":11,"context_line":"handle as quick hack to exercise a separated placement from devstack."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I1ff472106610150a587f5286f26a6bd7c1aa84f4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_61ee1322","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":6},"updated":"2018-09-05 22:25:39.000000000","message":"?","commit_id":"5b7b02d1371db4bd698e3c24b3df657afafddeee"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"* placement-manage db sync: sync the db to the \u0027head\u0027 alembic version"},{"line_number":14,"context_line":"* placement-manage db version: report the current version of the db"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"It is written following the examples set by both nova and ironic for"},{"line_number":17,"context_line":"using oslo config driven command line parsing. It is not as full"},{"line_number":18,"context_line":"featured as the nova version (with decorators for argument handling and"},{"line_number":19,"context_line":"help text etc) because we don\u0027t need that yet. There\u0027s plenty of room"},{"line_number":20,"context_line":"for improvement."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The provided unit tests cover that the arg parsing behaves as expected"},{"line_number":23,"context_line":"and that the right commands are connected the right args. The actual"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"3f79a3b5_e3f7e05a","line":20,"range":{"start_line":16,"start_character":0,"end_line":20,"end_character":16},"updated":"2018-11-19 23:00:56.000000000","message":"What do you think about using cliff or something newer than a lot of the existing legacy muck that goes into the nova-manage CLI? I\u0027m thinking about what Stephen was pushing for here:\n\nhttps://review.openstack.org/#/c/433603/","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0500c7628f459c8efa12b246e0a3154692dcb86f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"* placement-manage db sync: sync the db to the \u0027head\u0027 alembic version"},{"line_number":14,"context_line":"* placement-manage db version: report the current version of the db"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"It is written following the examples set by both nova and ironic for"},{"line_number":17,"context_line":"using oslo config driven command line parsing. It is not as full"},{"line_number":18,"context_line":"featured as the nova version (with decorators for argument handling and"},{"line_number":19,"context_line":"help text etc) because we don\u0027t need that yet. There\u0027s plenty of room"},{"line_number":20,"context_line":"for improvement."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The provided unit tests cover that the arg parsing behaves as expected"},{"line_number":23,"context_line":"and that the right commands are connected the right args. The actual"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"3f79a3b5_c9c44545","line":20,"range":{"start_line":16,"start_character":0,"end_line":20,"end_character":16},"in_reply_to":"3f79a3b5_e3f7e05a","updated":"2018-11-19 23:48:42.000000000","message":"I considered it, but then decided not to because of the way that we need to be able to set --config-file and --config-dir and oslo.config just takes care of that and a few others things for us. Also I was trying to get to something asap because the devstack job was hung up on this. Had I known the process was going to extend to now I might have done it differently.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"in runs that use devstack as well as the test_migrations functional"},{"line_number":26,"context_line":"test."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Future changes would include being able to target a specific db"},{"line_number":29,"context_line":"version and (if we can\u0027t avoid it) tools for initiating online"},{"line_number":30,"context_line":"migrations from the command line."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Needed-By: https://review.openstack.org/600162/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"3f79a3b5_83414caa","line":29,"range":{"start_line":28,"start_character":43,"end_line":29,"end_character":7},"updated":"2018-11-19 23:00:56.000000000","message":"Yeah I wondered about this, but it\u0027s probably much weirder with alembic than sqlalchemy-migrate given the \u0027version\u0027 is more of a hash which is a node in a tree rather than the linear versions in sqla-migrate. I\u0027m not sure how useful it is to target a specific schema version anyway.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":26,"context_line":"test."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Future changes would include being able to target a specific db"},{"line_number":29,"context_line":"version and (if we can\u0027t avoid it) tools for initiating online"},{"line_number":30,"context_line":"migrations from the command line."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Needed-By: https://review.openstack.org/600162/"},{"line_number":33,"context_line":"Change-Id: I1ff472106610150a587f5286f26a6bd7c1aa84f4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"3f79a3b5_a33c882d","line":30,"range":{"start_line":29,"start_character":12,"end_line":30,"end_character":33},"updated":"2018-11-19 23:00:56.000000000","message":"I think we\u0027ll need this, see:\n\nhttps://review.openstack.org/#/c/613305/","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"}],"doc/source/cli/index.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cfc2b8fcbe0281515f83da7b4e13266cc7736b91","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":"      Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"      not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"      a copy of the License at"}],"source_content_type":"text/x-rst","patch_set":42,"id":"3f79a3b5_ccda0847","line":1,"updated":"2018-11-20 14:29:12.000000000","message":"I would move this into a placement-manage.rst doc because when we add the placement-status command, I think the cli/index.rst will just be a home page that links to the placement-manage and placement-status docs.","commit_id":"4bf7336bef0016562567e97f180735c6aaf18943"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0674370c91ce5716ee13763b4671091a4d23ab8a","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":"      Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"      not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"      a copy of the License at"}],"source_content_type":"text/x-rst","patch_set":42,"id":"3f79a3b5_ec97c4e9","line":1,"in_reply_to":"3f79a3b5_ccda0847","updated":"2018-11-20 14:50:56.000000000","message":"Done","commit_id":"4bf7336bef0016562567e97f180735c6aaf18943"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1d42bacbe1e821cfb47ef384c31047ecf3c842a3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":":program:`placement-manage` is used to perform administrative tasks with the"},{"line_number":30,"context_line":"placement service. It is designed for use by operators and deployers. At this"},{"line_number":31,"context_line":"time it is solely used for ensuring the correct database tables exist and to"},{"line_number":32,"context_line":"perform database migrations."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Options"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":42,"id":"3f79a3b5_ec5264da","line":32,"range":{"start_line":30,"start_character":69,"end_line":32,"end_character":28},"updated":"2018-11-20 14:27:27.000000000","message":"I would drop this since it will get out of date and I\u0027m not sure people will remember to update this.","commit_id":"4bf7336bef0016562567e97f180735c6aaf18943"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0674370c91ce5716ee13763b4671091a4d23ab8a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":":program:`placement-manage` is used to perform administrative tasks with the"},{"line_number":30,"context_line":"placement service. It is designed for use by operators and deployers. At this"},{"line_number":31,"context_line":"time it is solely used for ensuring the correct database tables exist and to"},{"line_number":32,"context_line":"perform database migrations."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Options"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":42,"id":"3f79a3b5_0c9b2016","line":32,"range":{"start_line":30,"start_character":69,"end_line":32,"end_character":28},"in_reply_to":"3f79a3b5_ec5264da","updated":"2018-11-20 14:50:56.000000000","message":"Done","commit_id":"4bf7336bef0016562567e97f180735c6aaf18943"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c606c778c2f95504ea83a66ac3adf808a45bef6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Command-line Utilities"},{"line_number":15,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"In this section you will find information on placements\u0027s command line"},{"line_number":18,"context_line":"utilities:"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":43,"id":"3f79a3b5_72294a81","line":17,"range":{"start_line":17,"start_character":45,"end_line":17,"end_character":55},"updated":"2018-11-20 14:58:07.000000000","message":"placement\u0027s","commit_id":"ef6e46e2fefd8f9861a3b5f6ede204a8633a49d6"}],"doc/source/cli/placement-manage.rst":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1805ed82189334a0f73cc0afd02ae51aa9afe0de","unresolved":false,"context_lines":[{"line_number":35,"context_line":"The standard pattern for executing a ``placement-manage`` command is::"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"  placement-manage  [-h] [--config-dir DIR] [--config-file PATH]"},{"line_number":38,"context_line":"                    \u003ccategory\u003e \u003ccommand\u003e [\u003cargs\u003e]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Run without arguments to see a list of available command categories::"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-rst","patch_set":44,"id":"3f79a3b5_0c46b957","line":38,"updated":"2018-11-20 19:38:25.000000000","message":"should this include \n\n [--version]\n\n?","commit_id":"7b5218d8e320cc1c939f4cea1eac9869a50c2cf6"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8ad638953e1fd663333d67695f46c85e03572b3a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"The standard pattern for executing a ``placement-manage`` command is::"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"  placement-manage  [-h] [--config-dir DIR] [--config-file PATH]"},{"line_number":38,"context_line":"                    \u003ccategory\u003e \u003ccommand\u003e [\u003cargs\u003e]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Run without arguments to see a list of available command categories::"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-rst","patch_set":44,"id":"3f79a3b5_ac8b0568","line":38,"in_reply_to":"3f79a3b5_0c46b957","updated":"2018-11-20 19:42:36.000000000","message":"It could, but nobody is really even sure what the context of use is for that command. If somebody -h they\u0027ll see it.\n\nWe could do it in a fup if people thought it was useful to be complete. The nova stuff that I copied this from left out the \"[-h] ... PATH]\" but I wanted to include those because the config location stuff is relevant for some situations.","commit_id":"7b5218d8e320cc1c939f4cea1eac9869a50c2cf6"}],"placement/cmd/manage.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"436cb3105dbfcd51c5308655666b72c5f976eecf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# stub for commands"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import sys"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e1ba2309","line":1,"updated":"2018-09-05 22:25:39.000000000","message":"pep8: no license header, imports out of order","commit_id":"5b7b02d1371db4bd698e3c24b3df657afafddeee"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684ff91ed20144e5cc407d4893ff3e7a54b48286","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\"Create the placement tables fresh and new.\"\"\""},{"line_number":33,"context_line":"    base \u003d api_models.API_BASE"},{"line_number":34,"context_line":"    engine \u003d db_api.get_placement_engine()"},{"line_number":35,"context_line":"    base.metadata.create_all(engine, tables\u003dPLACEMENT_TABLES)"},{"line_number":36,"context_line":"    sys.stderr.write(\u0027Created placement tables fresh\\n\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_fde16d2c","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":61},"updated":"2018-09-05 18:21:18.000000000","message":"Will this automatically order based on foreign keys?","commit_id":"5b7b02d1371db4bd698e3c24b3df657afafddeee"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0b9a04ede1ef0f835e72666aebfb06c7673eb460","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\"Create the placement tables fresh and new.\"\"\""},{"line_number":33,"context_line":"    base \u003d api_models.API_BASE"},{"line_number":34,"context_line":"    engine \u003d db_api.get_placement_engine()"},{"line_number":35,"context_line":"    base.metadata.create_all(engine, tables\u003dPLACEMENT_TABLES)"},{"line_number":36,"context_line":"    sys.stderr.write(\u0027Created placement tables fresh\\n\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_bd0455c7","line":35,"range":{"start_line":35,"start_character":4,"end_line":35,"end_character":61},"in_reply_to":"3f79a3b5_fde16d2c","updated":"2018-09-05 18:24:40.000000000","message":"My understanding is that sqlalchemy does some fiddling to get things right when it does create_all. It\u0027s \"smart\", cause \"alchemy\".\n\nOn top of that, I\u0027ve been using this code in placecat for months now and it \"just works\".\n\nI agree that we need to be more sure of it before using it for real if we ever intend to do some kind of non-migration start up, but for the game I\u0027m playing right now, it moves the ball a bit.","commit_id":"5b7b02d1371db4bd698e3c24b3df657afafddeee"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"b0ccc6d4589a492d1cd1cc9e2ac6660036498e12","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Sync to head.\"\"\""},{"line_number":29,"context_line":"    old_version \u003d migration.version()"},{"line_number":30,"context_line":"    migration.upgrade(\u0027head\u0027)"},{"line_number":31,"context_line":"    new_version \u003d migration.version()"},{"line_number":32,"context_line":"    sys.stderr.write(\u0027Synced placement tables to head\\n\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_0b00ceff","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":15},"updated":"2018-10-23 20:45:33.000000000","message":"Why are you worrying about versions in this method? You just need L30.","commit_id":"ed199dae602abb0d42e239b43c777ea1e0a7db26"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f93f7dbad48be7ef0412df2480b34a45967fcf71","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Sync to head.\"\"\""},{"line_number":29,"context_line":"    old_version \u003d migration.version()"},{"line_number":30,"context_line":"    migration.upgrade(\u0027head\u0027)"},{"line_number":31,"context_line":"    new_version \u003d migration.version()"},{"line_number":32,"context_line":"    sys.stderr.write(\u0027Synced placement tables to head\\n\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_4b49e62c","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":15},"in_reply_to":"3f79a3b5_0b00ceff","updated":"2018-10-23 20:55:00.000000000","message":"that was left over from trying to make a more informative message about what versions it changed to and from, I removed the output, but not the getting of the info. However: the version() command doesn\u0027t return a value  so it\u0027s of no use here. I already have the cleanup committed but I was waiting for zuul to complete before pushing it.","commit_id":"ed199dae602abb0d42e239b43c777ea1e0a7db26"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7c8316e4236bcd4526f454ef5b1a2770e2a8f589","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    db_subparser \u003d parser.add_subparsers(dest\u003d\u0027action\u0027)"},{"line_number":53,"context_line":"    sync_parser \u003d db_subparser.add_parser("},{"line_number":54,"context_line":"        \u0027sync\u0027,"},{"line_number":55,"context_line":"        help\u003d_(\"Sync the databakse to the current version.\"))"},{"line_number":56,"context_line":"    sync_parser.set_defaults(func\u003dcommand_object.db_sync)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    version_parser \u003d db_subparser.add_parser("}],"source_content_type":"text/x-python","patch_set":23,"id":"3f79a3b5_3b77620a","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":34},"updated":"2018-11-01 22:12:19.000000000","message":"database","commit_id":"1180b053fc0a20e96e2011d2622823b371666b12"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from placement import db_api"},{"line_number":21,"context_line":"from placement.i18n import _"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"version_info \u003d pbr.version.VersionInfo(\u0027openstack-placement\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class DbCommands(object):"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_c365044c","line":23,"range":{"start_line":23,"start_character":40,"end_line":23,"end_character":59},"updated":"2018-11-19 23:00:56.000000000","message":"This is meant to be the package version, right? In nova this is just \u0027nova\u0027, so why wouldn\u0027t it be \u0027placement\u0027 here?\n\nOh I guess it\u0027s just whatever is in setup.cfg, which is openstack-placement, so this is correct.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0500c7628f459c8efa12b246e0a3154692dcb86f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from placement import db_api"},{"line_number":21,"context_line":"from placement.i18n import _"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"version_info \u003d pbr.version.VersionInfo(\u0027openstack-placement\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class DbCommands(object):"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_69d97125","line":23,"range":{"start_line":23,"start_character":40,"end_line":23,"end_character":59},"in_reply_to":"3f79a3b5_c365044c","updated":"2018-11-19 23:48:42.000000000","message":"When we discussed the name of placement on the mailing list, people got disturbed that \u0027placement\u0027 was too common and wanted something a bit more namespaced. So we squatted upon \u0027openstack-placement\u0027.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def db_sync(self):"},{"line_number":29,"context_line":"        # Let exceptions raise"},{"line_number":30,"context_line":"        migration.upgrade(\u0027head\u0027)"},{"line_number":31,"context_line":"        return 0"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def db_version(self):"},{"line_number":34,"context_line":"        print(migration.version())"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_83794cc7","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":16},"updated":"2018-11-19 23:00:56.000000000","message":"Doesn\u0027t look like this matters because main() always exits with 0 if an exception isn\u0027t raised.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0500c7628f459c8efa12b246e0a3154692dcb86f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def db_sync(self):"},{"line_number":29,"context_line":"        # Let exceptions raise"},{"line_number":30,"context_line":"        migration.upgrade(\u0027head\u0027)"},{"line_number":31,"context_line":"        return 0"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def db_version(self):"},{"line_number":34,"context_line":"        print(migration.version())"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_e9c4a13b","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":16},"in_reply_to":"3f79a3b5_83794cc7","updated":"2018-11-19 23:48:42.000000000","message":"Yeah, this is a leftover from some early messing around with return codes. I was undecided. It needs to settle out to something sane.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    # Use an additional SubCommandOpt for each new sub command."},{"line_number":61,"context_line":"    command_opt \u003d cfg.SubCommandOpt("},{"line_number":62,"context_line":"        \u0027db\u0027, dest\u003d\u0027command\u0027, title\u003d\u0027Command\u0027, help\u003d_(\u0027Available DB commands\u0027),"},{"line_number":63,"context_line":"        handler\u003dadd_command_parsers)"},{"line_number":64,"context_line":"    return [command_opt]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_06ec6a26","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":35},"updated":"2018-11-19 23:00:56.000000000","message":"So what does this do when we have more categories besides \"db\"? Will add_command_parsers add the same sub-commands to all of them? e.g. nova-manage has db and cell_v2, and with this it seems like \u0027sync\u0027 and \u0027version\u0027 would be added to both of those categories as sub-commands, which would be wrong.\n\nMaybe at that point add_command_parsers just becomes \"add_db_command_parsers\" and then we have separate subcommand parsers per category?","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0500c7628f459c8efa12b246e0a3154692dcb86f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    # Use an additional SubCommandOpt for each new sub command."},{"line_number":61,"context_line":"    command_opt \u003d cfg.SubCommandOpt("},{"line_number":62,"context_line":"        \u0027db\u0027, dest\u003d\u0027command\u0027, title\u003d\u0027Command\u0027, help\u003d_(\u0027Available DB commands\u0027),"},{"line_number":63,"context_line":"        handler\u003dadd_command_parsers)"},{"line_number":64,"context_line":"    return [command_opt]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_09f9dd80","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":35},"in_reply_to":"3f79a3b5_06ec6a26","updated":"2018-11-19 23:48:42.000000000","message":"Probably the latter, unless we want to do a functools.partial thing like nova does. I had something like that in an early version, but it was getting in the way of me understanding what was going on while testing  input edge cases.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d94a084edcdbaa077f325a9cdb2fed11b645a2d8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    # Use an additional SubCommandOpt for each new sub command."},{"line_number":61,"context_line":"    command_opt \u003d cfg.SubCommandOpt("},{"line_number":62,"context_line":"        \u0027db\u0027, dest\u003d\u0027command\u0027, title\u003d\u0027Command\u0027, help\u003d_(\u0027Available DB commands\u0027),"},{"line_number":63,"context_line":"        handler\u003dadd_command_parsers)"},{"line_number":64,"context_line":"    return [command_opt]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_aca78c0a","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":35},"in_reply_to":"3f79a3b5_09f9dd80","updated":"2018-11-20 14:23:54.000000000","message":"\u003e Probably the latter, unless we want to do a functools.partial thing\n \u003e like nova does. I had something like that in an early version, but\n \u003e it was getting in the way of me understanding what was going on\n \u003e while testing  input edge cases.\n\nOh I guess I didn\u0027t think about functools.partial, which is always a nice trick in the bag if needed, but hard to grok at times and therefore hard to maintain.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    return [command_opt]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def main():"},{"line_number":68,"context_line":"    CONF \u003d conf.CONF"},{"line_number":69,"context_line":"    command_opts \u003d setup_commands()"},{"line_number":70,"context_line":"    CONF.register_cli_opts(command_opts)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_e634ced9","line":67,"updated":"2018-11-19 23:00:56.000000000","message":"At some point, might want to adjust default log levels so you don\u0027t get DEBUG and stuff out of the lower-level libraries, as seen here:\n\nhttp://logs.openstack.org/62/600162/14/check/tempest-full/40b37d8/controller/logs/devstacklog.txt.gz#_2018-11-16_10_36_38_498\n\n2018-11-16 10:36:38.498 | + lib/placement:init_placement:154         :   /usr/local/bin/placement-manage db sync\n2018-11-16 10:36:39.656 | INFO  [alembic.runtime.migration] Context impl MySQLImpl.\n2018-11-16 10:36:39.656 | INFO  [alembic.runtime.migration] Will assume non-transactional DDL.\n2018-11-16 10:36:39.683 | INFO  [alembic.runtime.migration] Running upgrade  -\u003e b4ed3a175331, Initial\n\nBut that\u0027s INFO level logging which is likely OK. If we need to filter the logging levels we can always add that in later.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"510471668c3af76eee9e8fc740b1e66b005a91c8","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    return [command_opt]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def main():"},{"line_number":68,"context_line":"    CONF \u003d conf.CONF"},{"line_number":69,"context_line":"    command_opts \u003d setup_commands()"},{"line_number":70,"context_line":"    CONF.register_cli_opts(command_opts)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_dbd08059","line":67,"in_reply_to":"3f79a3b5_e634ced9","updated":"2018-11-20 11:44:40.000000000","message":"I\u0027m trying to work from the principle of \"don\u0027t fix it until we see it\".","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    command_opts \u003d setup_commands()"},{"line_number":70,"context_line":"    CONF.register_cli_opts(command_opts)"},{"line_number":71,"context_line":"    CONF(sys.argv[1:], project\u003d\u0027placement\u0027,"},{"line_number":72,"context_line":"         version\u003dversion_info.version_string(),"},{"line_number":73,"context_line":"         default_config_files\u003dNone)"},{"line_number":74,"context_line":"    db_api.configure(CONF)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_26a166f7","line":72,"range":{"start_line":72,"start_character":30,"end_line":72,"end_character":44},"updated":"2018-11-19 23:00:56.000000000","message":"FWIW, nova-manage uses version_string_with_package() but I\u0027m not sure how much it matters to anyone.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0500c7628f459c8efa12b246e0a3154692dcb86f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    command_opts \u003d setup_commands()"},{"line_number":70,"context_line":"    CONF.register_cli_opts(command_opts)"},{"line_number":71,"context_line":"    CONF(sys.argv[1:], project\u003d\u0027placement\u0027,"},{"line_number":72,"context_line":"         version\u003dversion_info.version_string(),"},{"line_number":73,"context_line":"         default_config_files\u003dNone)"},{"line_number":74,"context_line":"    db_api.configure(CONF)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_c9f2059d","line":72,"range":{"start_line":72,"start_character":30,"end_line":72,"end_character":44},"in_reply_to":"3f79a3b5_26a166f7","updated":"2018-11-19 23:48:42.000000000","message":"yeah it\u0027s unclear to me how/if this matters at all","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    try:"},{"line_number":77,"context_line":"        func \u003d CONF.command.func"},{"line_number":78,"context_line":"        func()"},{"line_number":79,"context_line":"        sys.exit(0)"},{"line_number":80,"context_line":"    except cfg.NoSuchOptError:"},{"line_number":81,"context_line":"        CONF.print_help()"},{"line_number":82,"context_line":"        sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_033f7cdf","line":79,"range":{"start_line":78,"start_character":8,"end_line":79,"end_character":19},"updated":"2018-11-19 23:00:56.000000000","message":"Should probably rely on the function returning a return code yeah? There are several nova-manage commands that have various exit codes so we probably don\u0027t want to make main() assume the code, but get it from the function. If None is returned, just default to 0.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0500c7628f459c8efa12b246e0a3154692dcb86f","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    try:"},{"line_number":77,"context_line":"        func \u003d CONF.command.func"},{"line_number":78,"context_line":"        func()"},{"line_number":79,"context_line":"        sys.exit(0)"},{"line_number":80,"context_line":"    except cfg.NoSuchOptError:"},{"line_number":81,"context_line":"        CONF.print_help()"},{"line_number":82,"context_line":"        sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_a9e789d7","line":79,"range":{"start_line":78,"start_character":8,"end_line":79,"end_character":19},"in_reply_to":"3f79a3b5_033f7cdf","updated":"2018-11-19 23:48:42.000000000","message":"yeah, see above about being undecided","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1d42bacbe1e821cfb47ef384c31047ecf3c842a3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class DbCommands(object):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def db_sync(self):"},{"line_number":29,"context_line":"        # Let exceptions raise for now, they wil go to stderr."},{"line_number":30,"context_line":"        migration.upgrade(\u0027head\u0027)"},{"line_number":31,"context_line":"        return 0"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"3f79a3b5_0c0b20d4","line":29,"range":{"start_line":29,"start_character":45,"end_line":29,"end_character":48},"updated":"2018-11-20 14:27:27.000000000","message":"will","commit_id":"4bf7336bef0016562567e97f180735c6aaf18943"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0674370c91ce5716ee13763b4671091a4d23ab8a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class DbCommands(object):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def db_sync(self):"},{"line_number":29,"context_line":"        # Let exceptions raise for now, they wil go to stderr."},{"line_number":30,"context_line":"        migration.upgrade(\u0027head\u0027)"},{"line_number":31,"context_line":"        return 0"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"3f79a3b5_6c8bb4c0","line":29,"range":{"start_line":29,"start_character":45,"end_line":29,"end_character":48},"in_reply_to":"3f79a3b5_0c0b20d4","updated":"2018-11-20 14:50:56.000000000","message":"Done","commit_id":"4bf7336bef0016562567e97f180735c6aaf18943"}],"placement/tests/unit/cmd/test_manage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        conf_fixture \u003d config_fixture.Config(self.conf)"},{"line_number":30,"context_line":"        self.useFixture(conf_fixture)"},{"line_number":31,"context_line":"        # Quiet output from argparse (used within oslo_config)."},{"line_number":32,"context_line":"        # If you are debuggin, comment this out might be useful."},{"line_number":33,"context_line":"        self.useFixture(output.CaptureOutput(do_stderr\u003dTrue))"},{"line_number":34,"context_line":"        # We don\u0027t use a database, but we need to set the opt as"},{"line_number":35,"context_line":"        # it\u0027s required for a valid config."}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_86df1a66","line":32,"range":{"start_line":32,"start_character":21,"end_line":32,"end_character":29},"updated":"2018-11-19 23:00:56.000000000","message":"Not sure if this is a typo or you\u0027re jive talkin:\n\nhttps://www.youtube.com/watch?v\u003doALKAh_bL5g","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d94a084edcdbaa077f325a9cdb2fed11b645a2d8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        conf_fixture \u003d config_fixture.Config(self.conf)"},{"line_number":30,"context_line":"        self.useFixture(conf_fixture)"},{"line_number":31,"context_line":"        # Quiet output from argparse (used within oslo_config)."},{"line_number":32,"context_line":"        # If you are debuggin, comment this out might be useful."},{"line_number":33,"context_line":"        self.useFixture(output.CaptureOutput(do_stderr\u003dTrue))"},{"line_number":34,"context_line":"        # We don\u0027t use a database, but we need to set the opt as"},{"line_number":35,"context_line":"        # it\u0027s required for a valid config."}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_8cdad073","line":32,"range":{"start_line":32,"start_character":21,"end_line":32,"end_character":29},"in_reply_to":"3f79a3b5_29313959","updated":"2018-11-20 14:23:54.000000000","message":"Also, for debugging, we could read the OS_DEBUG env var which nova uses for capturing logging output and such, but it doesn\u0027t look like the placement repo carried that over.\n\n(later)\n\nOr I guess maybe it is via oslotest:\n\nhttps://github.com/openstack/oslotest/blob/master/oslotest/log.py#L67\n\nNeat. Could probably cleanup the StandardLogging fixture in nova using that as well.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0500c7628f459c8efa12b246e0a3154692dcb86f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        conf_fixture \u003d config_fixture.Config(self.conf)"},{"line_number":30,"context_line":"        self.useFixture(conf_fixture)"},{"line_number":31,"context_line":"        # Quiet output from argparse (used within oslo_config)."},{"line_number":32,"context_line":"        # If you are debuggin, comment this out might be useful."},{"line_number":33,"context_line":"        self.useFixture(output.CaptureOutput(do_stderr\u003dTrue))"},{"line_number":34,"context_line":"        # We don\u0027t use a database, but we need to set the opt as"},{"line_number":35,"context_line":"        # it\u0027s required for a valid config."}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_29313959","line":32,"range":{"start_line":32,"start_character":21,"end_line":32,"end_character":29},"in_reply_to":"3f79a3b5_86df1a66","updated":"2018-11-19 23:48:42.000000000","message":"Clearly I\u0027m jive talk because I left the \u0027ing\u0027 off \u0027comment\u0027","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0aa6ef5cd8aa19fb47000879f57bc4d2a8fda91d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.useFixture(conf_fixture)"},{"line_number":31,"context_line":"        # Quiet output from argparse (used within oslo_config)."},{"line_number":32,"context_line":"        # If you are debuggin, comment this out might be useful."},{"line_number":33,"context_line":"        self.useFixture(output.CaptureOutput(do_stderr\u003dTrue))"},{"line_number":34,"context_line":"        # We don\u0027t use a database, but we need to set the opt as"},{"line_number":35,"context_line":"        # it\u0027s required for a valid config."},{"line_number":36,"context_line":"        conf_fixture.config(group\u003d\"placement_database\", connection\u003d\u0027sqlite://\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_a6b33635","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":61},"updated":"2018-11-19 23:00:56.000000000","message":"Hadn\u0027t seen this before. In nova we use:\n\nself.output \u003d StringIO()\nself.useFixture(fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.output))\n\n...\n\nself.output.getvalue()\n\nbut having the fixture is probably cool enough.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d94a084edcdbaa077f325a9cdb2fed11b645a2d8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.useFixture(conf_fixture)"},{"line_number":31,"context_line":"        # Quiet output from argparse (used within oslo_config)."},{"line_number":32,"context_line":"        # If you are debuggin, comment this out might be useful."},{"line_number":33,"context_line":"        self.useFixture(output.CaptureOutput(do_stderr\u003dTrue))"},{"line_number":34,"context_line":"        # We don\u0027t use a database, but we need to set the opt as"},{"line_number":35,"context_line":"        # it\u0027s required for a valid config."},{"line_number":36,"context_line":"        conf_fixture.config(group\u003d\"placement_database\", connection\u003d\u0027sqlite://\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_6c8ad465","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":61},"in_reply_to":"3f79a3b5_89416daa","updated":"2018-11-20 14:23:54.000000000","message":"It\u0027s also not used for anything except swallowing the output. At some point when we actually have tests that want to read stuff from the output, we\u0027ll see what we like better.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0500c7628f459c8efa12b246e0a3154692dcb86f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.useFixture(conf_fixture)"},{"line_number":31,"context_line":"        # Quiet output from argparse (used within oslo_config)."},{"line_number":32,"context_line":"        # If you are debuggin, comment this out might be useful."},{"line_number":33,"context_line":"        self.useFixture(output.CaptureOutput(do_stderr\u003dTrue))"},{"line_number":34,"context_line":"        # We don\u0027t use a database, but we need to set the opt as"},{"line_number":35,"context_line":"        # it\u0027s required for a valid config."},{"line_number":36,"context_line":"        conf_fixture.config(group\u003d\"placement_database\", connection\u003d\u0027sqlite://\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_89416daa","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":61},"in_reply_to":"3f79a3b5_a6b33635","updated":"2018-11-19 23:48:42.000000000","message":"In this case since consumption was the goal, I just went with the basics provided by oslotest.\n\nIts functionality isn\u0027t quite as luxe as the nova one.","commit_id":"491483c4f98de3206c3eedfb8ec466b9a1025043"}],"setup.cfg":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"dc8ddea9882eb4bd9d94296469bc880d027faf81","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    placement \u003d placement.policies:list_rules"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"console_scripts \u003d"},{"line_number":44,"context_line":"    # TODO(cdent): We will need some kind of placement-manage and"},{"line_number":45,"context_line":"    # placement-status, eventually"},{"line_number":46,"context_line":"    # nova-manage \u003d nova.cmd.manage:main"},{"line_number":47,"context_line":"    # nova-status \u003d nova.cmd.status:main"},{"line_number":48,"context_line":"    placement-manage \u003d placement.cmd.manage:main"},{"line_number":49,"context_line":"wsgi_scripts \u003d"},{"line_number":50,"context_line":"    placement-api \u003d placement.wsgi:init_application"}],"source_content_type":"text/x-ttcn-cfg","patch_set":16,"id":"3f79a3b5_7d498b8b","line":47,"range":{"start_line":44,"start_character":4,"end_line":47,"end_character":40},"updated":"2018-10-30 13:54:50.000000000","message":"Nit: You are adding placement-manage below, so these comments could be amended accordingly.","commit_id":"a7b3306b397b09ba4304270bfe0a1c1d66536481"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a0a84b1b5c963b542bd74615ae6b03fe781041f8","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"console_scripts \u003d"},{"line_number":44,"context_line":"    # TODO(cdent): We will need some kind of placement-status, eventually"},{"line_number":45,"context_line":"    placement-manage \u003d placement.cmd.manage:main"},{"line_number":46,"context_line":"wsgi_scripts \u003d"},{"line_number":47,"context_line":"    placement-api \u003d placement.wsgi:init_application"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-ttcn-cfg","patch_set":40,"id":"3f79a3b5_5e87c9b4","line":45,"updated":"2018-11-14 16:31:37.000000000","message":"I assume we\u0027ll want docs for this...under doc/source/cli - could do that in this change or in a follow up, but I haven\u0027t gone through the rest of this yet.","commit_id":"fb10baafb022b7b13150de66fb27d37aff362da8"}]}
