def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to add Group l3.

        URL: groupl3/
        """

        try:

            self.log.info('Add Group l3')

            # User permission
            if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag  of XML request.')

            group_l3_map = networkapi_map.get('group_l3')
            if group_l3_map is None:
                return self.response_error(3, u'There is no value to the group_l3 tag  of XML request.')

            # Get XML data
            name = group_l3_map.get('name')

            try:
                GrupoL3.get_by_name(name)
                raise GrupoL3NameDuplicatedError(
                    None, u'Já existe um grupo l3 com o valor name %s.' % name)
            except GroupL3NotFoundError:
                pass

            l3_group = GrupoL3()

            # set variables
            l3_group.nome = name

            try:
                # save Group l3
                l3_group.save()
            except Exception, e:
                self.log.error(u'Failed to save the Group l3.')
                raise AmbienteError(e, u'Failed to save the Group l3.')

            l3_group_map = dict()
            l3_group_map['group_l3'] = model_to_dict(
                l3_group, exclude=['nome'])

            return self.response(dumps_networkapi(l3_group_map))
    def handle_put(self, request, user, *args, **kwargs):
        """Treat requests PUT to edit Group l3.

        URL: groupl3/<id_groupl3>/
        """
        try:

            self.log.info('Edit Group l3')

            # User permission
            if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            id_groupl3 = kwargs.get('id_groupl3')

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format

            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag  of XML request.')

            group_l3_map = networkapi_map.get('group_l3')
            if group_l3_map is None:
                return self.response_error(3, u'There is no value to the group_l3 tag  of XML request.')

            # Get XML data
            name = group_l3_map.get('name')

            # Valid ID Group L3
            if not is_valid_int_greater_zero_param(id_groupl3):
                self.log.error(
                    u'The id_groupl3 parameter is not a valid value: %s.', id_groupl3)
                raise InvalidValueError(None, 'id_groupl3', id_groupl3)

            # Valid name
            if not is_valid_string_minsize(name, 2) or not is_valid_string_maxsize(name, 80):
                self.log.error(u'Parameter name is invalid. Value: %s', name)
                raise InvalidValueError(None, 'name', name)

            # Find GroupL3 by ID to check if it exist
            groupl3 = GrupoL3.get_by_pk(id_groupl3)

            with distributedlock(LOCK_GROUP_L3 % id_groupl3):

                try:
                    if groupl3.nome.lower() != name.lower():
                        GrupoL3.get_by_name(name)
                        raise GrupoL3NameDuplicatedError(
                            None, u'Já existe um grupo l3 com o valor name %s.' % name)
                except GroupL3NotFoundError:
                    pass

                # set variables
                groupl3.nome = name

                try:
                    # update Group l3
                    groupl3.save()
                except Exception, e:
                    self.log.error(u'Failed to update the Group l3.')
                    raise AmbienteError(e, u'Failed to update the Group l3.')

                return self.response(dumps_networkapi({}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
Ejemplo n.º 3
0
    def handle_put(self, request, user, *args, **kwargs):
        """Treat requests PUT to edit Group l3.

        URL: groupl3/<id_groupl3>/
        """
        try:

            self.log.info('Edit Group l3')

            # User permission
            if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            id_groupl3 = kwargs.get('id_groupl3')

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format

            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(
                    3,
                    u'There is no value to the networkapi tag  of XML request.'
                )

            group_l3_map = networkapi_map.get('group_l3')
            if group_l3_map is None:
                return self.response_error(
                    3,
                    u'There is no value to the group_l3 tag  of XML request.')

            # Get XML data
            name = group_l3_map.get('name')

            # Valid ID Group L3
            if not is_valid_int_greater_zero_param(id_groupl3):
                self.log.error(
                    u'The id_groupl3 parameter is not a valid value: %s.',
                    id_groupl3)
                raise InvalidValueError(None, 'id_groupl3', id_groupl3)

            # Valid name
            if not is_valid_string_minsize(
                    name, 2) or not is_valid_string_maxsize(name, 80):
                self.log.error(u'Parameter name is invalid. Value: %s', name)
                raise InvalidValueError(None, 'name', name)

            # Find GroupL3 by ID to check if it exist
            groupl3 = GrupoL3.get_by_pk(id_groupl3)

            with distributedlock(LOCK_GROUP_L3 % id_groupl3):

                try:
                    if groupl3.nome.lower() != name.lower():
                        GrupoL3.get_by_name(name)
                        raise GrupoL3NameDuplicatedError(
                            None,
                            u'Já existe um grupo l3 com o valor name %s.' %
                            name)
                except GroupL3NotFoundError:
                    pass

                # set variables
                groupl3.nome = name

                try:
                    # update Group l3
                    groupl3.save()
                except Exception, e:
                    self.log.error(u'Failed to update the Group l3.')
                    raise AmbienteError(e, u'Failed to update the Group l3.')

                return self.response(dumps_networkapi({}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)