)]}'
{"src/bin/shipyard_airflow/shipyard_airflow/plugins/deployment_status_operator.py":[{"author":{"_account_id":29624,"name":"Alexander Hughes","email":"Alexander.Hughes@pm.me","username":"alexanderhughes"},"change_message_id":"9502c816aa9489c26449c1698cd46522336ece3c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."},{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."},{"line_number":14,"context_line":"\"\"\"Update node labels using Drydock"},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from airflow.plugins_manager import AirflowPlugin"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_6c5b1d2e","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":3},"updated":"2019-05-03 20:56:32.000000000","message":"single line docstring","commit_id":"0dc99c50a410893a8b1a2c66c944e3dbbdccae57"},{"author":{"_account_id":29624,"name":"Alexander Hughes","email":"Alexander.Hughes@pm.me","username":"alexanderhughes"},"change_message_id":"9502c816aa9489c26449c1698cd46522336ece3c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from airflow.plugins_manager import AirflowPlugin"},{"line_number":19,"context_line":"import kubernetes"},{"line_number":20,"context_line":"from kubernetes.client.models.v1_config_map import V1ConfigMap"},{"line_number":21,"context_line":"from kubernetes.client.models.v1_object_meta import V1ObjectMeta"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from shipyard_airflow.control.action.action import Action"},{"line_number":24,"context_line":"from shipyard_airflow.common.document_creator.document_creator import ("},{"line_number":25,"context_line":"    create_document_dict)"},{"line_number":26,"context_line":"try:"},{"line_number":27,"context_line":"    from ucp_base_operator import UcpBaseOperator"},{"line_number":28,"context_line":"except ImportError:"},{"line_number":29,"context_line":"    from shipyard_airflow.plugins.ucp_base_operator import UcpBaseOperator"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_8c75319b","line":29,"range":{"start_line":18,"start_character":0,"end_line":29,"end_character":74},"updated":"2019-05-03 20:56:32.000000000","message":"import order https://docs.openstack.org/hacking/latest/user/hacking.html#import-order-template","commit_id":"0dc99c50a410893a8b1a2c66c944e3dbbdccae57"},{"author":{"_account_id":29624,"name":"Alexander Hughes","email":"Alexander.Hughes@pm.me","username":"alexanderhughes"},"change_message_id":"9502c816aa9489c26449c1698cd46522336ece3c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def _get_k8s_client():"},{"line_number":58,"context_line":"        \"\"\"Create and return a Kubernetes client"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        :retruns: A Kubernetes client object"},{"line_number":61,"context_line":"        :rtype: kubernetes.client"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        # Note that we are using \u0027in_cluster_config\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_ac7a7585","line":60,"range":{"start_line":60,"start_character":9,"end_line":60,"end_character":16},"updated":"2019-05-03 20:56:32.000000000","message":"returns","commit_id":"0dc99c50a410893a8b1a2c66c944e3dbbdccae57"},{"author":{"_account_id":30173,"name":"Ian Pittwood","email":"pittwoodian@gmail.com","username":"ianp"},"change_message_id":"966e9d3b522c22f76ea29e5637c84d0ddec02a67","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def do_execute(self):"},{"line_number":170,"context_line":"        \"\"\"This executes in the parent (UcpBaseOperator) class\u0027s execute"},{"line_number":171,"context_line":"        function."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        Execute the main code for this operator. Create a deployment status"},{"line_number":174,"context_line":"        document and store the document in Kubernetes"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_d69f204e","line":171,"range":{"start_line":171,"start_character":8,"end_line":171,"end_character":17},"updated":"2019-05-06 14:56:43.000000000","message":"The docstring summary should only be on the first line","commit_id":"d71cc71a147cce123e5e9c0f7bb730646753da59"},{"author":{"_account_id":30173,"name":"Ian Pittwood","email":"pittwoodian@gmail.com","username":"ianp"},"change_message_id":"7c13895278155a0323897ef69306b7d598054c8e","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @staticmethod"},{"line_number":69,"context_line":"    def _create_config_map_object(data):"},{"line_number":70,"context_line":"        \"\"\"Create and return a Kubernetes ConfigMap object out of the given"},{"line_number":71,"context_line":"        data"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        :param dict data: The data to put into the config map"},{"line_number":74,"context_line":"        :returns: A config map object made from the given data"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_992b1993","line":71,"range":{"start_line":70,"start_character":11,"end_line":71,"end_character":12},"updated":"2019-05-06 16:28:32.000000000","message":"The first line here should only be a one line summary as well. Sorry I didn\u0027t notice it before.","commit_id":"14945123912164264ea5d9649d053192e6d4f3d7"},{"author":{"_account_id":30173,"name":"Ian Pittwood","email":"pittwoodian@gmail.com","username":"ianp"},"change_message_id":"7c13895278155a0323897ef69306b7d598054c8e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _get_action(self):"},{"line_number":90,"context_line":"        \"\"\"Use the Action class\u0027s static \"from_dict\" function to convert our"},{"line_number":91,"context_line":"        stored action_info dictionary (assigned in UcpBaseOperator) to an"},{"line_number":92,"context_line":"        actual Action object"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        :returns: An action object representing the action associated with this"},{"line_number":95,"context_line":"                  DAG"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_391a2d7d","line":92,"range":{"start_line":90,"start_character":11,"end_line":92,"end_character":28},"updated":"2019-05-06 16:28:32.000000000","message":"ditto","commit_id":"14945123912164264ea5d9649d053192e6d4f3d7"},{"author":{"_account_id":30173,"name":"Ian Pittwood","email":"pittwoodian@gmail.com","username":"ianp"},"change_message_id":"7c13895278155a0323897ef69306b7d598054c8e","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                    doc_settings[\u0027layer\u0027])"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _does_config_map_exist(self):"},{"line_number":127,"context_line":"        \"\"\"Check to see if the config map we want to create already exists and"},{"line_number":128,"context_line":"        return True/False accordingly"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :returns: True if the config map exists, False otherwise"},{"line_number":131,"context_line":"        :rtype: bool"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_591fe16b","line":128,"range":{"start_line":127,"start_character":11,"end_line":128,"end_character":37},"updated":"2019-05-06 16:28:32.000000000","message":"ditto","commit_id":"14945123912164264ea5d9649d053192e6d4f3d7"},{"author":{"_account_id":30173,"name":"Ian Pittwood","email":"pittwoodian@gmail.com","username":"ianp"},"change_message_id":"7c13895278155a0323897ef69306b7d598054c8e","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        return False  # Didn\u0027t find the cfg map we were looking for"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _store_as_config_map(self, data):"},{"line_number":143,"context_line":"        \"\"\"Given some data (presumably a deployment-status document) store"},{"line_number":144,"context_line":"        the data in a Kubernetes config map"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param dict data: The data to store in the config map"},{"line_number":147,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_f9133565","line":144,"range":{"start_line":143,"start_character":11,"end_line":144,"end_character":43},"updated":"2019-05-06 16:28:32.000000000","message":"ditto","commit_id":"14945123912164264ea5d9649d053192e6d4f3d7"},{"author":{"_account_id":29624,"name":"Alexander Hughes","email":"Alexander.Hughes@pm.me","username":"alexanderhughes"},"change_message_id":"89d8867b13f5f3eb12164c83e2da78fa5db78131","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        )"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_action(self):"},{"line_number":89,"context_line":"        \"\"\"Return the an action object from the operator\u0027s stored data"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        Use the Action class\u0027s static \"from_dict\" function to convert our"},{"line_number":92,"context_line":"        stored action_info dictionary (assigned in UcpBaseOperator) to an"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_f4024e0b","line":89,"range":{"start_line":89,"start_character":22,"end_line":89,"end_character":24},"updated":"2019-05-07 14:19:00.000000000","message":"can remove","commit_id":"9a4191814685a2980de9d874f6f85b7611de6d90"}],"src/bin/shipyard_airflow/tests/unit/plugins/test_deployment_status_operator.py":[{"author":{"_account_id":29624,"name":"Alexander Hughes","email":"Alexander.Hughes@pm.me","username":"alexanderhughes"},"change_message_id":"9502c816aa9489c26449c1698cd46522336ece3c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."},{"line_number":14,"context_line":"\"\"\"Tests for check_k8s_node_status functions\"\"\""},{"line_number":15,"context_line":"from unittest import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from airflow.models import BaseOperator"},{"line_number":18,"context_line":"import kubernetes"},{"line_number":19,"context_line":"from kubernetes.client.models.v1_object_meta import V1ObjectMeta"},{"line_number":20,"context_line":"from kubernetes.client.models.v1_config_map import V1ConfigMap"},{"line_number":21,"context_line":"from kubernetes.client.models.v1_config_map_list import V1ConfigMapList"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from shipyard_airflow.control.action.action import Action"},{"line_number":24,"context_line":"from shipyard_airflow.plugins.deployment_status_operator import ("},{"line_number":25,"context_line":"    DeploymentStatusOperator)"},{"line_number":26,"context_line":"from shipyard_airflow.plugins.ucp_base_operator import UcpBaseOperator"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"FAKE_ACTION_DATA \u003d {"},{"line_number":29,"context_line":"    \u0027name\u0027: \u0027action_name\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_cc6249d9","line":26,"range":{"start_line":15,"start_character":0,"end_line":26,"end_character":70},"updated":"2019-05-03 20:56:32.000000000","message":"import order https://docs.openstack.org/hacking/latest/user/hacking.html#import-order-template","commit_id":"0dc99c50a410893a8b1a2c66c944e3dbbdccae57"},{"author":{"_account_id":30173,"name":"Ian Pittwood","email":"pittwoodian@gmail.com","username":"ianp"},"change_message_id":"966e9d3b522c22f76ea29e5637c84d0ddec02a67","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        assert client_create.called"},{"line_number":91,"context_line":"        assert load_config.called"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @mock.patch((\u0027shipyard_airflow.plugins.deployment_status_operator.\u0027"},{"line_number":94,"context_line":"                 \u0027V1ObjectMeta\u0027), return_value\u003d\u0027meta_output\u0027)"},{"line_number":95,"context_line":"    @mock.patch((\u0027shipyard_airflow.plugins.deployment_status_operator.\u0027"},{"line_number":96,"context_line":"                 \u0027V1ConfigMap\u0027), return_value\u003d\u0027cfg_map_output\u0027)"},{"line_number":97,"context_line":"    def test__create_config_map_object(self,"},{"line_number":98,"context_line":"                                       config_map_create,"},{"line_number":99,"context_line":"                                       metadata_create):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_560b308d","line":96,"range":{"start_line":93,"start_character":4,"end_line":96,"end_character":63},"updated":"2019-05-06 14:56:43.000000000","message":"The inner parentheses around these strings are redundant","commit_id":"d71cc71a147cce123e5e9c0f7bb730646753da59"},{"author":{"_account_id":30173,"name":"Ian Pittwood","email":"pittwoodian@gmail.com","username":"ianp"},"change_message_id":"7c13895278155a0323897ef69306b7d598054c8e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from shipyard_airflow.plugins.ucp_base_operator import UcpBaseOperator"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"FAKE_ACTION_DATA \u003d {"},{"line_number":30,"context_line":"    \u0027name\u0027: \u0027action_name\u0027,"},{"line_number":31,"context_line":"    \u0027id\u0027: \u0027action_id\u0027"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"FAKE_ACTION \u003d Action.from_dict(FAKE_ACTION_DATA)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"DEPLOYMENT_STATUS_METADATA \u003d V1ObjectMeta("},{"line_number":37,"context_line":"    name\u003dDeploymentStatusOperator.CFG_MAP[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_b90dbd3f","line":34,"range":{"start_line":29,"start_character":0,"end_line":34,"end_character":48},"updated":"2019-05-06 16:28:32.000000000","message":"Other const pairs don\u0027t have a line break between them","commit_id":"14945123912164264ea5d9649d053192e6d4f3d7"}]}
