def handle_delete(self, request, user, *args, **kwargs):
        """Trata as requisições de DELETE para remover uma associação entre um Equipamento e um Grupo.

        URL:  /equipamentogrupo/equipamento/<id_equip>/egrupo/<id_egrupo>/
        """
        try:

            equip_id = kwargs.get('id_equip')
            if not is_valid_int_greater_zero_param(equip_id):
                self.log.error(
                    u'The equip_id parameter is not a valid value: %s.',
                    equip_id)
                raise InvalidValueError(None, 'equip_id', equip_id)

            egroup_id = kwargs.get('id_egrupo')
            if not is_valid_int_greater_zero_param(egroup_id):
                self.log.error(
                    u'The egroup_id parameter is not a valid value: %s.',
                    egroup_id)
                raise InvalidValueError(None, 'egroup_id', egroup_id)

            Equipamento.get_by_pk(equip_id)
            EGrupo.get_by_pk(egroup_id)

            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION, None, equip_id,
                            AdminPermission.EQUIP_WRITE_OPERATION):
                return self.not_authorized()

            with distributedlock(LOCK_EQUIPMENT_GROUP % egroup_id):

                EquipamentoGrupo.remove(user, equip_id, egroup_id)
                return self.response(dumps_networkapi({}))
        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
def has_perm(user, perm_function, perm_oper, egroup_id=None, equip_id=None, equip_oper=None):
    '''
    @raise EGrupoNotFoundError: Grupo do equipamento nao cadastrado.

    @raise EquipamentoNotFoundError: Equipamento nao cadastrado.

    @raise GrupoError: Falha ao pesquisar os direitos do grupo-equipamento, ou as permissões administrativas, ou o grupo do equipamento.

    @raise EquipamentoError: Falha ao pesquisar o equipamento.
    '''
    if user is None:
        return False

    egroups = None
    if egroup_id is not None:
        egroup = EGrupo.get_by_pk(egroup_id)
        egroups = [egroup]
    elif equip_id is not None:
        equip = Equipamento.get_by_pk(equip_id, 'grupos')
        egroups = equip.grupos.all()
        if len(egroups) == 0:
            return False

    ugroups = user.grupos.all()
    for ugroup in ugroups:
        try:
            # perm = PermissaoAdministrativa().get_permission(perm_function, ugroup, perm_oper)
            PermissaoAdministrativa().get_permission(perm_function, ugroup, perm_oper)
            if (egroups is None) or (_has_equip_perm(ugroup, egroups, equip_oper)):
                return True
        except PermissaoAdministrativaNotFoundError:
            continue
    return False
    def handle_get(self, request, user, *args, **kwargs):
        """Treat requests GET to get Group Equipment.

        URL: egroup/<id_egroup>/
        """
        try:

            self.log.info('Get Group Equipment by ID')

            id_egroup = kwargs.get('id_egroup')

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

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

            # Find Group Equipment by ID to check if it exist
            egroup = EGrupo.get_by_pk(id_egroup)

            egroup_map = dict()
            egroup_map['group_equipament'] = model_to_dict(egroup)

            return self.response(dumps_networkapi(egroup_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
예제 #4
0
def has_perm(user, perm_function, perm_oper, egroup_id=None, equip_id=None, equip_oper=None):
    """
    @raise EGrupoNotFoundError: Grupo do equipamento nao cadastrado.

    @raise EquipamentoNotFoundError: Equipamento nao cadastrado.

    @raise GrupoError: Falha ao pesquisar os direitos do grupo-equipamento, ou as permissões administrativas, ou o grupo do equipamento.

    @raise EquipamentoError: Falha ao pesquisar o equipamento.
    """
    if user is None:
        return False

    egroups = None
    if egroup_id is not None:
        egroup = EGrupo.get_by_pk(egroup_id)
        egroups = [egroup]
    elif equip_id is not None:
        equip = Equipamento.get_by_pk(equip_id, 'grupos')
        egroups = equip.grupos.all()
        if len(egroups) == 0:
            return False

    ugroups = user.grupos.all()
    for ugroup in ugroups:
        try:
            # perm = PermissaoAdministrativa().get_permission(perm_function, ugroup, perm_oper)
            PermissaoAdministrativa().get_permission(perm_function, ugroup, perm_oper)
            if (egroups is None) or (_has_equip_perm(ugroup, egroups, equip_oper)):
                return True
        except PermissaoAdministrativaNotFoundError:
            continue
    return False
    def handle_get(self, request, user, *args, **kwargs):
        """Treat requests GET to get Group Equipment.

        URL: egroup/<id_egroup>/
        """
        try:

            self.log.info('Get Group Equipment by ID')

            id_egroup = kwargs.get('id_egroup')

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

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

            # Find Group Equipment by ID to check if it exist
            egroup = EGrupo.get_by_pk(id_egroup)

            egroup_map = dict()
            egroup_map['group_equipament'] = model_to_dict(egroup)

            return self.response(dumps_networkapi(egroup_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_get(self, request, user, *args, **kwargs):
        '''Trata as requisições de GET remover a associação entre um grupo de equipamento e um equipamento.

        URL: egrupo/equipamento/id_equip/egrupo/id_egrupo/
        '''
        try:

            id_equip = kwargs.get('id_equipamento')
            id_egrupo = kwargs.get('id_egrupo')

            if not is_valid_int_greater_zero_param(id_egrupo):
                raise InvalidValueError(None, 'id_egrupo', id_egrupo)

            if not is_valid_int_greater_zero_param(id_equip):
                raise InvalidValueError(None, 'id_equip', id_equip)

            equip = Equipamento.get_by_pk(id_equip)
            EGrupo.get_by_pk(id_egrupo)

            if not has_perm(user,
                            AdminPermission.EQUIPMENT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION,
                            id_egrupo,
                            id_equip,
                            AdminPermission.EQUIP_WRITE_OPERATION):
                raise UserNotAuthorizedError(
                    None, u'User does not have permission to perform the operation.')

            with distributedlock(LOCK_EQUIPMENT_GROUP % id_egrupo):

                EquipamentoGrupo.remove(user, equip.id, id_egrupo)

                return self.response(dumps_networkapi({}))

        except InvalidValueError, e:
            self.log.error(
                u'Parameter %s is invalid. Value: %s.', e.param, e.value)
            return self.response_error(269, e.param, e.value)
    def handle_delete(self, request, user, *args, **kwargs):
        """Trata as requisições de DELETE para remover uma associação entre um Equipamento e um Grupo.

        URL:  /equipamentogrupo/equipamento/<id_equip>/egrupo/<id_egrupo>/
        """
        try:

            equip_id = kwargs.get('id_equip')
            if not is_valid_int_greater_zero_param(equip_id):
                self.log.error(
                    u'The equip_id parameter is not a valid value: %s.', equip_id)
                raise InvalidValueError(None, 'equip_id', equip_id)

            egroup_id = kwargs.get('id_egrupo')
            if not is_valid_int_greater_zero_param(egroup_id):
                self.log.error(
                    u'The egroup_id parameter is not a valid value: %s.', egroup_id)
                raise InvalidValueError(None, 'egroup_id', egroup_id)

            Equipamento.get_by_pk(equip_id)
            EGrupo.get_by_pk(egroup_id)

            if not has_perm(user,
                            AdminPermission.EQUIPMENT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION,
                            None,
                            equip_id,
                            AdminPermission.EQUIP_WRITE_OPERATION):
                return self.not_authorized()

            with distributedlock(LOCK_EQUIPMENT_GROUP % egroup_id):

                EquipamentoGrupo.remove(user, equip_id, egroup_id)
                return self.response(dumps_networkapi({}))
        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_get(self, request, user, *args, **kwargs):
        """Trata as requisições de GET para listar todos os grupos de equipamento de um determindo equipamento.

        URL: egrupo/equip/id_equip
        """
        try:

            if not has_perm(user, AdminPermission.EQUIPMENT_GROUP_MANAGEMENT,
                            AdminPermission.READ_OPERATION):
                return self.not_authorized()

            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT,
                            AdminPermission.READ_OPERATION):
                return self.not_authorized()

            id_equip = kwargs.get('id_equip')

            if not is_valid_int_greater_zero_param(id_equip):
                raise InvalidValueError(None, 'id_equip', id_equip)

            equip = Equipamento.get_by_pk(id_equip)

            egroups = EquipamentoGrupo.get_by_equipment(equip.id)

            group_list = []
            map_list = []

            for egroup in egroups:
                group_list.append(EGrupo.get_by_pk(egroup.egrupo.id))

            for egroup in group_list:
                egroup_map = dict()
                egroup_map['id'] = egroup.id
                egroup_map['nome'] = egroup.nome
                map_list.append(egroup_map)

            network_map = dict()

            network_map['grupo'] = map_list

            return self.response(dumps_networkapi(network_map))

        except InvalidValueError, e:
            self.log.error(u'Parameter %s is invalid. Value: %s.', e.param,
                           e.value)
            return self.response_error(269, e.param, e.value)
예제 #9
0
    def handle_get(self, request, user, *args, **kwargs):
        """Treat requests GET to get Group Equipment.

        URL: equipment/group/<id_egroup>/
        """

        try:
            self.log.info('Get Equipment of Group by ID Group')

            id_egroup = kwargs.get('id_egroup')

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

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

            # Find Group Equipment by ID to check if it exist
            egroup = EGrupo.get_by_pk(id_egroup)

            equip_list = []
            for equipament in egroup.equipamento_set.all():
                eq = {}
                equip = Equipamento.objects.select_related('modelo').get(
                    id=equipament.id)
                eq = model_to_dict(equip)
                eq['type'] = model_to_dict(equip.tipo_equipamento)
                eq['model'] = model_to_dict(equip.modelo)
                eq['mark'] = model_to_dict(equip.modelo.marca)
                equip_list.append(eq)

            equipament_map = dict()
            equipament_map['equipments'] = equip_list

            return self.response(dumps_networkapi(equipament_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_get(self, request, user, *args, **kwargs):
        '''Trata as requisições de GET para listar todos os grupos de equipamento de um determindo equipamento.

        URL: egrupo/equip/id_equip
        '''
        try:

            if not has_perm(user, AdminPermission.EQUIPMENT_GROUP_MANAGEMENT, AdminPermission.READ_OPERATION):
                return self.not_authorized()

            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.READ_OPERATION):
                return self.not_authorized()

            id_equip = kwargs.get('id_equip')

            if not is_valid_int_greater_zero_param(id_equip):
                raise InvalidValueError(None, 'id_equip', id_equip)

            equip = Equipamento.get_by_pk(id_equip)

            egroups = EquipamentoGrupo.get_by_equipment(equip.id)

            group_list = []
            map_list = []

            for egroup in egroups:
                group_list.append(EGrupo.get_by_pk(egroup.egrupo.id))

            for egroup in group_list:
                egroup_map = dict()
                egroup_map['id'] = egroup.id
                egroup_map['nome'] = egroup.nome
                map_list.append(egroup_map)

            network_map = dict()

            network_map['grupo'] = map_list

            return self.response(dumps_networkapi(network_map))

        except InvalidValueError, e:
            self.log.error(
                u'Parameter %s is invalid. Value: %s.', e.param, e.value)
            return self.response_error(269, e.param, e.value)
    def handle_get(self, request, user, *args, **kwargs):
        """Treat requests GET to get Group Equipment.

        URL: equipment/group/<id_egroup>/
        """

        try:
            self.log.info("Get Equipment of Group by ID Group")

            id_egroup = kwargs.get('id_egroup')

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

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

            # Find Group Equipment by ID to check if it exist
            egroup = EGrupo.get_by_pk(id_egroup)

            equip_list = []
            for equipament in egroup.equipamento_set.all():
                eq = {}
                equip = Equipamento.objects.select_related().get(
                    id=equipament.id)
                eq = model_to_dict(equip)
                eq['type'] = model_to_dict(equip.tipo_equipamento)
                eq['model'] = model_to_dict(equip.modelo)
                eq['mark'] = model_to_dict(equip.modelo.marca)
                equip_list.append(eq)

            equipament_map = dict()
            equipament_map['equipments'] = equip_list

            return self.response(dumps_networkapi(equipament_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
예제 #12
0
    def insert_equipment_group(self, equip_id, group_id, user):

        equipment_group = EquipamentoGrupo()
        equipment_group.egrupo = EGrupo()
        equipment_group.egrupo.id = group_id
        equipment_group.equipamento = Equipamento()
        equipment_group.equipamento.id = equip_id

        try:
            equipment_group.create(user)

            equipment_group_map = dict()
            equipment_group_map['id'] = equipment_group.id
            map = dict()
            map['equipamento_grupo'] = equipment_group_map

            return self.response(dumps_networkapi(map))

        except EGrupoNotFoundError:
            return self.response_error(102)
        except EquipamentoGrupoDuplicatedError:
            return self.response_error(146)
        except (EquipamentoError, GrupoError):
            return self.response_error(1)
예제 #13
0
 def test_alter_valid(self):
     mock = self.mock_valid_alter()
     response = self.alter(self.ID_ALTER_VALID, {self.XML_KEY: mock})
     valid_response(response)
     egrp = EGrupo.get_by_pk(self.ID_ALTER_VALID)
     self.valid_attr(mock, model_to_dict(egrp))