def add_policy_handler()

in modular_api_cli/modular_handler/policy_handler.py [0:0]


    def add_policy_handler(self, policy: str, policy_path: str) -> CommandResponse:
        """
        Add policy to ModularPolicy table
        :param policy: Policy name
        :param policy_path: Path to file which contains allowed/denied actions
        :return: CommandResponse
        """
        _LOG.info(f'Going to add policy named \'{policy}\' from \'{policy_path}\'')
        existing_policy = self.policy_service.describe_policy(
            policy_name=policy
        )
        if existing_policy:
            if existing_policy.state == REMOVED_STATE:
                _LOG.error('Policy already exists')
                raise ModularApiBadRequestException(
                    f'Policy with name \'{policy}\' already exists and marked as '
                    f'\'{REMOVED_STATE}\'.')

            elif existing_policy.state == ACTIVATED_STATE:
                _LOG.error('Policy already exists')
                raise ModularApiBadRequestException(
                    f'Policy with name \'{policy}\' already exists. Please '
                    f'change name to another one or update existing '
                    f'\'{policy}\' policy with new permissions by command:'
                    f'{line_sep}modular policy update --policy {policy} '
                    f'--policy_path {policy_path}\'')

            _LOG.error('Policy already exists')
            raise ModularApiConflictException(
                f'Policy with name \'{policy}\' already exists with invalid '
                f'\'{existing_policy.state}\' state')

        policy_content = open_json_file(file_path=policy_path)
        policy_validation(policy_content=policy_content)
        policy_item = self.policy_service.create_policy_entity(
            policy_name=policy,
            policy_content=policy_content
        )

        policy_hash_sum = self.policy_service.calculate_policy_hash(
            policy_item=policy_item
        )
        policy_item.hash = policy_hash_sum
        self.policy_service.save_policy(policy_item=policy_item)

        _LOG.info('Policy successfully added')
        return CommandResponse(
            message=f'Policy with name \'{policy}\' successfully added')