<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
import tuned.consts as consts

class Instance(object):
	"""
	"""

	def __init__(self, plugin, name, devices_expression, devices_udev_regex, script_pre, script_post, options):
		self._plugin = plugin
		self._name = name
		self._devices_expression = devices_expression
		self._devices_udev_regex = devices_udev_regex
		self._script_pre = script_pre
		self._script_post = script_post
		self._options = options

		self._active = True
		self._has_static_tuning = False
		self._has_dynamic_tuning = False
		self._assigned_devices = set()
		self._processed_devices = set()

	# properties

	@property
	def plugin(self):
		return self._plugin

	@property
	def name(self):
		return self._name

	@property
	def active(self):
		"""The instance performs some tuning (otherwise it is suspended)."""
		return self._active

	@active.setter
	def active(self, value):
		self._active = value

	@property
	def devices_expression(self):
		return self._devices_expression

	@property
	def assigned_devices(self):
		return self._assigned_devices

	@property
	def processed_devices(self):
		return self._processed_devices

	@property
	def devices_udev_regex(self):
		return self._devices_udev_regex

	@property
	def script_pre(self):
		return self._script_pre

	@property
	def script_post(self):
		return self._script_post

	@property
	def options(self):
		return self._options

	@property
	def has_static_tuning(self):
		return self._has_static_tuning

	@property
	def has_dynamic_tuning(self):
		return self._has_dynamic_tuning

	# methods

	def apply_tuning(self):
		self._plugin.instance_apply_tuning(self)

	def verify_tuning(self, ignore_missing):
		return self._plugin.instance_verify_tuning(self, ignore_missing)

	def update_tuning(self):
		self._plugin.instance_update_tuning(self)

	def unapply_tuning(self, rollback = consts.ROLLBACK_SOFT):
		self._plugin.instance_unapply_tuning(self, rollback)

	def destroy(self):
		self.unapply_tuning()
		self._plugin.destroy_instance(self)
