Tidy up rpc_client definitions

Each api and test cases use different client names.  This patch
changes everything to use self.rpc_client

blueprint: oslo-messaging

Change-Id: If94fd72a36cce1863296d0f64c75815abfd22a8c
This commit is contained in:
Steven Dake 2014-02-24 16:55:21 -07:00
parent 1116377174
commit 13336b0046
12 changed files with 120 additions and 120 deletions

View File

@ -22,13 +22,13 @@ from heat.api.aws import exception
class SignalController(object):
def __init__(self, options):
self.options = options
self.engine = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
def update_waitcondition(self, req, body, arn):
con = req.context
identity = identifier.ResourceIdentifier.from_arn(arn)
try:
md = self.engine.metadata_update(
md = self.rpc_client.metadata_update(
con,
stack_identity=dict(identity.stack()),
resource_name=identity.resource_name,
@ -42,7 +42,7 @@ class SignalController(object):
con = req.context
identity = identifier.ResourceIdentifier.from_arn(arn)
try:
self.engine.resource_signal(
self.rpc_client.resource_signal(
con,
stack_identity=dict(identity.stack()),
resource_name=identity.resource_name,

View File

@ -46,7 +46,7 @@ class StackController(object):
def __init__(self, options):
self.options = options
self.engine_rpcapi = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
self.policy = policy.Enforcer(scope='cloudformation')
def _enforce(self, req, action):
@ -104,7 +104,7 @@ class StackController(object):
try:
return dict(identifier.HeatIdentifier.from_arn(stack_name))
except ValueError:
return self.engine_rpcapi.identify_stack(con, stack_name)
return self.rpc_client.identify_stack(con, stack_name)
def list(self, req):
"""
@ -143,7 +143,7 @@ class StackController(object):
con = req.context
try:
stack_list = self.engine_rpcapi.list_stacks(con)
stack_list = self.rpc_client.list_stacks(con)
except Exception as ex:
return exception.map_remote_error(ex)
@ -233,7 +233,7 @@ class StackController(object):
else:
identity = None
stack_list = self.engine_rpcapi.show_stack(con, identity)
stack_list = self.rpc_client.show_stack(con, identity)
except Exception as ex:
return exception.map_remote_error(ex)
@ -314,8 +314,8 @@ class StackController(object):
# This should not happen, so return HeatInternalFailureError
return exception.HeatInternalFailureError(detail=msg)
engine_action = {self.CREATE_STACK: self.engine_rpcapi.create_stack,
self.UPDATE_STACK: self.engine_rpcapi.update_stack}
engine_action = {self.CREATE_STACK: self.rpc_client.create_stack,
self.UPDATE_STACK: self.rpc_client.update_stack}
con = req.context
@ -375,7 +375,7 @@ class StackController(object):
con = req.context
try:
identity = self._get_identity(con, req.params['StackName'])
templ = self.engine_rpcapi.get_template(con, identity)
templ = self.rpc_client.get_template(con, identity)
except Exception as ex:
return exception.map_remote_error(ex)
@ -437,7 +437,7 @@ class StackController(object):
}
try:
res = self.engine_rpcapi.validate_template(con, template)
res = self.rpc_client.validate_template(con, template)
if 'Error' in res:
return api_utils.format_response('ValidateTemplate',
res['Error'])
@ -458,7 +458,7 @@ class StackController(object):
con = req.context
try:
identity = self._get_identity(con, req.params['StackName'])
res = self.engine_rpcapi.delete_stack(con, identity, cast=False)
res = self.rpc_client.delete_stack(con, identity, cast=False)
except Exception as ex:
return exception.map_remote_error(ex)
@ -504,7 +504,7 @@ class StackController(object):
stack_name = req.params.get('StackName', None)
try:
identity = stack_name and self._get_identity(con, stack_name)
events = self.engine_rpcapi.list_events(con, identity)
events = self.rpc_client.list_events(con, identity)
except Exception as ex:
return exception.map_remote_error(ex)
@ -550,7 +550,7 @@ class StackController(object):
try:
identity = self._get_identity(con, req.params['StackName'])
resource_details = self.engine_rpcapi.describe_stack_resource(
resource_details = self.rpc_client.describe_stack_resource(
con,
stack_identity=identity,
resource_name=req.params.get('LogicalResourceId'))
@ -614,10 +614,10 @@ class StackController(object):
if stack_name is not None:
identity = self._get_identity(con, stack_name)
else:
identity = self.engine_rpcapi.find_physical_resource(
identity = self.rpc_client.find_physical_resource(
con,
physical_resource_id=physical_resource_id)
resources = self.engine_rpcapi.describe_stack_resources(
resources = self.rpc_client.describe_stack_resources(
con,
stack_identity=identity,
resource_name=req.params.get('LogicalResourceId'))
@ -659,7 +659,7 @@ class StackController(object):
try:
identity = self._get_identity(con, req.params['StackName'])
resources = self.engine_rpcapi.list_stack_resources(
resources = self.rpc_client.list_stack_resources(
con,
stack_identity=identity)
except Exception as ex:

View File

@ -40,7 +40,7 @@ class WatchController(object):
def __init__(self, options):
self.options = options
self.engine_rpcapi = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
self.policy = policy.Enforcer(scope='cloudwatch')
def _enforce(self, req, action):
@ -139,7 +139,7 @@ class WatchController(object):
name = None
try:
watch_list = self.engine_rpcapi.show_watch(con, watch_name=name)
watch_list = self.rpc_client.show_watch(con, watch_name=name)
except rpc_common.RemoteError as ex:
return exception.map_remote_error(ex)
@ -230,8 +230,8 @@ class WatchController(object):
# so we pass None/None and do any filtering locally
null_kwargs = {'metric_namespace': None,
'metric_name': None}
watch_data = self.engine_rpcapi.show_watch_metric(con,
**null_kwargs)
watch_data = self.rpc_client.show_watch_metric(con,
**null_kwargs)
except rpc_common.RemoteError as ex:
return exception.map_remote_error(ex)
@ -294,7 +294,7 @@ class WatchController(object):
'Dimensions': dimensions}}
try:
self.engine_rpcapi.create_watch_data(con, watch_name, data)
self.rpc_client.create_watch_data(con, watch_name, data)
except rpc_common.RemoteError as ex:
return exception.map_remote_error(ex)
@ -330,8 +330,8 @@ class WatchController(object):
logger.debug(_("setting %(name)s to %(state)s") % {
'name': name, 'state': state_map[state]})
try:
self.engine_rpcapi.set_watch_state(con, watch_name=name,
state=state_map[state])
self.rpc_client.set_watch_state(con, watch_name=name,
state=state_map[state])
except rpc_common.RemoteError as ex:
return exception.map_remote_error(ex)

View File

@ -32,7 +32,7 @@ class ActionController(object):
def __init__(self, options):
self.options = options
self.engine = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
@util.identified_stack
def action(self, req, identity, body={}):
@ -52,9 +52,9 @@ class ActionController(object):
raise exc.HTTPBadRequest(_("Invalid action %s specified") % ac)
if ac == self.SUSPEND:
self.engine.stack_suspend(req.context, identity)
self.rpc_client.stack_suspend(req.context, identity)
elif ac == self.RESUME:
self.engine.stack_resume(req.context, identity)
self.rpc_client.stack_resume(req.context, identity)
else:
raise exc.HTTPInternalServerError(_("Unexpected action %s") % ac)

View File

@ -30,11 +30,11 @@ class BuildInfoController(object):
def __init__(self, options):
self.options = options
self.engine = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
@util.policy_enforce
def build_info(self, req):
engine_revision = self.engine.get_revision(req.context)
engine_revision = self.rpc_client.get_revision(req.context)
build_info = {
'api': {'revision': cfg.CONF.revision['heat_revision']},
'engine': {'revision': engine_revision}

View File

@ -78,12 +78,12 @@ class EventController(object):
def __init__(self, options):
self.options = options
self.engine = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
def _event_list(self, req, identity,
filter_func=lambda e: True, detail=False):
events = self.engine.list_events(req.context,
identity)
events = self.rpc_client.list_events(req.context,
identity)
keys = None if detail else summary_keys
return [format_event(req, e, keys) for e in events if filter_func(e)]

View File

@ -65,7 +65,7 @@ class ResourceController(object):
def __init__(self, options):
self.options = options
self.engine = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
@util.identified_stack
def index(self, req, identity):
@ -73,8 +73,8 @@ class ResourceController(object):
Lists summary information for all resources
"""
res_list = self.engine.list_stack_resources(req.context,
identity)
res_list = self.rpc_client.list_stack_resources(req.context,
identity)
return {'resources': [format_resource(req, res) for res in res_list]}
@ -84,9 +84,9 @@ class ResourceController(object):
Gets detailed information for a resource
"""
res = self.engine.describe_stack_resource(req.context,
identity,
resource_name)
res = self.rpc_client.describe_stack_resource(req.context,
identity,
resource_name)
return {'resource': format_resource(req, res)}
@ -96,19 +96,18 @@ class ResourceController(object):
Gets metadata information for a resource
"""
res = self.engine.describe_stack_resource(req.context,
identity,
resource_name)
res = self.rpc_client.describe_stack_resource(req.context,
identity,
resource_name)
return {engine_api.RES_METADATA: res[engine_api.RES_METADATA]}
@util.identified_stack
def signal(self, req, identity, resource_name, body=None):
self.engine.resource_signal(
req.context,
stack_identity=identity,
resource_name=resource_name,
details=body)
self.rpc_client.resource_signal(req.context,
stack_identity=identity,
resource_name=resource_name,
details=body)
def create_resource(options):

View File

@ -30,7 +30,7 @@ class SoftwareConfigController(object):
def __init__(self, options):
self.options = options
self.engine = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
def default(self, req, **args):
raise exc.HTTPNotFound()
@ -40,7 +40,7 @@ class SoftwareConfigController(object):
"""
Gets detailed information for a software config
"""
sc = self.engine.show_software_config(
sc = self.rpc_client.show_software_config(
req.context, config_id)
return {'software_config': sc}
@ -57,7 +57,7 @@ class SoftwareConfigController(object):
'outputs': body.get('outputs'),
'options': body.get('options'),
}
sc = self.engine.create_software_config(
sc = self.rpc_client.create_software_config(
req.context, **create_data)
return {'software_config': sc}
@ -66,7 +66,7 @@ class SoftwareConfigController(object):
"""
Delete an existing software config
"""
res = self.engine.delete_software_config(req.context, config_id)
res = self.rpc_client.delete_software_config(req.context, config_id)
if res is not None:
raise exc.HTTPBadRequest(res['Error'])

View File

@ -30,7 +30,7 @@ class SoftwareDeploymentController(object):
def __init__(self, options):
self.options = options
self.engine = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
def default(self, req, **args):
raise exc.HTTPNotFound()
@ -44,7 +44,7 @@ class SoftwareDeploymentController(object):
'server_id': 'single',
}
params = util.get_allowed_params(req.params, whitelist)
sds = self.engine.list_software_deployments(req.context, **params)
sds = self.rpc_client.list_software_deployments(req.context, **params)
return {'software_deployments': sds}
@util.policy_enforce
@ -52,8 +52,8 @@ class SoftwareDeploymentController(object):
"""
Gets detailed information for a software deployment
"""
sd = self.engine.show_software_deployment(
req.context, deployment_id)
sd = self.rpc_client.show_software_deployment(req.context,
deployment_id)
return {'software_deployment': sd}
@util.policy_enforce
@ -65,8 +65,8 @@ class SoftwareDeploymentController(object):
'config_id', 'server_id', 'input_values', 'signal_id',
'action', 'status', 'status_reason'))
sd = self.engine.create_software_deployment(
req.context, **create_data)
sd = self.rpc_client.create_software_deployment(req.context,
**create_data)
return {'software_deployment': sd}
@util.policy_enforce
@ -77,8 +77,9 @@ class SoftwareDeploymentController(object):
update_data = dict((k, body.get(k)) for k in (
'config_id', 'input_values', 'output_values', 'action',
'status', 'status_reason'))
sd = self.engine.update_software_deployment(
req.context, deployment_id, **update_data)
sd = self.rpc_client.update_software_deployment(req.context,
deployment_id,
**update_data)
return {'software_deployment': sd}
@util.policy_enforce
@ -86,8 +87,8 @@ class SoftwareDeploymentController(object):
"""
Delete an existing software deployment
"""
res = self.engine.delete_software_deployment(
req.context, deployment_id)
res = self.rpc_client.delete_software_deployment(req.context,
deployment_id)
if res is not None:
raise exc.HTTPBadRequest(res['Error'])

View File

@ -147,7 +147,7 @@ class StackController(object):
def __init__(self, options):
self.options = options
self.engine = rpc_client.EngineClient()
self.rpc_client = rpc_client.EngineClient()
def default(self, req, **args):
raise exc.HTTPNotFound()
@ -170,17 +170,17 @@ class StackController(object):
params = util.get_allowed_params(req.params, whitelist)
filter_params = util.get_allowed_params(req.params, filter_whitelist)
stacks = self.engine.list_stacks(req.context,
filters=filter_params,
**params)
stacks = self.rpc_client.list_stacks(req.context,
filters=filter_params,
**params)
count = None
if req.params.get('with_count'):
try:
# Check if engine has been updated to a version with
# support to count_stacks before trying to use it.
count = self.engine.count_stacks(req.context,
filters=filter_params)
count = self.rpc_client.count_stacks(req.context,
filters=filter_params)
except AttributeError as exc:
logger.warning("Old Engine Version: %s" % str(exc))
@ -191,7 +191,7 @@ class StackController(object):
"""
Lists detailed information for all stacks
"""
stacks = self.engine.list_stacks(req.context)
stacks = self.rpc_client.list_stacks(req.context)
return {'stacks': [stacks_view.format_stack(req, s) for s in stacks]}
@ -203,12 +203,12 @@ class StackController(object):
data = InstantiationData(body)
result = self.engine.preview_stack(req.context,
data.stack_name(),
data.template(),
data.environment(),
data.files(),
data.args())
result = self.rpc_client.preview_stack(req.context,
data.stack_name(),
data.template(),
data.environment(),
data.files(),
data.args())
formatted_stack = stacks_view.format_stack(req, result)
return {'stack': formatted_stack}
@ -220,12 +220,12 @@ class StackController(object):
"""
data = InstantiationData(body)
result = self.engine.create_stack(req.context,
data.stack_name(),
data.template(),
data.environment(),
data.files(),
data.args())
result = self.rpc_client.create_stack(req.context,
data.stack_name(),
data.template(),
data.environment(),
data.files(),
data.args())
formatted_stack = stacks_view.format_stack(
req,
@ -241,8 +241,8 @@ class StackController(object):
try:
identity = dict(identifier.HeatIdentifier.from_arn(stack_name))
except ValueError:
identity = self.engine.identify_stack(req.context,
stack_name)
identity = self.rpc_client.identify_stack(req.context,
stack_name)
location = util.make_url(req, identity)
if path:
@ -256,8 +256,8 @@ class StackController(object):
Gets detailed information for a stack
"""
stack_list = self.engine.show_stack(req.context,
identity)
stack_list = self.rpc_client.show_stack(req.context,
identity)
if not stack_list:
raise exc.HTTPInternalServerError()
@ -272,8 +272,8 @@ class StackController(object):
Get the template body for an existing stack
"""
templ = self.engine.get_template(req.context,
identity)
templ = self.rpc_client.get_template(req.context,
identity)
if templ is None:
raise exc.HTTPNotFound()
@ -288,12 +288,12 @@ class StackController(object):
"""
data = InstantiationData(body)
self.engine.update_stack(req.context,
identity,
data.template(),
data.environment(),
data.files(),
data.args())
self.rpc_client.update_stack(req.context,
identity,
data.template(),
data.environment(),
data.files(),
data.args())
raise exc.HTTPAccepted()
@ -303,9 +303,9 @@ class StackController(object):
Delete the specified stack
"""
res = self.engine.delete_stack(req.context,
identity,
cast=False)
res = self.rpc_client.delete_stack(req.context,
identity,
cast=False)
if res is not None:
raise exc.HTTPBadRequest(res['Error'])
@ -318,8 +318,8 @@ class StackController(object):
Abandons specified stack by deleting the stack and it's resources
from the database, but underlying resources will not be deleted.
"""
return self.engine.abandon_stack(req.context,
identity)
return self.rpc_client.abandon_stack(req.context,
identity)
@util.policy_enforce
def validate_template(self, req, body):
@ -330,8 +330,8 @@ class StackController(object):
data = InstantiationData(body)
result = self.engine.validate_template(req.context,
data.template())
result = self.rpc_client.validate_template(req.context,
data.template())
if 'Error' in result:
raise exc.HTTPBadRequest(result['Error'])
@ -346,21 +346,21 @@ class StackController(object):
support_status = req.params.get('support_status', None)
return {
'resource_types':
self.engine.list_resource_types(req.context, support_status)}
self.rpc_client.list_resource_types(req.context, support_status)}
@util.policy_enforce
def resource_schema(self, req, type_name):
"""
Returns the schema of the given resource type.
"""
return self.engine.resource_schema(req.context, type_name)
return self.rpc_client.resource_schema(req.context, type_name)
@util.policy_enforce
def generate_template(self, req, type_name):
"""
Generates a template based on the specified type.
"""
return self.engine.generate_template(req.context, type_name)
return self.rpc_client.generate_template(req.context, type_name)
class StackSerializer(wsgi.JSONResponseSerializer):

View File

@ -34,6 +34,7 @@ class AuthProtocol(object):
def __init__(self, app, conf):
self.conf = conf
self.app = app
self.rpc_client = rpc_client.EngineClient()
def __call__(self, env, start_response):
"""
@ -44,8 +45,7 @@ class AuthProtocol(object):
"""
LOG.debug(_('Authenticating user token'))
context = local.store.context
engine = rpc_client.EngineClient()
authenticated = engine.authenticated_to_backend(context)
authenticated = self.rpc_client.authenticated_to_backend(context)
if authenticated:
return self.app(env, start_response)
else:

View File

@ -438,7 +438,7 @@ class StackControllerTest(ControllerTest, HeatTestCase):
self._mock_enforce_setup(mock_enforce, 'index', True)
params = {'with_count': 'True'}
req = self._get('/stacks', params=params)
engine = self.controller.engine
engine = self.controller.rpc_client
engine.list_stacks = mock.Mock(return_value=[])
engine.count_stacks = mock.Mock(return_value=0)
@ -451,7 +451,7 @@ class StackControllerTest(ControllerTest, HeatTestCase):
self._mock_enforce_setup(mock_enforce, 'index', True)
params = {'with_count': ''}
req = self._get('/stacks', params=params)
engine = self.controller.engine
engine = self.controller.rpc_client
engine.list_stacks = mock.Mock(return_value=[])
engine.count_stacks = mock.Mock()
@ -466,7 +466,7 @@ class StackControllerTest(ControllerTest, HeatTestCase):
self._mock_enforce_setup(mock_enforce, 'index', True)
params = {'with_count': 'Truthy'}
req = self._get('/stacks', params=params)
engine = self.controller.engine
engine = self.controller.rpc_client
engine.list_stacks = mock.Mock(return_value=[])
mock_count_stacks.side_effect = AttributeError("Should not exist")
@ -3266,7 +3266,7 @@ class BuildInfoControllerTest(ControllerTest, HeatTestCase):
def test_theres_a_default_api_build_revision(self, mock_enforce):
self._mock_enforce_setup(mock_enforce, 'build_info', True)
req = self._get('/build_info')
self.controller.engine = mock.Mock()
self.controller.rpc_client = mock.Mock()
response = self.controller.build_info(req, tenant_id=self.tenant)
self.assertIn('api', response)
@ -3280,7 +3280,7 @@ class BuildInfoControllerTest(ControllerTest, HeatTestCase):
req = self._get('/build_info')
mock_engine = mock.Mock()
mock_engine.get_revision.return_value = 'engine_revision'
self.controller.engine = mock_engine
self.controller.rpc_client = mock_engine
mock_conf.revision = {'heat_revision': 'test'}
response = self.controller.build_info(req, tenant_id=self.tenant)
@ -3291,7 +3291,7 @@ class BuildInfoControllerTest(ControllerTest, HeatTestCase):
req = self._get('/build_info')
mock_engine = mock.Mock()
mock_engine.get_revision.return_value = 'engine_revision'
self.controller.engine = mock_engine
self.controller.rpc_client = mock_engine
response = self.controller.build_info(req, tenant_id=self.tenant)
self.assertIn('engine', response)
@ -3335,7 +3335,7 @@ class SoftwareConfigControllerTest(ControllerTest, HeatTestCase):
expected = {'software_config': return_value}
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'show_software_config',
return_value=return_value):
resp = self.controller.show(
@ -3359,7 +3359,7 @@ class SoftwareConfigControllerTest(ControllerTest, HeatTestCase):
expected = {'software_config': return_value}
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'create_software_config',
return_value=return_value):
resp = self.controller.create(
@ -3373,7 +3373,7 @@ class SoftwareConfigControllerTest(ControllerTest, HeatTestCase):
req = self._delete('/software_configs/%s' % config_id)
return_value = None
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'delete_software_config',
return_value=return_value):
self.assertRaises(
@ -3387,7 +3387,7 @@ class SoftwareConfigControllerTest(ControllerTest, HeatTestCase):
req = self._delete('/software_configs/%s' % config_id)
return_value = {'Error': 'something wrong'}
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'delete_software_config',
return_value=return_value):
self.assertRaises(
@ -3412,7 +3412,7 @@ class SoftwareDeploymentControllerTest(ControllerTest, HeatTestCase):
req = self._get('/software_deployments')
return_value = []
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'list_software_deployments',
return_value=return_value) as mock_call:
resp = self.controller.index(req, tenant_id=self.tenant)
@ -3423,7 +3423,7 @@ class SoftwareDeploymentControllerTest(ControllerTest, HeatTestCase):
server_id = 'fb322564-7927-473d-8aad-68ae7fbf2abf'
req = self._get('/software_deployments', {'server_id': server_id})
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'list_software_deployments',
return_value=return_value) as mock_call:
resp = self.controller.index(req, tenant_id=self.tenant)
@ -3458,7 +3458,7 @@ class SoftwareDeploymentControllerTest(ControllerTest, HeatTestCase):
expected = {'software_deployment': return_value}
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'show_software_deployment',
return_value=return_value):
resp = self.controller.show(
@ -3485,7 +3485,7 @@ class SoftwareDeploymentControllerTest(ControllerTest, HeatTestCase):
expected = {'software_deployment': return_value}
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'create_software_deployment',
return_value=return_value):
resp = self.controller.create(
@ -3511,7 +3511,7 @@ class SoftwareDeploymentControllerTest(ControllerTest, HeatTestCase):
return_value['server_id'] = server_id
expected = {'software_deployment': return_value}
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'update_software_deployment',
return_value=return_value):
resp = self.controller.update(
@ -3526,7 +3526,7 @@ class SoftwareDeploymentControllerTest(ControllerTest, HeatTestCase):
req = self._delete('/software_deployments/%s' % deployment_id)
return_value = None
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'delete_software_deployment',
return_value=return_value):
self.assertRaises(
@ -3540,7 +3540,7 @@ class SoftwareDeploymentControllerTest(ControllerTest, HeatTestCase):
req = self._delete('/software_deployments/%s' % deployment_id)
return_value = {'Error': 'something wrong'}
with mock.patch.object(
self.controller.engine,
self.controller.rpc_client,
'delete_software_deployment',
return_value=return_value):
self.assertRaises(