The congress.policy_engines.agnostic Module¶
-
class
congress.policy_engines.agnostic.DseRuntime(name)¶ Bases:
congress.policy_engines.agnostic.Runtime,congress.dse2.data_service.DataService-
create_default_policies()¶
-
execute_action(service_name, action, action_args)¶ Event handler for action execution.
Parameters: service_name – openstack service to perform the action on, e.g. ‘nova’, ‘neutron’ :param action: action to perform on service, e.g. an API call :param action_args: positional-args and named-args in format:
{‘positional’: [‘p_arg1’, ‘p_arg2’], ‘named’: {‘name1’: ‘n_arg1’, ‘name2’: ‘n_arg2’}}.
-
extend_schema(service_name, schema)¶
-
get_snapshot(table_name)¶
-
initialize_table_subscriptions()¶ Initialize table subscription.
Once policies have all been loaded, this function subscribes to all the necessary tables. See UPDATE_TABLE_SUBSCRIPTIONS as well.
-
on_first_subs(tables)¶ handler for policy table subscription
when a previously non-subscribed table gains a subscriber, register a trigger for the tables and publish table results when there is updates.
-
on_no_subs(tables)¶ Remove triggers when tables have no subscribers.
-
prepush_processor(data, dataindex, type=None)¶ Called before push.
Takes as input the DATA that the receiver needs and returns the payload for the message. If this is a regular publication message, make the payload just the delta; otherwise, make the payload the entire table.
-
process_policy_update(events, persistent=False)¶
-
pub_policy_result(table, olddata, newdata)¶ Callback for policy table triggers.
-
receive_data(publisher, table, data, is_snapshot=False)¶ Event handler for when a dataservice publishes data.
That data can either be the full table (as a list of tuples) or a delta (a list of Events).
-
receive_data_full(publisher, table, data)¶ Handler for when dataservice publishes full table.
-
receive_data_update(publisher, table, data)¶ Handler for when dataservice publishes a delta.
-
receive_policy_update(msg)¶
-
service_exists(service_name)¶
-
set_schema(name, schema, complete=False)¶
-
set_synchronizer()¶
-
start()¶
-
stop()¶
-
update_table_subscriptions(oldtables, newtables)¶ Update table subscription.
Change the subscriptions from OLDTABLES to NEWTABLES, ensuring to load all the appropriate services.
-
-
class
congress.policy_engines.agnostic.DseRuntimeEndpoints(dse)¶ Bases:
objectRPC endpoints exposed by DseRuntime.
-
delete_policy(context, name, disallow_dangling_refs=False)¶
-
execute_action(context, service_name, action, action_args)¶
-
get_row_data(context, table_id, source_id, trace=False)¶
-
get_status(context, source_id, params)¶
-
get_tablename(context, source_id, table_id)¶
-
get_tablenames(context, source_id)¶
-
initialize_datasource(context, name, schema)¶
-
persistent_create_policy(context, name=None, id_=None, abbr=None, kind=None, desc=None)¶
-
persistent_delete_policy(context, name_or_id)¶
-
persistent_delete_rule(context, id_, policy_name_or_id)¶
-
persistent_get_policies(context)¶
-
persistent_get_policy(context, id_)¶
-
persistent_get_rule(context, id_, policy_name)¶
-
persistent_get_rules(context, policy_name)¶
-
persistent_insert_rule(context, policy_name, str_rule, rule_name, comment)¶
-
persistent_load_policies(context)¶
-
simulate(context, query, theory, sequence, action_theory, delta=False, trace=False, as_list=False)¶
-
sync_one_policy(context, policy_name)¶
-
synchronize_policies(context)¶
-
-
class
congress.policy_engines.agnostic.ExecutionLogger¶ Bases:
object-
content()¶
-
critical(msg, *args)¶
-
debug(msg, *args)¶
-
empty()¶
-
error(msg, *args)¶
-
info(msg, *args)¶
-
warn(msg, *args)¶
-
-
class
congress.policy_engines.agnostic.ExperimentalRuntime¶ Bases:
congress.policy_engines.agnostic.Runtime-
access_control(action, support='')¶ Event handler for making access_control request.
ACTION is an atom describing a proposed action instance. SUPPORT is any data that should be assumed true when posing the query. Returns True iff access is granted.
-
execute(action_sequence)¶ Event handler for execute:
Execute a sequence of ground actions in the real world.
-
execute_obj(actions)¶ Executes the list of ACTION instances one at a time.
For now, our execution is just logging.
-
execute_string(actions_string)¶
-
explain(query, tablenames=None, find_all=False, target=None)¶ Event handler for explanations.
Given a ground query and a collection of tablenames that we want the explanation in terms of, return proof(s) that the query is true. If FIND_ALL is True, returns list; otherwise, returns single proof.
-
explain_obj(query, tablenames, find_all, theory)¶
-
explain_string(query_string, tablenames, find_all, theory)¶
-
explain_tuple(tuple, tablenames, find_all, theory)¶
-
remediate(formula)¶ Event handler for remediation.
-
remediate_obj(formula)¶ Find a collection of action invocations
That if executed result in FORMULA becoming false.
-
remediate_string(policy_string)¶
-
remediate_tuple(tuple, theory)¶
-
-
class
congress.policy_engines.agnostic.Runtime¶ Bases:
objectRuntime for the Congress policy language.
Only have one instantiation in practice, but using a class is natural and useful for testing.
-
ACTION_THEORY= 'action'¶
-
DEFAULT_THEORY= 'classification'¶
-
add_policy_obj_to_runtime(policy_obj)¶ Add policy obj to runtime
-
arity(table, theory, modal=None)¶ Return number of columns for TABLE in THEORY.
TABLE can include the policy name. <policy>:<table> THEORY is the name of the theory we are asking. MODAL is the value of the modal, if any.
-
assert_policy_exists(policy_name)¶ Checks if policy exists or not.
Parameters: policy_name – policy name Returns: True, if policy exists Raises: PolicyRuntimeException, if policy doesn’t exist.
-
construct_policy_obj(name, abbr=None, kind=None, id_=None, desc=None, owner=None)¶ Construct policy obj
-
content(target=None)¶ Event handler for querying content().
-
create_policy(name, abbr=None, kind=None, id_=None, desc=None, owner=None)¶ Create a new policy and add it to the runtime.
ABBR is a shortened version of NAME that appears in traces. KIND is the name of the datastructure used to represent a policy.
-
debug_mode()¶
-
delete(formula, target=None)¶ Event handler for arbitrary deletion (rules and facts).
-
delete_policy(name_or_id, disallow_dangling_refs=False)¶ Deletes policy with name NAME or throws KeyError or DanglingRefs.
-
find_subpolicy(required_tables, prohibited_tables, output_tables, target=None)¶ Return a subset of rules in @theory.
@required_tables is the set of tablenames that a rule must depend on. @prohibited_tables is the set of tablenames that a rule must NOT depend on. @output_tables is the set of tablenames that all rules must support.
-
get_action_names(target)¶ Return a list of the names of action tables.
-
get_row_data(table_id, source_id, trace=False)¶
-
get_status(source_id, params)¶
-
get_tablename(source_id, table_id)¶
-
get_tablenames(source_id)¶
-
get_target(name)¶
-
get_target_name(name)¶ Resolve NAME to the name of a proper policy (even if it is None).
Raises PolicyException there is no such policy.
-
get_tracer()¶ Return (Runtime’s tracer, dict of tracers for each theory).
Useful so we can temporarily change tracing.
-
initialize_datasource(name, schema)¶ Initializes datasource by creating policy and setting schema.
-
initialize_tables(tablenames, facts, target=None)¶ Event handler for (re)initializing a collection of tables
@facts must be an iterable containing compile.Fact objects.
-
insert(formula, target=None)¶ Event handler for arbitrary insertion (rules and facts).
-
parse(string)¶
-
parse1(string)¶
-
persistent_create_policy(name, id_=None, abbr=None, kind=None, desc=None)¶
-
persistent_delete_policy(name_or_id)¶
-
persistent_delete_rule(id_, policy_name_or_id)¶
-
persistent_get_policies()¶
-
persistent_get_policy(id_)¶
-
persistent_get_rules(policy_name)¶ Return data for all rules in policy_name.
-
persistent_insert_rule(*args, **kwargs)¶ Insert and persists rule into policy_name.
-
persistent_load_policies()¶ Load policies from database.
-
persistent_load_rules()¶ Load all rules from the database.
-
policy(target=None)¶ Event handler for querying policy.
-
policy_names()¶ Returns list of policy names.
-
policy_object(name=None, id=None)¶ Return policy by given name. Raises KeyError if does not exist.
-
policy_type(name)¶ Return type of policy NAME. Throws KeyError if does not exist.
-
process_policy_update(events, persistent=False)¶
-
production_mode()¶
-
project(sequence, policy_theory, action_theory)¶ Apply the list of updates SEQUENCE.
Apply the list of updates SEQUENCE, where actions are described in ACTION_THEORY. Return an update sequence that will undo the projection.
SEQUENCE can include atom insert/deletes, rule insert/deletes, and action invocations. Projecting an action only simulates that action’s invocation using the action’s description; the results are therefore only an approximation of executing actions directly. Elements of SEQUENCE are just formulas applied to the given THEORY. They are NOT Event()s.
SEQUENCE is really a program in a mini-programming language–enabling results of one action to be passed to another. Hence, even ignoring actions, this functionality cannot be achieved by simply inserting/deleting.
-
project_updates(delta, theory)¶ Project atom/delta rule insertion/deletion.
Takes an atom/rule DELTA with update head table (i.e. ending in + or -) and inserts/deletes, respectively, that atom/rule into THEORY after stripping the +/-. Returns None if DELTA had no effect on the current state.
-
register_trigger(tablename, callback, policy=None, modal=None)¶ Register CALLBACK to run when table TABLENAME changes.
-
rename_policy(oldname, newname)¶ Renames policy OLDNAME to NEWNAME or raises KeyError.
-
reserved_tablename(name)¶
-
resolve_conflicts(atoms)¶ If p+(args) and p-(args) are present, removes the p-(args).
-
select(query, target=None, trace=False)¶ Event handler for arbitrary queries.
Returns the set of all instantiated QUERY that are true.
-
set_schema(name, schema, complete=False)¶ Set the schema for module NAME to be SCHEMA.
-
set_tracer(tracer)¶
-
simulate(query, theory, sequence, action_theory, delta=False, trace=False, as_list=False)¶ Event handler for simulation.
:param query is a string/object to query after :param theory is the policy to query :param sequence is a string/iter of updates to state/policy or actions :param action_theory is the policy that contains action descriptions :param delta indicates whether to return changes to query caused by
sequence- :param trace indicates whether to include a string description of the
- implementation. When True causes the return value to be the tuple (result, trace).
- :param as_list controls whether the result is forced to be a list of
- answers
Returns a list of instances of query. If query/sequence are strings the query instance list is a single string (unless as_list is True in which case the query instance list is a list of strings). If query/sequence are objects then the query instance list is a list of objects.
The computation of a query given an action sequence. That sequence can include updates to atoms, updates to rules, and action invocations. Returns a collection of Literals (as a string if the query and sequence are strings or as a Python collection otherwise). If delta is True, the return is a collection of Literals where each tablename ends with either + or - to indicate whether that fact was added or deleted. Example atom update: q+(1) or q-(1) Example rule update: p+(x) :- q(x) or p-(x) :- q(x) Example action invocation:
create_network(17), options:value(17, “name”, “net1”) :- true
-
table_contents_queries(tablename, policy, modal=None)¶ Return list of queries yielding contents of TABLENAME in POLICY.
-
table_log(table, msg, *args)¶
-
tablenames(body_only=False, include_builtin=False, theory_name=None, include_modal=True)¶ Return tablenames occurring in some theory.
-
unregister_trigger(trigger)¶ Unregister CALLBACK for table TABLENAME.
-
update(sequence, target=None, persistent=False)¶ Event handler for applying an arbitrary sequence of insert/deletes.
If TARGET is supplied, it overrides the targets in SEQUENCE.
-
-
class
congress.policy_engines.agnostic.Trigger(tablename, policy, callback, modal=None)¶ Bases:
objectA chunk of code that should be run when a table’s contents changes.
-
class
congress.policy_engines.agnostic.TriggerRegistry(dependency_graph)¶ Bases:
objectA collection of triggers and algorithms to analyze that collection.
-
register_table(tablename, policy, callback, modal=None)¶ Register CALLBACK to run when TABLENAME changes.
-
relevant_triggers(events)¶ Return the set of triggers that are relevant to the EVENTS.
Each EVENT may either be a compile.Event or a tablename.
-
classmethod
triggers_by_table(triggers)¶ Return dictionary from tables to triggers.
-
unregister(trigger)¶ Unregister trigger ID.
-
update_dependencies(dependency_graph_changes=None)¶ Inform registry of changes to the dependency graph.
Changes are accounted for in self.dependency_graph, but by giving the list of changes we can avoid recomputing all dependencies from scratch.
-
-
congress.policy_engines.agnostic.list_to_database(atoms)¶
-
congress.policy_engines.agnostic.string_to_database(string, theories=None)¶