)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"d8f890c2362eb1db40446f2b94020ae41e758050","unresolved":false,"context_lines":[{"line_number":11,"context_line":"audit_template uuid/id and/or a goal_id."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"strategy_id is optional."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I7b3eae4d0752a11208f5f92ee13ab1018d8521ad"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5a9d85d2_eed48048","line":14,"updated":"2016-06-20 12:46:00.000000000","message":"The following line is missing:\n\nPartially Implements: blueprint persistent-audit-parameters","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"}],"watcher/api/controllers/v1/audit.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"d8f890c2362eb1db40446f2b94020ae41e758050","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    This class enforces type checking and value constraints, and converts"},{"line_number":94,"context_line":"    between the internal object model and the API representation of a audit."},{"line_number":95,"context_line":"    \"\"\""},{"line_number":96,"context_line":"    _audit_template_uuid \u003d None"},{"line_number":97,"context_line":"    _audit_template_name \u003d None"},{"line_number":98,"context_line":"    _goal_uuid \u003d None"},{"line_number":99,"context_line":"    _goal_name \u003d None"},{"line_number":100,"context_line":"    _strategy_uuid \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a9d85d2_4e5834fb","line":97,"range":{"start_line":96,"start_character":0,"end_line":97,"end_character":31},"updated":"2016-06-20 12:46:00.000000000","message":"Shouldn\u0027t these 2 be removed?","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"c18ce3aa44ad0cf07f1d25cc35f3ce8bf6eec282","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    This class enforces type checking and value constraints, and converts"},{"line_number":94,"context_line":"    between the internal object model and the API representation of a audit."},{"line_number":95,"context_line":"    \"\"\""},{"line_number":96,"context_line":"    _audit_template_uuid \u003d None"},{"line_number":97,"context_line":"    _audit_template_name \u003d None"},{"line_number":98,"context_line":"    _goal_uuid \u003d None"},{"line_number":99,"context_line":"    _goal_name \u003d None"},{"line_number":100,"context_line":"    _strategy_uuid \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_63146f9f","line":97,"range":{"start_line":96,"start_character":0,"end_line":97,"end_character":31},"in_reply_to":"5a9d85d2_4e5834fb","updated":"2016-06-30 20:54:09.000000000","message":"Done","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"d8f890c2362eb1db40446f2b94020ae41e758050","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    _strategy_uuid \u003d None"},{"line_number":101,"context_line":"    _strategy_name \u003d None"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _get_audit_template(self, value):"},{"line_number":104,"context_line":"        if value \u003d\u003d wtypes.Unset:"},{"line_number":105,"context_line":"            return None"},{"line_number":106,"context_line":"        audit_template \u003d None"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            if utils.is_uuid_like(value) or utils.is_int_like(value):"},{"line_number":109,"context_line":"                audit_template \u003d objects.AuditTemplate.get("},{"line_number":110,"context_line":"                    pecan.request.context, value)"},{"line_number":111,"context_line":"            else:"},{"line_number":112,"context_line":"                audit_template \u003d objects.AuditTemplate.get_by_name("},{"line_number":113,"context_line":"                    pecan.request.context, value)"},{"line_number":114,"context_line":"        except exception.AuditTemplateNotFound:"},{"line_number":115,"context_line":"            pass"},{"line_number":116,"context_line":"        if audit_template:"},{"line_number":117,"context_line":"            self.audit_template_id \u003d audit_template.id"},{"line_number":118,"context_line":"            self.audit_template_goal_id \u003d audit_template.goal_id"},{"line_number":119,"context_line":"            self.audit_template_strategy_id \u003d audit_template.strategy_id"},{"line_number":120,"context_line":"        return audit_template"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _get_audit_template_uuid(self):"},{"line_number":123,"context_line":"        return self._audit_template_uuid"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _set_audit_template_uuid(self, value):"},{"line_number":126,"context_line":"        if value and self._audit_template_uuid !\u003d value:"},{"line_number":127,"context_line":"            self._audit_template_uuid \u003d None"},{"line_number":128,"context_line":"            audit_template \u003d self._get_audit_template(value)"},{"line_number":129,"context_line":"            if audit_template:"},{"line_number":130,"context_line":"                self._audit_template_uuid \u003d audit_template.uuid"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _get_audit_template_name(self):"},{"line_number":133,"context_line":"        return self._audit_template_name"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _set_audit_template_name(self, value):"},{"line_number":136,"context_line":"        if value and self._audit_template_name !\u003d value:"},{"line_number":137,"context_line":"            self._audit_template_name \u003d None"},{"line_number":138,"context_line":"            audit_template \u003d self._get_audit_template(value)"},{"line_number":139,"context_line":"            if audit_template:"},{"line_number":140,"context_line":"                self._audit_template_name \u003d audit_template.name"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _get_goal(self, value):"},{"line_number":143,"context_line":"        if value \u003d\u003d wtypes.Unset:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a9d85d2_ee7da0e8","line":140,"range":{"start_line":103,"start_character":0,"end_line":140,"end_character":63},"updated":"2016-06-20 12:46:00.000000000","message":"IMHO, this should be moved to AuditPostType and AuditPatchType as part of the validation process where we can call a common method that would retrieve the audit template parameters given its name or UUID right after validating it.","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"c18ce3aa44ad0cf07f1d25cc35f3ce8bf6eec282","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    _strategy_uuid \u003d None"},{"line_number":101,"context_line":"    _strategy_name \u003d None"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _get_audit_template(self, value):"},{"line_number":104,"context_line":"        if value \u003d\u003d wtypes.Unset:"},{"line_number":105,"context_line":"            return None"},{"line_number":106,"context_line":"        audit_template \u003d None"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            if utils.is_uuid_like(value) or utils.is_int_like(value):"},{"line_number":109,"context_line":"                audit_template \u003d objects.AuditTemplate.get("},{"line_number":110,"context_line":"                    pecan.request.context, value)"},{"line_number":111,"context_line":"            else:"},{"line_number":112,"context_line":"                audit_template \u003d objects.AuditTemplate.get_by_name("},{"line_number":113,"context_line":"                    pecan.request.context, value)"},{"line_number":114,"context_line":"        except exception.AuditTemplateNotFound:"},{"line_number":115,"context_line":"            pass"},{"line_number":116,"context_line":"        if audit_template:"},{"line_number":117,"context_line":"            self.audit_template_id \u003d audit_template.id"},{"line_number":118,"context_line":"            self.audit_template_goal_id \u003d audit_template.goal_id"},{"line_number":119,"context_line":"            self.audit_template_strategy_id \u003d audit_template.strategy_id"},{"line_number":120,"context_line":"        return audit_template"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _get_audit_template_uuid(self):"},{"line_number":123,"context_line":"        return self._audit_template_uuid"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _set_audit_template_uuid(self, value):"},{"line_number":126,"context_line":"        if value and self._audit_template_uuid !\u003d value:"},{"line_number":127,"context_line":"            self._audit_template_uuid \u003d None"},{"line_number":128,"context_line":"            audit_template \u003d self._get_audit_template(value)"},{"line_number":129,"context_line":"            if audit_template:"},{"line_number":130,"context_line":"                self._audit_template_uuid \u003d audit_template.uuid"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _get_audit_template_name(self):"},{"line_number":133,"context_line":"        return self._audit_template_name"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _set_audit_template_name(self, value):"},{"line_number":136,"context_line":"        if value and self._audit_template_name !\u003d value:"},{"line_number":137,"context_line":"            self._audit_template_name \u003d None"},{"line_number":138,"context_line":"            audit_template \u003d self._get_audit_template(value)"},{"line_number":139,"context_line":"            if audit_template:"},{"line_number":140,"context_line":"                self._audit_template_name \u003d audit_template.name"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _get_goal(self, value):"},{"line_number":143,"context_line":"        if value \u003d\u003d wtypes.Unset:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_6362af3f","line":140,"range":{"start_line":103,"start_character":0,"end_line":140,"end_character":63},"in_reply_to":"5a9d85d2_ee7da0e8","updated":"2016-06-30 20:54:09.000000000","message":"I have moved this logic into the AuditPostType as suggested.  However, is it still a valid usecase to update/patch an audit object with a new audit_template_uuid?  I do not see this scenario in the current test coverage, and it seems unlikely that one would need this functionality.","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"2f3439ba371c94175db5347be4b46879d40dd0da","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        collection.audits \u003d [Audit.convert_with_links(p, expand)"},{"line_number":344,"context_line":"                             for p in rpc_audits]"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        if \u0027sort_key\u0027 in kwargs:"},{"line_number":347,"context_line":"            reverse \u003d False"},{"line_number":348,"context_line":"            if kwargs[\u0027sort_key\u0027] \u003d\u003d \u0027goal_uuid\u0027:"},{"line_number":349,"context_line":"                if \u0027sort_dir\u0027 in kwargs:"},{"line_number":350,"context_line":"                    reverse \u003d True if kwargs[\u0027sort_dir\u0027] \u003d\u003d \u0027desc\u0027 else False"},{"line_number":351,"context_line":"                collection.audits \u003d sorted("},{"line_number":352,"context_line":"                    collection.audits,"},{"line_number":353,"context_line":"                    key\u003dlambda audit: audit.goal_uuid,"},{"line_number":354,"context_line":"                    reverse\u003dreverse)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        collection.next \u003d collection.get_next(limit, url\u003durl, **kwargs)"},{"line_number":357,"context_line":"        return collection"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_076b331f","line":354,"range":{"start_line":346,"start_character":0,"end_line":354,"end_character":36},"updated":"2016-06-17 18:31:50.000000000","message":"Needs work","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"2f3439ba371c94175db5347be4b46879d40dd0da","unresolved":false,"context_lines":[{"line_number":388,"context_line":"                                                   marker)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        filters \u003d {}"},{"line_number":391,"context_line":"        if goal:"},{"line_number":392,"context_line":"            if utils.is_uuid_like(goal):"},{"line_number":393,"context_line":"                filters[\u0027goal_uuid\u0027] \u003d goal"},{"line_number":394,"context_line":"            else:"},{"line_number":395,"context_line":"                # TODO(michaelgugino): add method to get goal by name."},{"line_number":396,"context_line":"                filters[\u0027goal_name\u0027] \u003d goal"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        if strategy:"},{"line_number":399,"context_line":"            if utils.is_uuid_like(strategy):"},{"line_number":400,"context_line":"                filters[\u0027strategy_uuid\u0027] \u003d strategy"},{"line_number":401,"context_line":"            else:"},{"line_number":402,"context_line":"                # TODO(michaelgugino): add method to get goal by name."},{"line_number":403,"context_line":"                filters[\u0027strategy_name\u0027] \u003d strategy"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        sort_db_key \u003d sort_key"},{"line_number":406,"context_line":"        audits \u003d objects.Audit.list(pecan.request.context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_07521367","line":403,"range":{"start_line":391,"start_character":0,"end_line":403,"end_character":51},"updated":"2016-06-17 18:31:50.000000000","message":"Needs work","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"2f3439ba371c94175db5347be4b46879d40dd0da","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        if self.from_audits:"},{"line_number":486,"context_line":"            raise exception.OperationNotPermitted"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        if not audit._goal_uuid and not audit._audit_template_uuid:"},{"line_number":489,"context_line":"            raise exception.Invalid("},{"line_number":490,"context_line":"                message\u003d_(\u0027A valid goal_id or audit_template_id \u0027"},{"line_number":491,"context_line":"                          \u0027with a goal_id must be provided\u0027))"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        if not isinstance(audit.goal_id, int):"},{"line_number":494,"context_line":"            audit._set_goal_uuid(audit.audit_template_goal_id)"},{"line_number":495,"context_line":"        if not isinstance(audit.strategy_id, int):"},{"line_number":496,"context_line":"            audit._set_strategy_uuid(audit.audit_template_strategy_id)"},{"line_number":497,"context_line":"        audit_dict \u003d audit.as_dict()"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"        # Remove audit_template_id from dict because it is for api"},{"line_number":500,"context_line":"        # use only."},{"line_number":501,"context_line":"        if audit_dict.get(\u0027audit_template_id\u0027):"},{"line_number":502,"context_line":"            del audit_dict[\u0027audit_template_id\u0027]"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        context \u003d pecan.request.context"},{"line_number":505,"context_line":"        new_audit \u003d objects.Audit(context, **audit_dict)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_47009b02","line":502,"range":{"start_line":488,"start_character":0,"end_line":502,"end_character":47},"updated":"2016-06-17 18:31:50.000000000","message":"This section attempts to use the goal_id and strategy_id provided via the POST request; if these two values are not integers already, it means that out local api audit object\u0027s init code did not successfully find these in the database.  This could be because they are missing.\n\nIf the goal_id and/or strategy_id are not an integer, we try to get the appropriate values from the provided audit_template.\n\nThis section need some eyes and some new tests written to verify different use cases for future command line mods.\n\nCurrently, the cli should work as-is by just providing an audit_template as we do today.","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"},{"author":{"_account_id":9392,"name":"Prashanth Hari","email":"hvprash@gmail.com","username":"hvprash"},"change_message_id":"b72c1ad305860bfe7dbb6be2ede754e66a00bd4f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    audit_template_uuid \u003d wtypes.wsattr(types.uuid, mandatory\u003dFalse)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    goal_uuid \u003d wtypes.wsattr(types.uuid, mandatory\u003dFalse)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    strategy_uuid \u003d wtypes.wsattr(types.uuid, mandatory\u003dFalse)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    type \u003d wtypes.wsattr(wtypes.text, mandatory\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_d68bbf66","line":57,"updated":"2016-07-11 15:54:23.000000000","message":"Should be \"goal\" instead of \"goal_uuid\". We will be passing goal name and not UUID. Also for consistency with audit template and for watcher client to work.","commit_id":"7b951d2a8e32b8346de3c1c3ae1e4c75c5d42866"},{"author":{"_account_id":9392,"name":"Prashanth Hari","email":"hvprash@gmail.com","username":"hvprash"},"change_message_id":"b72c1ad305860bfe7dbb6be2ede754e66a00bd4f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    goal_uuid \u003d wtypes.wsattr(types.uuid, mandatory\u003dFalse)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    strategy_uuid \u003d wtypes.wsattr(types.uuid, mandatory\u003dFalse)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    type \u003d wtypes.wsattr(wtypes.text, mandatory\u003dTrue)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    deadline \u003d wtypes.wsattr(datetime.datetime, mandatory\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_163a6798","line":59,"updated":"2016-07-11 15:54:23.000000000","message":"Same as above. Should be \"strategy\" name instead of \"strategy_uuid\".","commit_id":"7b951d2a8e32b8346de3c1c3ae1e4c75c5d42866"},{"author":{"_account_id":9392,"name":"Prashanth Hari","email":"hvprash@gmail.com","username":"hvprash"},"change_message_id":"b72c1ad305860bfe7dbb6be2ede754e66a00bd4f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                    message\u003d_(\u0027The audit template UUID or name specified is \u0027"},{"line_number":85,"context_line":"                              \u0027invalid\u0027))"},{"line_number":86,"context_line":"            at2a \u003d {"},{"line_number":87,"context_line":"                \u0027goal_uuid\u0027: \u0027goal_id\u0027,"},{"line_number":88,"context_line":"                \u0027strategy_uuid\u0027: \u0027strategy_id\u0027,"},{"line_number":89,"context_line":"                \u0027host_aggregate\u0027: \u0027host_aggregate\u0027"},{"line_number":90,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_76ddab41","line":87,"updated":"2016-07-11 15:54:23.000000000","message":"Change goal_uuid to goal","commit_id":"7b951d2a8e32b8346de3c1c3ae1e4c75c5d42866"},{"author":{"_account_id":9392,"name":"Prashanth Hari","email":"hvprash@gmail.com","username":"hvprash"},"change_message_id":"b72c1ad305860bfe7dbb6be2ede754e66a00bd4f","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                              \u0027invalid\u0027))"},{"line_number":86,"context_line":"            at2a \u003d {"},{"line_number":87,"context_line":"                \u0027goal_uuid\u0027: \u0027goal_id\u0027,"},{"line_number":88,"context_line":"                \u0027strategy_uuid\u0027: \u0027strategy_id\u0027,"},{"line_number":89,"context_line":"                \u0027host_aggregate\u0027: \u0027host_aggregate\u0027"},{"line_number":90,"context_line":"            }"},{"line_number":91,"context_line":"            for k in at2a:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_56298f36","line":88,"updated":"2016-07-11 15:54:23.000000000","message":"Change strategy_uuid to strategy","commit_id":"7b951d2a8e32b8346de3c1c3ae1e4c75c5d42866"},{"author":{"_account_id":9392,"name":"Prashanth Hari","email":"hvprash@gmail.com","username":"hvprash"},"change_message_id":"b72c1ad305860bfe7dbb6be2ede754e66a00bd4f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                        pass"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        return Audit("},{"line_number":100,"context_line":"            goal_id\u003dself.goal_uuid,"},{"line_number":101,"context_line":"            host_aggregate\u003dself.host_aggregate,"},{"line_number":102,"context_line":"            strategy_id\u003dself.strategy_uuid,"},{"line_number":103,"context_line":"            type\u003dself.type,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_96901750","line":100,"updated":"2016-07-11 15:54:23.000000000","message":"should return goal instead of uuid","commit_id":"7b951d2a8e32b8346de3c1c3ae1e4c75c5d42866"},{"author":{"_account_id":9392,"name":"Prashanth Hari","email":"hvprash@gmail.com","username":"hvprash"},"change_message_id":"b72c1ad305860bfe7dbb6be2ede754e66a00bd4f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        return Audit("},{"line_number":100,"context_line":"            goal_id\u003dself.goal_uuid,"},{"line_number":101,"context_line":"            host_aggregate\u003dself.host_aggregate,"},{"line_number":102,"context_line":"            strategy_id\u003dself.strategy_uuid,"},{"line_number":103,"context_line":"            type\u003dself.type,"},{"line_number":104,"context_line":"            deadline\u003dself.deadline)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_d6a8df79","line":102,"updated":"2016-07-11 15:54:23.000000000","message":"should return strategy instead of uuid","commit_id":"7b951d2a8e32b8346de3c1c3ae1e4c75c5d42866"}],"watcher/db/purge.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        LOG.info(_LI(\"Deleting...\"))"},{"line_number":406,"context_line":"        # Reversed to avoid errors with foreign keys"},{"line_number":407,"context_line":"        for entry in reversed(list(self._objects_map)):"},{"line_number":408,"context_line":"            print(\"entry:\", entry)"},{"line_number":409,"context_line":"            print(entry.__dict__)"},{"line_number":410,"context_line":"            entry.destroy()"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def execute(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_532eac43","line":409,"range":{"start_line":408,"start_character":0,"end_line":409,"end_character":33},"updated":"2016-07-20 12:36:56.000000000","message":"Can you either remove these or refactor them as logs?","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        LOG.info(_LI(\"Deleting...\"))"},{"line_number":406,"context_line":"        # Reversed to avoid errors with foreign keys"},{"line_number":407,"context_line":"        for entry in reversed(list(self._objects_map)):"},{"line_number":408,"context_line":"            print(\"entry:\", entry)"},{"line_number":409,"context_line":"            print(entry.__dict__)"},{"line_number":410,"context_line":"            entry.destroy()"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def execute(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_a79542e5","line":409,"range":{"start_line":408,"start_character":0,"end_line":409,"end_character":33},"in_reply_to":"dada55a8_532eac43","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        LOG.info(_LI(\"Purge process completed\"))"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"def purge(age_in_days, max_number, audit_template, exclude_orphans, dry_run):"},{"line_number":440,"context_line":"    \"\"\"Removes soft deleted objects from the database"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    :param age_in_days: Number of days since deletion (from today)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_22f5a456","line":439,"range":{"start_line":439,"start_character":35,"end_line":439,"end_character":49},"updated":"2016-07-20 12:36:56.000000000","message":"IMHO, this does not make much sense anymore. Everything used to be connected to an audit template the the option was previously very useful since we could delete things using the underlying domino effect. So we should either either remove this argument or generalize it so that we accept any UUID and delete everything from that resource UUID onwards.","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"0230de441780159705d4fae4e262b82caa496f62","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        LOG.info(_LI(\"Purge process completed\"))"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"def purge(age_in_days, max_number, audit_template, exclude_orphans, dry_run):"},{"line_number":438,"context_line":"    \"\"\"Removes soft deleted objects from the database"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    :param age_in_days: Number of days since deletion (from today)"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_f8d48fe9","line":437,"range":{"start_line":437,"start_character":35,"end_line":437,"end_character":49},"updated":"2016-07-27 11:59:37.000000000","message":"see my comment on PS 15: not sure this parameter should remain ;)","commit_id":"eacd128684dd8043e69160361f0712807f02ac65"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"c784c9e50e51997f472c32018c0b2cc5b3b6cf7f","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        LOG.info(_LI(\"Purge process completed\"))"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"def purge(age_in_days, max_number, audit_template, exclude_orphans, dry_run):"},{"line_number":438,"context_line":"    \"\"\"Removes soft deleted objects from the database"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    :param age_in_days: Number of days since deletion (from today)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bacf61ea_783f5187","line":437,"range":{"start_line":437,"start_character":35,"end_line":437,"end_character":49},"in_reply_to":"dada55a8_f8d48fe9","updated":"2016-07-29 15:21:30.000000000","message":"I went ahead and changed this to goal, since goal seems to be the underlying dependency for must objects.\n\nPurging a goal should result in strategies, audit, and audit templates being removed.","commit_id":"eacd128684dd8043e69160361f0712807f02ac65"}],"watcher/db/sqlalchemy/api.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        if filters is None:"},{"line_number":331,"context_line":"            filters \u003d {}"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        if \u0027uuid\u0027 in filters:"},{"line_number":334,"context_line":"            query \u003d query.filter_by(uuid\u003dfilters[\u0027uuid\u0027])"},{"line_number":335,"context_line":"        if \u0027type\u0027 in filters:"},{"line_number":336,"context_line":"            query \u003d query.filter_by(type\u003dfilters[\u0027type\u0027])"},{"line_number":337,"context_line":"        if \u0027state\u0027 in filters:"},{"line_number":338,"context_line":"            query \u003d query.filter_by(state\u003dfilters[\u0027state\u0027])"},{"line_number":339,"context_line":"        if \u0027goal_id\u0027 in filters:"},{"line_number":340,"context_line":"            query \u003d query.filter_by("},{"line_number":341,"context_line":"                goal_id\u003dfilters[\u0027goal_id\u0027])"},{"line_number":342,"context_line":"        if \u0027goal_uuid\u0027 in filters:"},{"line_number":343,"context_line":"            query \u003d query.join("},{"line_number":344,"context_line":"                models.Goal,"},{"line_number":345,"context_line":"                models.Audit.goal_id \u003d\u003d models.Goal.id)"},{"line_number":346,"context_line":"            query \u003d query.filter("},{"line_number":347,"context_line":"                models.Goal.uuid \u003d\u003d filters[\u0027goal_uuid\u0027])"},{"line_number":348,"context_line":"        if \u0027goal_name\u0027 in filters:"},{"line_number":349,"context_line":"            query \u003d query.join("},{"line_number":350,"context_line":"                models.Goal,"},{"line_number":351,"context_line":"                models.Audit.goal_id \u003d\u003d models.Goal.id)"},{"line_number":352,"context_line":"            query \u003d query.filter("},{"line_number":353,"context_line":"                models.Goal.name \u003d\u003d"},{"line_number":354,"context_line":"                filters[\u0027goal_name\u0027])"},{"line_number":355,"context_line":"        if \u0027strategy_id\u0027 in filters:"},{"line_number":356,"context_line":"            query \u003d query.filter_by("},{"line_number":357,"context_line":"                strategy_id\u003dfilters[\u0027strategy_id\u0027])"},{"line_number":358,"context_line":"        if \u0027strategy_uuid\u0027 in filters:"},{"line_number":359,"context_line":"            query \u003d query.join("},{"line_number":360,"context_line":"                models.Strategy,"},{"line_number":361,"context_line":"                models.Audit.strategy_id \u003d\u003d models.Strategy.id)"},{"line_number":362,"context_line":"            query \u003d query.filter("},{"line_number":363,"context_line":"                models.Strategy.uuid \u003d\u003d filters[\u0027strategy_uuid\u0027])"},{"line_number":364,"context_line":"        if \u0027strategy_name\u0027 in filters:"},{"line_number":365,"context_line":"            query \u003d query.join("},{"line_number":366,"context_line":"                models.Strategy,"},{"line_number":367,"context_line":"                models.Audit.strategy_id \u003d\u003d models.Strategy.id)"},{"line_number":368,"context_line":"            query \u003d query.filter("},{"line_number":369,"context_line":"                models.Strategy.name \u003d\u003d"},{"line_number":370,"context_line":"                filters[\u0027strategy_name\u0027])"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        plain_fields \u003d [\u0027uuid\u0027, \u0027audit_type\u0027, \u0027state\u0027, \u0027goal_id\u0027,"},{"line_number":373,"context_line":"                        \u0027strategy_id\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_f3c36055","line":370,"range":{"start_line":333,"start_character":0,"end_line":370,"end_character":41},"updated":"2016-07-20 12:36:56.000000000","message":"All this seem redundant with lines 372 to 379.","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        if filters is None:"},{"line_number":331,"context_line":"            filters \u003d {}"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        if \u0027uuid\u0027 in filters:"},{"line_number":334,"context_line":"            query \u003d query.filter_by(uuid\u003dfilters[\u0027uuid\u0027])"},{"line_number":335,"context_line":"        if \u0027type\u0027 in filters:"},{"line_number":336,"context_line":"            query \u003d query.filter_by(type\u003dfilters[\u0027type\u0027])"},{"line_number":337,"context_line":"        if \u0027state\u0027 in filters:"},{"line_number":338,"context_line":"            query \u003d query.filter_by(state\u003dfilters[\u0027state\u0027])"},{"line_number":339,"context_line":"        if \u0027goal_id\u0027 in filters:"},{"line_number":340,"context_line":"            query \u003d query.filter_by("},{"line_number":341,"context_line":"                goal_id\u003dfilters[\u0027goal_id\u0027])"},{"line_number":342,"context_line":"        if \u0027goal_uuid\u0027 in filters:"},{"line_number":343,"context_line":"            query \u003d query.join("},{"line_number":344,"context_line":"                models.Goal,"},{"line_number":345,"context_line":"                models.Audit.goal_id \u003d\u003d models.Goal.id)"},{"line_number":346,"context_line":"            query \u003d query.filter("},{"line_number":347,"context_line":"                models.Goal.uuid \u003d\u003d filters[\u0027goal_uuid\u0027])"},{"line_number":348,"context_line":"        if \u0027goal_name\u0027 in filters:"},{"line_number":349,"context_line":"            query \u003d query.join("},{"line_number":350,"context_line":"                models.Goal,"},{"line_number":351,"context_line":"                models.Audit.goal_id \u003d\u003d models.Goal.id)"},{"line_number":352,"context_line":"            query \u003d query.filter("},{"line_number":353,"context_line":"                models.Goal.name \u003d\u003d"},{"line_number":354,"context_line":"                filters[\u0027goal_name\u0027])"},{"line_number":355,"context_line":"        if \u0027strategy_id\u0027 in filters:"},{"line_number":356,"context_line":"            query \u003d query.filter_by("},{"line_number":357,"context_line":"                strategy_id\u003dfilters[\u0027strategy_id\u0027])"},{"line_number":358,"context_line":"        if \u0027strategy_uuid\u0027 in filters:"},{"line_number":359,"context_line":"            query \u003d query.join("},{"line_number":360,"context_line":"                models.Strategy,"},{"line_number":361,"context_line":"                models.Audit.strategy_id \u003d\u003d models.Strategy.id)"},{"line_number":362,"context_line":"            query \u003d query.filter("},{"line_number":363,"context_line":"                models.Strategy.uuid \u003d\u003d filters[\u0027strategy_uuid\u0027])"},{"line_number":364,"context_line":"        if \u0027strategy_name\u0027 in filters:"},{"line_number":365,"context_line":"            query \u003d query.join("},{"line_number":366,"context_line":"                models.Strategy,"},{"line_number":367,"context_line":"                models.Audit.strategy_id \u003d\u003d models.Strategy.id)"},{"line_number":368,"context_line":"            query \u003d query.filter("},{"line_number":369,"context_line":"                models.Strategy.name \u003d\u003d"},{"line_number":370,"context_line":"                filters[\u0027strategy_name\u0027])"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        plain_fields \u003d [\u0027uuid\u0027, \u0027audit_type\u0027, \u0027state\u0027, \u0027goal_id\u0027,"},{"line_number":373,"context_line":"                        \u0027strategy_id\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_e7e8da7e","line":370,"range":{"start_line":333,"start_character":0,"end_line":370,"end_character":41},"in_reply_to":"dada55a8_f3c36055","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"}],"watcher/tests/api/v1/test_audits.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.assertEqual([], response[\u0027audits\u0027])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _assert_audit_fields(self, audit):"},{"line_number":90,"context_line":"        audit_fields \u003d [\u0027audit_type\u0027, \u0027deadline\u0027, \u0027state\u0027]"},{"line_number":91,"context_line":"        for field in audit_fields:"},{"line_number":92,"context_line":"            self.assertIn(field, audit)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_22512437","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":58},"updated":"2016-07-20 12:36:56.000000000","message":"this list of fields should be expanded to mention \u0027goal_uuid\u0027, \u0027stategy_uuid\u0027 and \u0027host_aggregate\u0027","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.assertEqual([], response[\u0027audits\u0027])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _assert_audit_fields(self, audit):"},{"line_number":90,"context_line":"        audit_fields \u003d [\u0027audit_type\u0027, \u0027deadline\u0027, \u0027state\u0027]"},{"line_number":91,"context_line":"        for field in audit_fields:"},{"line_number":92,"context_line":"            self.assertIn(field, audit)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_07f40e85","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":58},"in_reply_to":"dada55a8_22512437","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"}],"watcher/tests/db/test_purge.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                strategy_id\u003dself.strategy3.id)"},{"line_number":142,"context_line":"            self.audit_template1.soft_delete()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        with freezegun.freeze_time(self.expired_date):"},{"line_number":145,"context_line":"            self.audit1 \u003d obj_utils.create_test_audit("},{"line_number":146,"context_line":"                self.context, audit_template_id\u003dself.audit_template1.id,"},{"line_number":147,"context_line":"                id\u003dself._generate_id(), uuid\u003dNone)"},{"line_number":148,"context_line":"            self.audit2 \u003d obj_utils.create_test_audit("},{"line_number":149,"context_line":"                self.context, audit_template_id\u003dself.audit_template2.id,"},{"line_number":150,"context_line":"                id\u003dself._generate_id(), uuid\u003dNone)"},{"line_number":151,"context_line":"            self.audit3 \u003d obj_utils.create_test_audit("},{"line_number":152,"context_line":"                self.context, audit_template_id\u003dself.audit_template3.id,"},{"line_number":153,"context_line":"                id\u003dself._generate_id(), uuid\u003dNone)"},{"line_number":154,"context_line":"            self.audit1.soft_delete()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        with freezegun.freeze_time(self.expired_date):"},{"line_number":157,"context_line":"            self.action_plan1 \u003d obj_utils.create_test_action_plan("}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_366b1887","line":154,"range":{"start_line":144,"start_character":0,"end_line":154,"end_character":37},"updated":"2016-07-20 12:36:56.000000000","message":"You changed the create_test_audit() function in watcher/db/utils.py by adding the same parameters as for the audit template. So you should also adapt the setup. Also, this should fix most of the value fixings that you made later on since these 3 audits were taking the default value which was making them pointing to goal_id \u003d 1 a.k.a the one that is always deleted.\n\n::\n\nwith freezegun.freeze_time(self.expired_date):\n            self.audit1 \u003d obj_utils.create_test_audit(\n                self.context, id\u003dself._generate_id(), uuid\u003dNone,\n                goal_id\u003dself.goal1.id, strategy_id\u003dself.strategy1.id)\n            self.audit2 \u003d obj_utils.create_test_audit(\n                self.context, id\u003dself._generate_id(), uuid\u003dNone,\n                goal_id\u003dself.goal2.id, strategy_id\u003dself.strategy2.id)\n            self.audit3 \u003d obj_utils.create_test_audit(\n                self.context, id\u003dself._generate_id(), uuid\u003dNone,\n                goal_id\u003dself.goal3.id, strategy_id\u003dself.strategy3.id)\n            self.audit1.soft_delete()","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                strategy_id\u003dself.strategy3.id)"},{"line_number":142,"context_line":"            self.audit_template1.soft_delete()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        with freezegun.freeze_time(self.expired_date):"},{"line_number":145,"context_line":"            self.audit1 \u003d obj_utils.create_test_audit("},{"line_number":146,"context_line":"                self.context, audit_template_id\u003dself.audit_template1.id,"},{"line_number":147,"context_line":"                id\u003dself._generate_id(), uuid\u003dNone)"},{"line_number":148,"context_line":"            self.audit2 \u003d obj_utils.create_test_audit("},{"line_number":149,"context_line":"                self.context, audit_template_id\u003dself.audit_template2.id,"},{"line_number":150,"context_line":"                id\u003dself._generate_id(), uuid\u003dNone)"},{"line_number":151,"context_line":"            self.audit3 \u003d obj_utils.create_test_audit("},{"line_number":152,"context_line":"                self.context, audit_template_id\u003dself.audit_template3.id,"},{"line_number":153,"context_line":"                id\u003dself._generate_id(), uuid\u003dNone)"},{"line_number":154,"context_line":"            self.audit1.soft_delete()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        with freezegun.freeze_time(self.expired_date):"},{"line_number":157,"context_line":"            self.action_plan1 \u003d obj_utils.create_test_action_plan("}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_e7357a46","line":154,"range":{"start_line":144,"start_character":0,"end_line":154,"end_character":37},"in_reply_to":"dada55a8_366b1887","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        with freezegun.freeze_time(self.fake_today):"},{"line_number":202,"context_line":"            self.cmd.execute()"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        # The 1\u0027s and the 2\u0027s are purgeable (due to age of day set to 0),"},{"line_number":205,"context_line":"        # but max_number \u003d 10, and because of no Db integrity violation, we"},{"line_number":206,"context_line":"        # should be able to purge only 6 objects."},{"line_number":207,"context_line":"        self.assertEqual(m_destroy_goal.call_count, 0)"},{"line_number":208,"context_line":"        self.assertEqual(m_destroy_strategy.call_count, 0)"},{"line_number":209,"context_line":"        self.assertEqual(m_destroy_audit_template.call_count, 0)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_ad406535","line":206,"range":{"start_line":204,"start_character":8,"end_line":206,"end_character":49},"updated":"2016-07-20 12:36:56.000000000","message":"As explained before putting back the six \u00271\u0027 should now work","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        with freezegun.freeze_time(self.fake_today):"},{"line_number":202,"context_line":"            self.cmd.execute()"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        # The 1\u0027s and the 2\u0027s are purgeable (due to age of day set to 0),"},{"line_number":205,"context_line":"        # but max_number \u003d 10, and because of no Db integrity violation, we"},{"line_number":206,"context_line":"        # should be able to purge only 6 objects."},{"line_number":207,"context_line":"        self.assertEqual(m_destroy_goal.call_count, 0)"},{"line_number":208,"context_line":"        self.assertEqual(m_destroy_strategy.call_count, 0)"},{"line_number":209,"context_line":"        self.assertEqual(m_destroy_audit_template.call_count, 0)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_872e3ef8","line":206,"range":{"start_line":204,"start_character":8,"end_line":206,"end_character":49},"in_reply_to":"dada55a8_ad406535","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        self.assertEqual(len(objects_map.goals), 1)"},{"line_number":221,"context_line":"        self.assertEqual(len(objects_map.strategies), 1)"},{"line_number":222,"context_line":"        self.assertEqual(len(objects_map.audit_templates), 1)"},{"line_number":223,"context_line":"        self.assertEqual(len(objects_map.audits), 3)"},{"line_number":224,"context_line":"        self.assertEqual(len(objects_map.action_plans), 3)"},{"line_number":225,"context_line":"        self.assertEqual(len(objects_map.actions), 3)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_find_deleted_and_expired_entries(self):"},{"line_number":228,"context_line":"        with freezegun.freeze_time(self.fake_today):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_9601246d","line":225,"range":{"start_line":223,"start_character":8,"end_line":225,"end_character":53},"updated":"2016-07-20 12:36:56.000000000","message":"ditto on reversing the changes you made here as well","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        self.assertEqual(len(objects_map.goals), 1)"},{"line_number":221,"context_line":"        self.assertEqual(len(objects_map.strategies), 1)"},{"line_number":222,"context_line":"        self.assertEqual(len(objects_map.audit_templates), 1)"},{"line_number":223,"context_line":"        self.assertEqual(len(objects_map.audits), 3)"},{"line_number":224,"context_line":"        self.assertEqual(len(objects_map.action_plans), 3)"},{"line_number":225,"context_line":"        self.assertEqual(len(objects_map.actions), 3)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_find_deleted_and_expired_entries(self):"},{"line_number":228,"context_line":"        with freezegun.freeze_time(self.fake_today):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_674a2ac7","line":225,"range":{"start_line":223,"start_character":8,"end_line":225,"end_character":53},"in_reply_to":"dada55a8_9601246d","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        self.assertEqual(len(objects_map.goals), 1)"},{"line_number":240,"context_line":"        self.assertEqual(len(objects_map.strategies), 1)"},{"line_number":241,"context_line":"        self.assertEqual(len(objects_map.audit_templates), 1)"},{"line_number":242,"context_line":"        self.assertEqual(len(objects_map.audits), 3)"},{"line_number":243,"context_line":"        self.assertEqual(len(objects_map.action_plans), 3)"},{"line_number":244,"context_line":"        self.assertEqual(len(objects_map.actions), 3)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def test_find_deleted_and_nonexpired_related_entries(self):"},{"line_number":247,"context_line":"        with freezegun.freeze_time(self.fake_today):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_36f15896","line":244,"range":{"start_line":242,"start_character":8,"end_line":244,"end_character":53},"updated":"2016-07-20 12:36:56.000000000","message":"ditto","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        self.assertEqual(len(objects_map.goals), 1)"},{"line_number":240,"context_line":"        self.assertEqual(len(objects_map.strategies), 1)"},{"line_number":241,"context_line":"        self.assertEqual(len(objects_map.audit_templates), 1)"},{"line_number":242,"context_line":"        self.assertEqual(len(objects_map.audits), 3)"},{"line_number":243,"context_line":"        self.assertEqual(len(objects_map.action_plans), 3)"},{"line_number":244,"context_line":"        self.assertEqual(len(objects_map.actions), 3)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def test_find_deleted_and_nonexpired_related_entries(self):"},{"line_number":247,"context_line":"        with freezegun.freeze_time(self.fake_today):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_474566b1","line":244,"range":{"start_line":242,"start_character":8,"end_line":244,"end_character":53},"in_reply_to":"dada55a8_36f15896","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.assertEqual(len(objects_map.goals), 1)"},{"line_number":296,"context_line":"        self.assertEqual(len(objects_map.strategies), 1)"},{"line_number":297,"context_line":"        self.assertEqual(len(objects_map.audit_templates), 3)"},{"line_number":298,"context_line":"        self.assertEqual(len(objects_map.audits), 5)"},{"line_number":299,"context_line":"        self.assertEqual(len(objects_map.action_plans), 5)"},{"line_number":300,"context_line":"        self.assertEqual(len(objects_map.actions), 5)"},{"line_number":301,"context_line":"        self.assertEqual("},{"line_number":302,"context_line":"            set([self.action1.id, self.action2.id, self.action3.id,"},{"line_number":303,"context_line":"                 action4.id, action5.id]),"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_16eed4b3","line":300,"range":{"start_line":298,"start_character":0,"end_line":300,"end_character":53},"updated":"2016-07-20 12:36:56.000000000","message":"ditto","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.assertEqual(len(objects_map.goals), 1)"},{"line_number":296,"context_line":"        self.assertEqual(len(objects_map.strategies), 1)"},{"line_number":297,"context_line":"        self.assertEqual(len(objects_map.audit_templates), 3)"},{"line_number":298,"context_line":"        self.assertEqual(len(objects_map.audits), 5)"},{"line_number":299,"context_line":"        self.assertEqual(len(objects_map.action_plans), 5)"},{"line_number":300,"context_line":"        self.assertEqual(len(objects_map.actions), 5)"},{"line_number":301,"context_line":"        self.assertEqual("},{"line_number":302,"context_line":"            set([self.action1.id, self.action2.id, self.action3.id,"},{"line_number":303,"context_line":"                 action4.id, action5.id]),"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_a71262b2","line":300,"range":{"start_line":298,"start_character":0,"end_line":300,"end_character":53},"in_reply_to":"dada55a8_16eed4b3","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        self.assertEqual(len(objects_map.action_plans), 5)"},{"line_number":300,"context_line":"        self.assertEqual(len(objects_map.actions), 5)"},{"line_number":301,"context_line":"        self.assertEqual("},{"line_number":302,"context_line":"            set([self.action1.id, self.action2.id, self.action3.id,"},{"line_number":303,"context_line":"                 action4.id, action5.id]),"},{"line_number":304,"context_line":"            set([entry.id for entry in objects_map.actions]))"},{"line_number":305,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_33ce982e","line":302,"range":{"start_line":302,"start_character":34,"end_line":302,"end_character":66},"updated":"2016-07-20 12:36:56.000000000","message":"ditto","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        self.assertEqual(len(objects_map.action_plans), 5)"},{"line_number":300,"context_line":"        self.assertEqual(len(objects_map.actions), 5)"},{"line_number":301,"context_line":"        self.assertEqual("},{"line_number":302,"context_line":"            set([self.action1.id, self.action2.id, self.action3.id,"},{"line_number":303,"context_line":"                 action4.id, action5.id]),"},{"line_number":304,"context_line":"            set([entry.id for entry in objects_map.actions]))"},{"line_number":305,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_87159e9c","line":302,"range":{"start_line":302,"start_character":34,"end_line":302,"end_character":66},"in_reply_to":"dada55a8_33ce982e","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        self.assertEqual(m_destroy_goal.call_count, 1)"},{"line_number":386,"context_line":"        self.assertEqual(m_destroy_strategy.call_count, 1)"},{"line_number":387,"context_line":"        self.assertEqual(m_destroy_audit_template.call_count, 3)"},{"line_number":388,"context_line":"        self.assertEqual(m_destroy_audit.call_count, 5)"},{"line_number":389,"context_line":"        self.assertEqual(m_destroy_action_plan.call_count, 5)"},{"line_number":390,"context_line":"        self.assertEqual(m_destroy_action.call_count, 5)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        m_destroy_audit_template.assert_any_call(self.audit_template1.uuid)"},{"line_number":393,"context_line":"        m_destroy_audit.assert_any_call(self.audit1.uuid)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_9638043f","line":390,"range":{"start_line":388,"start_character":0,"end_line":390,"end_character":56},"updated":"2016-07-20 12:36:56.000000000","message":"ditto","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        self.assertEqual(m_destroy_goal.call_count, 1)"},{"line_number":386,"context_line":"        self.assertEqual(m_destroy_strategy.call_count, 1)"},{"line_number":387,"context_line":"        self.assertEqual(m_destroy_audit_template.call_count, 3)"},{"line_number":388,"context_line":"        self.assertEqual(m_destroy_audit.call_count, 5)"},{"line_number":389,"context_line":"        self.assertEqual(m_destroy_action_plan.call_count, 5)"},{"line_number":390,"context_line":"        self.assertEqual(m_destroy_action.call_count, 5)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        m_destroy_audit_template.assert_any_call(self.audit_template1.uuid)"},{"line_number":393,"context_line":"        m_destroy_audit.assert_any_call(self.audit1.uuid)"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_07224e01","line":390,"range":{"start_line":388,"start_character":0,"end_line":390,"end_character":56},"in_reply_to":"dada55a8_9638043f","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            m_destroy_audit_template, m_destroy_audit,"},{"line_number":411,"context_line":"            m_destroy_action_plan, m_destroy_action):"},{"line_number":412,"context_line":"        self.cmd.exclude_orphans \u003d False"},{"line_number":413,"context_line":"        self.cmd.uuid \u003d self.goal1.uuid"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        with freezegun.freeze_time(self.fake_today):"},{"line_number":416,"context_line":"            self.cmd.execute()"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_36767806","line":413,"range":{"start_line":413,"start_character":29,"end_line":413,"end_character":34},"updated":"2016-07-20 12:36:56.000000000","message":"a better case would be to use strategy1.uuid which would then make all values below be \u00271\u0027 except for the goal.call_count that will stay at \u00270\u0027.","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            m_destroy_audit_template, m_destroy_audit,"},{"line_number":411,"context_line":"            m_destroy_action_plan, m_destroy_action):"},{"line_number":412,"context_line":"        self.cmd.exclude_orphans \u003d False"},{"line_number":413,"context_line":"        self.cmd.uuid \u003d self.goal1.uuid"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        with freezegun.freeze_time(self.fake_today):"},{"line_number":416,"context_line":"            self.cmd.execute()"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_67218afb","line":413,"range":{"start_line":413,"start_character":29,"end_line":413,"end_character":34},"in_reply_to":"dada55a8_36767806","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self.assertEqual(m_destroy_goal.call_count, 1)"},{"line_number":419,"context_line":"        self.assertEqual(m_destroy_strategy.call_count, 1)"},{"line_number":420,"context_line":"        self.assertEqual(m_destroy_audit_template.call_count, 1)"},{"line_number":421,"context_line":"        self.assertEqual(m_destroy_audit.call_count, 3)"},{"line_number":422,"context_line":"        self.assertEqual(m_destroy_action_plan.call_count, 3)"},{"line_number":423,"context_line":"        self.assertEqual(m_destroy_action.call_count, 3)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @mock.patch.object(dbapi.Connection, \"destroy_action\")"},{"line_number":426,"context_line":"    @mock.patch.object(dbapi.Connection, \"destroy_action_plan\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_7662b03f","line":423,"range":{"start_line":421,"start_character":0,"end_line":423,"end_character":56},"updated":"2016-07-20 12:36:56.000000000","message":"ditto","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self.assertEqual(m_destroy_goal.call_count, 1)"},{"line_number":419,"context_line":"        self.assertEqual(m_destroy_strategy.call_count, 1)"},{"line_number":420,"context_line":"        self.assertEqual(m_destroy_audit_template.call_count, 1)"},{"line_number":421,"context_line":"        self.assertEqual(m_destroy_audit.call_count, 3)"},{"line_number":422,"context_line":"        self.assertEqual(m_destroy_action_plan.call_count, 3)"},{"line_number":423,"context_line":"        self.assertEqual(m_destroy_action.call_count, 3)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @mock.patch.object(dbapi.Connection, \"destroy_action\")"},{"line_number":426,"context_line":"    @mock.patch.object(dbapi.Connection, \"destroy_action_plan\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_471c46c1","line":423,"range":{"start_line":421,"start_character":0,"end_line":423,"end_character":56},"in_reply_to":"dada55a8_7662b03f","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"79fa2dfafbe357ae9ee2f7472752db99f3b1e2df","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            self, m_destroy_goal, m_destroy_strategy,"},{"line_number":456,"context_line":"            m_destroy_audit_template, m_destroy_audit,"},{"line_number":457,"context_line":"            m_destroy_action_plan, m_destroy_action):"},{"line_number":458,"context_line":"        self.cmd.exclude_orphans \u003d True"},{"line_number":459,"context_line":"        self.cmd.uuid \u003d self.audit_template3.uuid"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        with freezegun.freeze_time(self.fake_today):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_b658a88b","line":458,"range":{"start_line":458,"start_character":35,"end_line":458,"end_character":39},"updated":"2016-07-20 12:36:56.000000000","message":"ditto","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"},{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"a7c9baf376b1bf87571839b98a2646ed738f7688","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            self, m_destroy_goal, m_destroy_strategy,"},{"line_number":456,"context_line":"            m_destroy_audit_template, m_destroy_audit,"},{"line_number":457,"context_line":"            m_destroy_action_plan, m_destroy_action):"},{"line_number":458,"context_line":"        self.cmd.exclude_orphans \u003d True"},{"line_number":459,"context_line":"        self.cmd.uuid \u003d self.audit_template3.uuid"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        with freezegun.freeze_time(self.fake_today):"}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_877c7eec","line":458,"range":{"start_line":458,"start_character":35,"end_line":458,"end_character":39},"in_reply_to":"dada55a8_b658a88b","updated":"2016-07-25 16:08:33.000000000","message":"Done","commit_id":"b18086e9d55af15c446571a169ca8ff5a887237d"}],"watcher/tests/db/utils.py":[{"author":{"_account_id":20038,"name":"Michael Gugino","email":"michael.gugino@walmart.com","username":"michaelgugino"},"change_message_id":"2f3439ba371c94175db5347be4b46879d40dd0da","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027type\u0027: kwargs.get(\u0027type\u0027, \u0027ONESHOT\u0027),"},{"line_number":58,"context_line":"        \u0027state\u0027: kwargs.get(\u0027state\u0027),"},{"line_number":59,"context_line":"        \u0027deadline\u0027: kwargs.get(\u0027deadline\u0027),"},{"line_number":60,"context_line":"        \u0027audit_template_id\u0027: kwargs.get(\u0027audit_template_id\u0027, 1),"},{"line_number":61,"context_line":"        \u0027created_at\u0027: kwargs.get(\u0027created_at\u0027),"},{"line_number":62,"context_line":"        \u0027updated_at\u0027: kwargs.get(\u0027updated_at\u0027),"},{"line_number":63,"context_line":"        \u0027deleted_at\u0027: kwargs.get(\u0027deleted_at\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_e2a1b5f8","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":64},"updated":"2016-06-17 18:31:50.000000000","message":"This is no longer part of the database schema, so maybe we should add in this part elsewhere?","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"d8f890c2362eb1db40446f2b94020ae41e758050","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027type\u0027: kwargs.get(\u0027type\u0027, \u0027ONESHOT\u0027),"},{"line_number":58,"context_line":"        \u0027state\u0027: kwargs.get(\u0027state\u0027),"},{"line_number":59,"context_line":"        \u0027deadline\u0027: kwargs.get(\u0027deadline\u0027),"},{"line_number":60,"context_line":"        \u0027audit_template_id\u0027: kwargs.get(\u0027audit_template_id\u0027, 1),"},{"line_number":61,"context_line":"        \u0027created_at\u0027: kwargs.get(\u0027created_at\u0027),"},{"line_number":62,"context_line":"        \u0027updated_at\u0027: kwargs.get(\u0027updated_at\u0027),"},{"line_number":63,"context_line":"        \u0027deleted_at\u0027: kwargs.get(\u0027deleted_at\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a9d85d2_ce3424e0","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":64},"in_reply_to":"7aa08908_e2a1b5f8","updated":"2016-06-20 12:46:00.000000000","message":"IMHO, we should remove this and then update any unit test assuming the presence of this one without trying to move it somewhere else.","commit_id":"8c15cdae6fa6a97b480c3bc93f1cff07c7f20785"}]}
