Reference

Module contents

A reusable Django app to manage analyses and pipelines.

Submodules

django_analyses.admin module

Registers various admin models to generate the app’s admin site interface.

References

class django_analyses.admin.AnalysisAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

fields = ('title', 'description', 'category', 'created', 'modified')
inlines = [<class 'django_analyses.admin.AnalysisVersionInline'>]
list_display = ('title', 'description', 'run_count')
media
readonly_fields = ('run_count', 'created', 'modified')
run_count(instance: django_analyses.models.analysis.Analysis) → int
class django_analyses.admin.AnalysisVersionAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

fieldsets = ((None, {'fields': ('analysis', 'title', 'description', 'input_specification_link', 'output_specification_link')}), ('Advanced Options', {'fields': ('max_parallel', 'run_method_key', 'nested_results_attribute', 'fixed_run_method_kwargs')}))
inlines = (<class 'django_analyses.admin.NodeInline'>,)
list_display = ('id_link', 'analysis_link', 'title', 'description', 'input_specification_link', 'output_specification_link', 'run_count', 'created', 'modified')
media
name(instance) → str
readonly_fields = ('analysis', 'id_link', 'input_specification_link', 'output_specification_link', 'run_count')
run_count(instance: django_analyses.models.analysis_version.AnalysisVersion) → int
class django_analyses.admin.AnalysisVersionInline(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
can_delete = False
extra = 0
fields = ('id_link', 'title', 'description', 'input_specification_link', 'output_specification_link', 'run_count')
has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

media
model

alias of django_analyses.models.analysis_version.AnalysisVersion

readonly_fields = ('id_link', 'title', 'description', 'input_specification_link', 'output_specification_link', 'run_count')
run_count(instance: django_analyses.models.analysis_version.AnalysisVersion) → int
class django_analyses.admin.AnalysisVersionInputSpecInline(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
can_delete = False
extra = 0
fields = ('version_link', 'description', 'output_specification_link')
has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

media
model

alias of django_analyses.models.analysis_version.AnalysisVersion

readonly_fields = ('version_link', 'description', 'output_specification_link')
class django_analyses.admin.AnalysisVersionOutputSpecInline(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
can_delete = False
extra = 0
fields = ('version_link', 'description', 'input_specification_link')
has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

media
model

alias of django_analyses.models.analysis_version.AnalysisVersion

readonly_fields = ('version_link', 'description', 'input_specification_link')
class django_analyses.admin.InputAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

class Media

Bases: object

js = ('//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js',)
analysis_version(instance) → str
change_view(*args, **kwargs)
check_fileness(instance: django_analyses.models.input.input.Input) → bool
fields = ('analysis_version_link', 'definition_link', 'run_link', 'input_type', '_value')
get_queryset(request)

Return a QuerySet of all model instances that can be edited by the admin site. This is used by changelist_view.

input_type(instance: django_analyses.models.input.input.Input) → str
list_display = ('analysis_version_link', 'run_link', 'definition_link', 'input_type', 'value')
list_filter = ('run__analysis_version',)
media
readonly_fields = ('analysis_version_link', 'definition_link', 'run_link', 'input_type', '_value')
search_fields = ('run__id',)
class django_analyses.admin.InputDefinitionAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
choices(instance) → list
fieldsets = ((None, {'fields': ['key', 'description', 'required', 'default', 'min_value', 'max_value', 'choices']}), ('Advanced Integration', {'classes': ('collapse',), 'fields': ['is_configuration', 'run_method_input', 'db_value_preprocessing', 'value_attribute']}))
get_queryset(request)

Return a QuerySet of all model instances that can be edited by the admin site. This is used by changelist_view.

list_display = ('key', 'description', 'min_value', 'max_value', 'default', 'choices', 'required', 'is_configuration')
list_filter = ('specification_set__analysis__title', 'specification_set__id')
max_value(instance)
media
min_value(instance)
readonly_fields = ('default', 'choices', 'min_value', 'max_value')
class django_analyses.admin.InputDefinitionsInline(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

can_delete = False
default(instance: django_analyses.models.input.definitions.input_definition.InputDefinition) → str
description(instance: django_analyses.models.input.definitions.input_definition.InputDefinition) → str
extra = 0
fields = ('id_link', 'key', 'input_type', 'description', 'required', 'is_configuration', 'default')
has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

input_type(instance: django_analyses.models.input.definitions.input_definition.InputDefinition) → str
is_configuration(instance: django_analyses.models.input.definitions.input_definition.InputDefinition) → str
key(instance: django_analyses.models.input.definitions.input_definition.InputDefinition) → str
media
model

alias of django_analyses.models.input.input_specification.InputSpecification_base_input_definitions

readonly_fields = ('id_link', 'key', 'input_type', 'description', 'required', 'is_configuration', 'default')
required(instance: django_analyses.models.input.definitions.input_definition.InputDefinition) → bool
verbose_name_plural = 'Input Definitions'
class django_analyses.admin.InputInline(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

can_delete = False
extra = 0
get_queryset(request)

Return a QuerySet of all model instances that can be edited by the admin site. This is used by changelist_view.

has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

input_type(instance: django_analyses.models.input.input.Input) → str
media
model

alias of django_analyses.models.input.input.Input

readonly_fields = ('id_link', 'definition_link', 'input_type', 'value')
class django_analyses.admin.InputSpecificationAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
analysis_versions(instance: django_analyses.models.input.input_specification.InputSpecification) → str
fields = ('analysis',)
inlines = [<class 'django_analyses.admin.AnalysisVersionInputSpecInline'>, <class 'django_analyses.admin.InputDefinitionsInline'>]
input_definitions_count(instance: django_analyses.models.input.input_specification.InputSpecification) → int
list_display = ('id', 'analysis_link', 'analysis_versions', 'input_definitions_count')
list_filter = ('analysis',)
media
readonly_fields = ('analysis', 'analysis_link', 'analysis_versions', 'input_definitions_count')
class django_analyses.admin.NodeAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

fields = ('analysis_version_link', 'configuration')
formfield_overrides = {<class 'django.db.models.fields.json.JSONField'>: {'widget': <class 'django_analyses.admin.PrettyJSONWidget'>}}
list_display = ('id', 'analysis_version_link', 'configuration')
list_filter = ('analysis_version__analysis',)
media
readonly_fields = ('analysis_version_link',)
search_fields = ('id', 'analysis_version__analysis__title', 'analysis_version__title', 'configuration__has_key')
class django_analyses.admin.NodeInline(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
can_delete = False
extra = 0
fields = ('id_link', 'configuration')
has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

media
model

alias of django_analyses.models.pipeline.node.Node

readonly_fields = ('id_link', 'configuration')
class django_analyses.admin.OutputAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

class Media

Bases: object

js = ('//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js',)
analysis_version(instance: django_analyses.models.output.output.Output) → str
change_view(*args, **kwargs)
check_fileness(instance: django_analyses.models.output.output.Output) → bool
download(instance: django_analyses.models.output.output.Output) → str
fields = ('analysis_version_link', 'definition_link', 'run_link', 'output_type', '_value', 'download')
get_queryset(request)

Return a QuerySet of all model instances that can be edited by the admin site. This is used by changelist_view.

list_display = ('analysis_version_link', 'run_link', 'definition_link', 'output_type', 'value', 'download')
list_filter = ('run__analysis_version',)
media
output_type(instance: django_analyses.models.output.output.Output) → str
readonly_fields = ('analysis_version_link', 'definition_link', 'run_link', 'output_type', '_value', 'download')
search_fields = ('run__id',)
class django_analyses.admin.OutputDefinitionAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

analysis(instance)
list_display = ('key', 'description', 'analysis')
list_filter = ('specification_set__analysis__title', 'specification_set__id')
media
class django_analyses.admin.OutputDefinitionsInline(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

can_delete = False
description(instance: django_analyses.models.output.definitions.output_definition.OutputDefinition) → str
extra = 0
fields = ('id_link', 'key', 'output_type', 'description')
has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

key(instance: django_analyses.models.output.definitions.output_definition.OutputDefinition) → str
media
model

alias of django_analyses.models.output.output_specification.OutputSpecification_base_output_definitions

output_type(instance: django_analyses.models.output.definitions.output_definition.OutputDefinition) → str
readonly_fields = ('id_link', 'key', 'output_type', 'description')
verbose_name_plural = 'Output Definitions'
class django_analyses.admin.OutputInline(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

can_delete = False
download(instance: django_analyses.models.output.output.Output) → str
extra = 0
get_queryset(request)

Return a QuerySet of all model instances that can be edited by the admin site. This is used by changelist_view.

has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

media
model

alias of django_analyses.models.output.output.Output

output_type(instance: django_analyses.models.output.output.Output) → str
readonly_fields = ('id_link', 'definition_link', 'output_type', 'value', 'download')
class django_analyses.admin.OutputSpecificationAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
analysis_versions(instance: django_analyses.models.output.output_specification.OutputSpecification) → str
fields = ('analysis',)
inlines = [<class 'django_analyses.admin.AnalysisVersionOutputSpecInline'>, <class 'django_analyses.admin.OutputDefinitionsInline'>]
list_display = ('id', 'analysis_link', 'analysis_versions', 'output_definitions_count')
list_filter = ('analysis',)
media
output_definitions_count(instance: django_analyses.models.output.output_specification.OutputSpecification) → int
readonly_fields = ('analysis', 'analysis_link', 'analysis_versions', 'output_definitions_count')
class django_analyses.admin.PipeAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

destination_analysis_version(instance: django_analyses.models.pipeline.pipe.Pipe) → str
destination_configuration(instance: django_analyses.models.pipeline.pipe.Pipe) → str
destination_node(instance: django_analyses.models.pipeline.pipe.Pipe) → str
destination_port_key(instance: django_analyses.models.pipeline.pipe.Pipe) → str
fieldsets = ((None, {'fields': ['pipeline', 'source_analysis_version', 'source_port_key', 'source_node', 'source_configuration', 'destination_analysis_version', 'destination_port_key', 'destination_node', 'destination_configuration']}), ('Configuration', {'fields': ['index', 'source_run_index', 'destination_run_index']}))
formfield_overrides = {<class 'django.db.models.fields.json.JSONField'>: {'widget': <class 'django_analyses.admin.PrettyJSONWidget'>}}
list_display = ('id_link', 'pipeline_link', 'source_analysis_version', 'source_node', 'source_port_key', 'destination_analysis_version', 'destination_node', 'destination_port_key')
list_filter = ('pipeline', ('source__analysis_version__analysis', <class 'django_analyses.admin.custom_titled_filter.<locals>.Wrapper'>), ('destination__analysis_version__analysis', <class 'django_analyses.admin.custom_titled_filter.<locals>.Wrapper'>))
media
readonly_fields = ('id_link', 'pipeline_link', 'source_analysis_version', 'source_port_key', 'source_node', 'source_configuration', 'destination_analysis_version', 'destination_port_key', 'destination_node', 'destination_configuration')
search_fields = ('id', 'pipeline__title', 'source__analysis_version__analysis__title', 'source__analysis_version__title', 'destination__analysis_version__analysis__title', 'destination__analysis_version__title')
source_analysis_version(instance: django_analyses.models.pipeline.pipe.Pipe) → str
source_configuration(instance: django_analyses.models.pipeline.pipe.Pipe) → str
source_node(instance: django_analyses.models.pipeline.pipe.Pipe) → str
source_port_key(instance: django_analyses.models.pipeline.pipe.Pipe) → str
class django_analyses.admin.PipeInLine(parent_model, admin_site)

Bases: django.contrib.admin.options.TabularInline

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
can_delete = False
destination_analysis_version(instance: django_analyses.models.pipeline.pipe.Pipe) → str
destination_node(instance: django_analyses.models.pipeline.pipe.Pipe) → str
destination_port_key(instance: django_analyses.models.pipeline.pipe.Pipe) → str
extra = 0
fields = ('id_link', 'source_analysis_version', 'source_node', 'source_port_key', 'destination_analysis_version', 'destination_port_key', 'destination_node')
has_add_permission(request, obj)

Return True if the given request has permission to add an object. Can be overridden by the user in subclasses.

media
model

alias of django_analyses.models.pipeline.pipe.Pipe

readonly_fields = ('id_link', 'source_analysis_version', 'source_node', 'source_port_key', 'destination_analysis_version', 'destination_port_key', 'destination_node')
source_analysis_version(instance: django_analyses.models.pipeline.pipe.Pipe) → str
source_node(instance: django_analyses.models.pipeline.pipe.Pipe) → str
source_port_key(instance: django_analyses.models.pipeline.pipe.Pipe) → str
class django_analyses.admin.PipelineAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

fields = ('title', 'description', 'created', 'modified')
inlines = (<class 'django_analyses.admin.PipeInLine'>,)
list_display = ('id', 'title', 'description', 'node_count', 'pipe_count')
media
node_count(instance: django_analyses.models.pipeline.pipeline.Pipeline) → int
pipe_count(instance: django_analyses.models.pipeline.pipeline.Pipeline) → int
readonly_fields = ('created', 'modified', 'node_count', 'pipe_count')
search_fields = ('id', 'title', 'description')
class django_analyses.admin.PrettyJSONWidget(attrs=None)

Bases: django.forms.widgets.Textarea

format_value(value)

Return a value as it should appear when rendered in a template.

media
class django_analyses.admin.RunAdmin(model, admin_site)

Bases: django.contrib.admin.options.ModelAdmin

class Media

Bases: object

css = {'all': ('django_analyses/css/hide_admin_original.css',)}
download(instance: django_analyses.models.run.Run) → str
duration(instance: django_analyses.models.run.Run) → datetime.timedelta
fieldsets = ((None, {'fields': ('analysis_version_link', 'user')}), ('Execution', {'fields': ('start_time', 'end_time', ('status', 'duration'), 'traceback', 'path', 'download')}))
inlines = (<class 'django_analyses.admin.InputInline'>, <class 'django_analyses.admin.OutputInline'>)
list_display = ('id', 'analysis_version_link', 'user_link', 'start_time', 'end_time', 'duration', '_status', 'download')
list_filter = ('status', 'start_time', 'analysis_version__analysis', 'user')
media
readonly_fields = ('analysis_version', 'analysis_version_link', 'user_link', 'start_time', 'end_time', 'duration', 'status', 'path', 'download')
search_fields = ('id', 'analysis_version__title', 'analysis_version__analysis__title')
django_analyses.admin.custom_titled_filter(title: str)

Copied from SO: https://stackoverflow.com/a/21223908/4416932

django_analyses.apps module

Definition of the DjangoAnalysesConfig class.

References

class django_analyses.apps.DjangoAnalysesConfig(app_name, app_module)

Bases: django.apps.config.AppConfig

django_analyses app configuration.

References

name = 'django_analyses'

Full Python path to the application.

ready()

Loads the app’s signals.

References

django_analyses.pipeline_runner module

Definition of the PipelineRunner class.

class django_analyses.pipeline_runner.PipelineRunner(pipeline: django_analyses.models.pipeline.pipeline.Pipeline, quiet: bool = False)

Bases: object

Manages the execution of pipelines.

generate_user_inputs_string(user_inputs: dict) → str

Formats the user provided input dictionary as a readable string.

Parameters:user_inputs (dict) – Standardized user provided inputs
Returns:Formatted user provided input dictionary
Return type:str
get_destination_kwarg(pipe: django_analyses.models.pipeline.pipe.Pipe) → dict

Composes a keyword argument to include in a destination node’s configuration.

Parameters:pipe (Pipe) – A pipe with an existing run matching its source node
Returns:Destination node keyword argument
Return type:dict
get_incoming_pipes(node: django_analyses.models.pipeline.node.Node, run_index: int) → django.db.models.query.QuerySet

Returns all pipes in the pipeline that declare the given node instance as their destination.

Parameters:
  • node (Node) – Destination node
  • run_index (int) – The desired run index of the specified node
Returns:

Pipes with the provided node as destination

Return type:

QuerySet

get_node_inputs(node: django_analyses.models.pipeline.node.Node, user_inputs: Dict[django_analyses.models.pipeline.node.Node, List[Dict[str, Any]]], run_index: int) → dict

Returns the node’s input configuration, including inputs specified by the user and preceding nodes’ outputs.

Parameters:
  • node (Node) – Node for which to compose an input configuration
  • user_inputs (Dict[Node, List[Dict[str, Any]]]) – User provided input configurations
Returns:

Input configuration

Return type:

dict

get_node_user_inputs(user_inputs: Dict[django_analyses.models.pipeline.node.Node, List[Dict[str, Any]]], node: django_analyses.models.pipeline.node.Node, run_index: int) → Dict[str, Any]

Returns the input configuration dictionary provided by the user for the specified node’s execution.

Parameters:
  • user_inputs (Dict[Node, List[Dict[str, Any]]]) – User provided input configurations
  • node (Node) – The node to look for
  • run_index (int) – The index of the requested node’s execution
Returns:

User provided input configuration

Return type:

Dict[str, Any]

get_safe_results() → dict

Returns a JSON-serializable dictionary of the pipeline’s outputs.

Returns:Results dictionary with node IDs as keys a list of result dictionaries for each run of that node
Return type:dict
has_required_runs(node: django_analyses.models.pipeline.node.Node, run_index: int) → bool

Checks whether the provided node is ready to be run by evaluating the execution state of the nodes it requires (nodes that generate output meant to be piped to it).

Parameters:
  • node (Node) – Node to evaluate
  • run_index (int) – Filter by the index of the node’s run
Returns:

Whether all required nodes have been executed or not

Return type:

bool

pending_nodes

Nodes that were not yet executed.

Returns:Pending nodes
Return type:list
report_node_execution_end(run) → None

Reports the end of a node’s execution.

Parameters:run (Run) – The created run instance
report_node_execution_failure(node: django_analyses.models.pipeline.node.Node, user_inputs: dict, node_inputs: dict, exception: str) → None

Reports a failure in a node’s execution.

Parameters:
  • node (Node) – The executed node
  • user_inputs (dict) – Standardized user provided inputs
  • node_inputs (dict) – The complete input configuration for this node’s execution
  • exception (str) – The raised exception
Raises:

RuntimeError – [description]

report_node_execution_start(node: django_analyses.models.pipeline.node.Node, run_index: int, inputs: dict, first: bool = False) → None

Reports the start of a node’s execution.

Parameters:
  • node (Node) – The executed node
  • run_index (int) – The index of the node’s run in this pipeline
  • inputs (dict) – The node’s input configuration dictionary
  • first (bool, optional) – Whether this is the first execution of this pipeline, by default False
reset_runs_dict() → None

Resets the runs dictionary before a new execution.

run(inputs: dict) → dict

Runs pipeline with the provided inputs.

Parameters:inputs (dict) – Input configurations to be passed to the nodes, this may either be provided as a dictionary with nodes as keys and configurations as values or simply an input configuration if there’s only one entry node
Returns:Resulting run instances
Return type:dict
run_entry_nodes(user_inputs: Dict[django_analyses.models.pipeline.node.Node, List[Dict[str, Any]]]) → None

Runs the “entry” nodes of the pipeline, i.e. nodes that are not the destination of any other node.

Parameters:user_inputs (Dict[Node, List[Dict[str, Any]]]) – User provided input configurations
run_node(node: django_analyses.models.pipeline.node.Node, user_inputs: Dict[django_analyses.models.pipeline.node.Node, List[Dict[str, Any]]]) → None

Runs the provided node and stores the created Run instances in the class’s runs attribute.

Parameters:
  • node (Node) – Node to be executed
  • user_inputs (Dict[Node, List[Dict[str, Any]]]) – User provided input configurations
standardize_user_input(user_input: Union[List[Dict[str, Any]], Dict[Union[str, django_analyses.models.pipeline.node.Node], Any]]) → Dict[django_analyses.models.pipeline.node.Node, List[Dict[str, Any]]]

Standardizes user input to conform with the desired format (a dictionary with nodes as keys and list of input dictionaries as values).

Parameters:user_input (Union[List[Dict[str, Any]], Dict[Union[str, Node], Any]]) – User input as either a dictionary of nodes and their input dictionaries, or an input dictionary (or list of input dictionaries) specified for a singular entry node
Returns:Standardized user input
Return type:Dict[Node, List[Dict[str, Any]]]
validate_user_input_keys(user_input: Dict[Union[str, django_analyses.models.pipeline.node.Node], Any]) → bool

Validates all keys of a user input dictionary are either nodes or strings. Return True if all are nodes, False if all are strings, and raises a ValueError in any other case.

Parameters:user_input (Dict[Union[str, Node], Any]) – User input dictionary
Returns:True of all keys are nodes, False if all keys are strings
Return type:bool

django_analyses.urls module

django_analyses.urls.path(route, view, kwargs=None, name=None, *, Pattern=<class 'django.urls.resolvers.RoutePattern'>)