hipcheck_sdk package

Subpackages

Submodules

hipcheck_sdk.cli module

hipcheck_sdk.cli.get_parser_for(plugin_name: str) ArgumentParser[source]

Get the default argument parser for a Hipcheck plugin

Returns:

An ArgumentParser configured to capture Hipcheck plugin CLI arguments

hipcheck_sdk.cli.run_server_for(plugin: Plugin)[source]

Parse CLI arguments and start the server for the plugin. Does not return until the gRPC connection closes.

Parameters:

plugin (Plugin) – An instance of a subclass of Plugin

hipcheck_sdk.engine module

class hipcheck_sdk.engine.PluginEngine(session_id: int = 0, tx: Queue | None = None, rx: Queue | None = None, drop_tx: Queue | None = None, mock_responses: List[Tuple[Tuple[str, object], object]] | None = None)[source]

Bases: object

Manages a particular query session.

An instance of this class invokes a query endpoint, passing a handle to itself. This allows the query endpoint to request information from other Hipcheck plugins as part of its logic.

batch(target: str) QueryBuilder[source]

Create a QueryBuilder instance to dynamically aggregate keys for a batch query against target as opposed to using PluginEngine.batch_query() which requires having all keys available immediately

Parameters:

target (str) – A string of the form <PUBLISHER>/<PLUGIN>/<ENDPOINT>, where /<ENDPOINT> may be omitted if targeting a default endpoint. Indicates the remote plugin endpoint to query.

Returns:

An instance of QueryBuilder

async batch_query(target: str, keys: List[object]) List[object][source]

Query another Hipcheck plugin endpoint target with a list of keys

Parameters:
  • target (str) – Indicates the remote plugin endpoint to query. Has the same format requirements as query()

  • keys (list) – The list of keys to send as a single batch query to Hipcheck core.

Returns:

A list of output values corresponding to each element of key being applied to the target endpoint.

Raises:

SdkError

mock()[source]

For unit testing purposes, construct a PluginEngine with a set of mock responses

Parameters:

mock_responses (tuple) – A list of key, value pairs that maps queries to mock responses. Does not use a dict since many relevant types are not hashable and thus cannot be used as keys. The query is a tuple of a target string and a key object, the response is the output object for that query.

Returns:

An instance of PluginEngine

async query(target: str, key: object) object[source]

Query another Hipcheck plugin endpoint target with key input

Parameters:
  • target (str) – A string of the form <PUBLISHER>/<PLUGIN>/<ENDPOINT>, where /<ENDPOINT> may be omitted if targeting a default endpoint. Indicates the remote plugin endpoint to query.

  • key (object) – The key for the query

Returns:

The deserialized result

Raises:

SdkError

async query_inner(target: str, keys: List[object]) List[object][source]
Raises:

SdkError

record_concern(concern: str)[source]

Records a concern that will be emitted in the final Hipcheck report. Intended for use within a @query-decorated endpoint function.

Parameters:

concern (str) – The concern to be recorded

class hipcheck_sdk.engine.QueryBuilder(engine, target: str)[source]

Bases: object

An alternative to calling PluginEngine.batch_query(), an instance of this class is returned by PluginQuery.batch(), and allows plugin authors to build up a list of keys for a batch query over time, then call QueryBuilder.send() to send them in a single message to Hipcheck.

query(key: object) int[source]

Adds a key to the batch query being built by this object

Parameters:

key (object) – The key to add to the query batch.

Returns:

The index of the list at which the key was added. Can be used to index the output of send() to get the corresponding output for that key.

async send() List[object][source]

Sends all keys aggregated with query() in a single batch query to Hipcheck core.

Returns:

The list of output objects for the keys aggregated in this object

Raises:

SdkError

hipcheck_sdk.error module

exception hipcheck_sdk.error.ConfigError[source]

Bases: Exception

Parent class for all errors defined and caught during Plugin.set_config()

exception hipcheck_sdk.error.FailedToSendQueryFromSessionToServer[source]

Bases: SdkError

An error occurred while sending a query message to Hipcheck core

exception hipcheck_sdk.error.InvalidConfigValue(field_name: str, value: str, reason: str)[source]

Bases: ConfigError

The value value of config field field_name was invalid because of reason

field_name: str
reason: str
value: str
exception hipcheck_sdk.error.InvalidJsonInQueryKey[source]

Bases: SdkError

One of the key fields in the query object contained invalid JSON

exception hipcheck_sdk.error.InvalidJsonInQueryOutput[source]

Bases: SdkError

One of the output fields in the query object contained invalid JSON

exception hipcheck_sdk.error.InvalidQueryTargetFormat[source]

Bases: SdkError

The target string for a query was incorrectly formatted

exception hipcheck_sdk.error.MissingRequiredConfig(field_name: str, field_type: str, possible_values: list[str])[source]

Bases: ConfigError

The config field field_name of type field_type was missing. Possible values include possible_values.

field_name: str
field_type: str
possible_values: list[str]
exception hipcheck_sdk.error.MoreAfterQueryComplete(id: int)[source]

Bases: SdkError

The session with the given id received more messages after a complete query was parsed

id: int
exception hipcheck_sdk.error.ReceivedReplyWhenExpectingSubmitChunk[source]

Bases: SdkError

Received a Reply-type query message when a Submit-type was expected

exception hipcheck_sdk.error.ReceivedSubmitWhenExpectingReplyChunk[source]

Bases: SdkError

Received a Submit-type query message when a Reply-type was expected

exception hipcheck_sdk.error.SdkError[source]

Bases: Exception

Parent class for all errors defined and caught by the SDK

exception hipcheck_sdk.error.UnexpectedReplyInProgress[source]

Bases: SdkError

Received a query with the unexpected state ReplyInProgress

exception hipcheck_sdk.error.UnexpectedRequestInProgress[source]

Bases: SdkError

Received a query with the unexpected state RequestInProgress

exception hipcheck_sdk.error.UnknownPluginQuery[source]

Bases: SdkError

The target for a query was unrecognized

exception hipcheck_sdk.error.UnrecognizedConfig(field_name: str, field_value: str, possible_confusables: list[str])[source]

Bases: ConfigError

The config field field_name with value field_value was unrecognized. Intended field name may have possibly been one of possible_confusables.

field_name: str
field_value: str
possible_confusables: list[str]
exception hipcheck_sdk.error.UnspecifiedConfigError(message: str)[source]

Bases: ConfigError

An unspecified error occurred during configuration

message: str
exception hipcheck_sdk.error.UnspecifiedQueryState[source]

Bases: SdkError

Catchall error used when other SdkError variants don’t apply

hipcheck_sdk.options module

class hipcheck_sdk.options.SdkOptions(rfd9_compat: bool = True)[source]

Bases: object

Options that can be set before starting a server.PluginServer to control behavior. Designed to offer roughly similar behavior to the feature flags available in the Rust Hipcheck SDK.

rfd9_compat: bool = True
hipcheck_sdk.options.enabled(option_name: str) bool[source]
Parameters:

option_name (str) – The option name to check

Returns:

True if the option is enabled, else False

hipcheck_sdk.options.get_options() SdkOptions[source]
Returns:

A copy of the global SdkOptions instance. Note that this is a deep copy so changes to the returned value will not affect the global state.

hipcheck_sdk.options.set_option(option_name: str, val: bool)[source]

Turn an option on or off.

Parameters:
  • option_name (str) – The option name to set

  • val (bool) – The value to which to set the option

hipcheck_sdk.options.set_options(options: SdkOptions)[source]

Set the entire global SdkOptions instance at once instead of toggling individual options.

Parameters:

options (SdkOptions) – The options instance to override the current global value with

hipcheck_sdk.query module

hipcheck_sdk.query.query(f_py=None, default: bool = False, key_schema: dict | None = None, output_schema=None)[source]

Decorator function for query endpoints. Endpoint functions must have the following signature:

async fn <QUERY_NAME>(engine: hipcheck_sdk.engine.PluginEngine, key: <TYPE>) -> <TYPE>
Parameters:
  • default (bool) – Whether this endpoint is the default for the plugin

  • key_schema (dict) – A jsonable dict representing the schema for the key to this enpdpoint. If None, derive from type hint on key parameter of function. If a schema is supplied explicitly instead of having the SDK use the type hint, the object passed to the query func will not be automatically converted to a class instance.

  • output_schema (dict) – A jsonable dict representing the schema for the return value of this endpoint. If None, derive from type hint on return value of function.

Raises:

TypeError – The function lacked type hints or a JSON schema could not be derived from them

hipcheck_sdk.server module

class hipcheck_sdk.server.Plugin[source]

Bases: ABC

default_policy_expr() str | None[source]

Return the plugin’s default policy expression. This will only ever be called after Plugin.set_config(). This should only be overriden if the plugin defines a default query endpoint. For more information on policy expression syntax, see the Hipcheck website.

Returns:

The default policy expression

default_query() Endpoint | None[source]

Get the plugin’s default query, if it has one. The default query is a @query function with default=True in the decorator arguments.

Returns:

The endpoint instance marked default, if one exists else None

explain_default_query() str | None[source]

This should only be overriden if the plugin defines a default query endpoint.

Returns:

An unstructured description of what is returned by the plugin’s default query endpoint.

set_config(config: Dict[str, object])[source]

Configure the plugin according to the fields received from the policy file used for this analysis.

Parameters:

config (dict) – The configuration key-value map

Raises:

ConfigError – The config value was invalid

class hipcheck_sdk.server.PluginServer(plugin: Plugin)[source]

Bases: PluginServiceServicer

The server object which runs a plugin class implementation

init_logger(log_level_str=<class 'str'>)[source]

Setup plugin logger in JSON at appropriate level.

Parameters:

log_level_str (str) – maximum produced log level for plugin

listen(port: int, host='127.0.0.1')[source]

Start the plugin listening for an incoming gRPC connection from Hipcheck core

Parameters:
  • port (int) – The port on which to listen

  • host (str) – The host IP on which to listen. Defaults to loopback, for plugins that will be run in a docker container you will need to change it to listen on all network interfaces, e.g. ‘0.0.0.0’.

register(log_level='error', init_logger=True)[source]

Set the server to use plugin as its implementation

Parameters:
  • plugin (Plugin) – The plugin instance with which to run

  • log_level (str) – A string indicating the minimum logging level to emit

  • init_logger (bool) – If True, init the standard plugin logger that emits a custom JSON format over stderr to Hipcheck core.

Module contents