def test_alter_valid(self):
     mock = self.mock_valid_alter()
     response = self.client_autenticado().postXML(
         self.URL_ALTER, {self.XML_KEY: mock})
     valid_response(response)
     tpa = EquipamentoAcesso.get_by_pk(self.ID_ALTER_VALID)
     self.valid_attr(mock, model_to_dict(tpa))
    def handle_get(self, request, user, *args, **kwargs):
        """Handles GET requests to list all equip access by access identifier.

        URLs: equipamentoacesso/id/<id_acesso>/
        """

        try:

            # Commons Validations

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT,
                            AdminPermission.READ_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            # Business Validations

            # Valid id access
            id_access = kwargs.get('id_acesso')

            if not is_valid_int_greater_zero_param(id_access):
                self.log.error(u'Parameter id_acesso is invalid. Value: %s.',
                               id_access)
                raise InvalidValueError(None, 'id_acesso', id_access)

            # Business Rules

            access = EquipamentoAcesso.get_by_pk(id_access)

            equip_access_map = dict()
            equip_access_map['equipamento_acesso'] = model_to_dict(access)

            # Return XML
            return self.response(dumps_networkapi(equip_access_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_get(self, request, user, *args, **kwargs):
        """Handles GET requests to list all equip access by access identifier.

        URLs: equipamentoacesso/id/<id_acesso>/
        """

        try:

            # Commons Validations

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.READ_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            # Business Validations

            # Valid id access
            id_access = kwargs.get('id_acesso')

            if not is_valid_int_greater_zero_param(id_access):
                self.log.error(
                    u'Parameter id_acesso is invalid. Value: %s.', id_access)
                raise InvalidValueError(None, 'id_acesso', id_access)

            # Business Rules

            access = EquipamentoAcesso.get_by_pk(id_access)

            equip_access_map = dict()
            equip_access_map['equipamento_acesso'] = model_to_dict(access)

            # Return XML
            return self.response(dumps_networkapi(equip_access_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_post(self, request, auth, *args, **kwargs):
        """Handles POST requests to update Equipment Access by id.

        URLs: /equipmentaccess/edit/
        """

        self.log.info('Update EquipmentAccess by id')

        try:

            # Commons Validations

            # Business Validations

            # 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:
                msg = u'There is no value to the networkapi tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)
            equipmentaccess_map = networkapi_map.get('equipamento_acesso')
            if equipmentaccess_map is None:
                msg = u'There is no value to the equipamento_acesso tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)

            # Get XML data
            user = equipmentaccess_map.get('user')
            password = equipmentaccess_map.get('pass')
            fqdn = equipmentaccess_map.get('fqdn')
            enable_pass = equipmentaccess_map.get('enable_pass')
            type_access = equipmentaccess_map.get('id_tipo_acesso')
            equip_access = equipmentaccess_map.get('id_equip_acesso')

            # Password must NOT be none and 20 is the maxsize and 3 is the
            # minsize
            if not is_valid_string_maxsize(password, 150) or not is_valid_string_minsize(password, 3):
                self.log.error(u'Parameter pass is invalid.')
                raise InvalidValueError(None, 'pass', '****')

            # Enable Pass must NOT be none and 20 is the maxsize and 3 is the
            # minsize
            if not is_valid_string_maxsize(enable_pass, 150) or not is_valid_string_minsize(enable_pass, 3):
                self.log.error(u'Parameter enable_pass is invalid.')
                raise InvalidValueError(None, 'enable_pass', '****')

            # User must NOT be none and 20 is the maxsize and 3 is the minsize
            if not is_valid_string_maxsize(user, 20) or not is_valid_string_minsize(user, 3):
                self.log.error(u'Parameter user is invalid. Value: %s.', user)
                raise InvalidValueError(None, 'user', user)

            # Host must NOT be none and 100 is the maxsize and 4 is the minsize
            if not is_valid_string_maxsize(fqdn, 100) or not is_valid_string_minsize(fqdn, 4):
                self.log.error(u'Parameter fqdn is invalid. Value: %s.', fqdn)
                raise InvalidValueError(None, 'fqdn', fqdn)

            # Type Access
            # Valid type access ID
            if not is_valid_int_greater_zero_param(type_access):
                self.log.error(
                    u'Parameter type_access_id is invalid. Value: %s.', type_access)
                raise InvalidValueError(None, 'type_access_id', type_access)

            type_access = TipoAcesso.get_by_pk(type_access)

            # Business Rules
            equip_access = EquipamentoAcesso.get_by_pk(equip_access)

            # User permission
            if not has_perm(auth, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION, None, equip_access.equipamento.id, AdminPermission.EQUIP_WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            with distributedlock(LOCK_EQUIPMENT_ACCESS % type_access.id):

                # valid duplicate association
                if not (int(type_access.id) == int(equip_access.tipo_acesso.id)):
                    if EquipamentoAcesso.objects.filter(equipamento=equip_access.equipamento, tipo_acesso=type_access).count() > 0:
                        raise EquipamentoAccessDuplicatedError(
                            None, u'Já existe esta associação de equipamento e tipo de acesso cadastrada.')

                equip_access.__dict__.update(
                    fqdn=fqdn, user=user, password=password, enable_pass=enable_pass)
                equip_access.tipo_acesso = type_access

                equip_access.save(auth)

                # update
                equipmentaccess_map = dict()
                equipmentaccess_map[
                    'equipamento_acesso'] = model_to_dict(equip_access)

                # Return XML
                return self.response(dumps_networkapi(equipmentaccess_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_post(self, request, auth, *args, **kwargs):
        """Handles POST requests to update Equipment Access by id.

        URLs: /equipmentaccess/edit/
        """

        self.log.info('Update EquipmentAccess by id')

        try:

            # Commons Validations

            # Business Validations

            # 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:
                msg = u'There is no value to the networkapi tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)
            equipmentaccess_map = networkapi_map.get('equipamento_acesso')
            if equipmentaccess_map is None:
                msg = u'There is no value to the equipamento_acesso tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)

            # Get XML data
            user = equipmentaccess_map.get('user')
            password = equipmentaccess_map.get('pass')
            fqdn = equipmentaccess_map.get('fqdn')
            enable_pass = equipmentaccess_map.get('enable_pass')
            type_access = equipmentaccess_map.get('id_tipo_acesso')
            equip_access = equipmentaccess_map.get('id_equip_acesso')

            # Password must NOT be none and 20 is the maxsize and 3 is the
            # minsize
            if not is_valid_string_maxsize(
                    password, 150) or not is_valid_string_minsize(password, 3):
                self.log.error(u'Parameter pass is invalid.')
                raise InvalidValueError(None, 'pass', '****')

            # Enable Pass must NOT be none and 20 is the maxsize and 3 is the
            # minsize
            if not is_valid_string_maxsize(enable_pass,
                                           150) or not is_valid_string_minsize(
                                               enable_pass, 3):
                self.log.error(u'Parameter enable_pass is invalid.')
                raise InvalidValueError(None, 'enable_pass', '****')

            # User must NOT be none and 20 is the maxsize and 3 is the minsize
            if not is_valid_string_maxsize(
                    user, 20) or not is_valid_string_minsize(user, 3):
                self.log.error(u'Parameter user is invalid. Value: %s.', user)
                raise InvalidValueError(None, 'user', user)

            # Host must NOT be none and 100 is the maxsize and 4 is the minsize
            if not is_valid_string_maxsize(
                    fqdn, 100) or not is_valid_string_minsize(fqdn, 4):
                self.log.error(u'Parameter fqdn is invalid. Value: %s.', fqdn)
                raise InvalidValueError(None, 'fqdn', fqdn)

            # Type Access
            # Valid type access ID
            if not is_valid_int_greater_zero_param(type_access):
                self.log.error(
                    u'Parameter type_access_id is invalid. Value: %s.',
                    type_access)
                raise InvalidValueError(None, 'type_access_id', type_access)

            type_access = TipoAcesso.get_by_pk(type_access)

            # Business Rules
            equip_access = EquipamentoAcesso.get_by_pk(equip_access)

            # User permission
            if not has_perm(auth, AdminPermission.EQUIPMENT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION, None,
                            equip_access.equipamento.id,
                            AdminPermission.EQUIP_WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            with distributedlock(LOCK_EQUIPMENT_ACCESS % type_access.id):

                # valid duplicate association
                if not (int(type_access.id) == int(
                        equip_access.tipo_acesso.id)):
                    if EquipamentoAcesso.objects.filter(
                            equipamento=equip_access.equipamento,
                            tipo_acesso=type_access).count() > 0:
                        raise EquipamentoAccessDuplicatedError(
                            None,
                            u'Já existe esta associação de equipamento e tipo de acesso cadastrada.'
                        )

                equip_access.__dict__.update(fqdn=fqdn,
                                             user=user,
                                             password=password,
                                             enable_pass=enable_pass)
                equip_access.tipo_acesso = type_access

                equip_access.save(auth)

                # update
                equipmentaccess_map = dict()
                equipmentaccess_map['equipamento_acesso'] = model_to_dict(
                    equip_access)

                # Return XML
                return self.response(dumps_networkapi(equipmentaccess_map))

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