shuup.xtheme package¶
Subpackages¶
- shuup.xtheme.admin_module package
- shuup.xtheme.layout package
- shuup.xtheme.plugins package
- Submodules
- shuup.xtheme.plugins.category_links module
- shuup.xtheme.plugins.consts module
- shuup.xtheme.plugins.forms module
- shuup.xtheme.plugins.image module
- shuup.xtheme.plugins.products module
- shuup.xtheme.plugins.products_async module
- shuup.xtheme.plugins.snippets module
- shuup.xtheme.plugins.social_media_links module
- shuup.xtheme.plugins.text module
- shuup.xtheme.plugins.widgets module
- Module contents
- shuup.xtheme.templatetags package
- shuup.xtheme.views package
Submodules¶
shuup.xtheme.editing module¶
-
shuup.xtheme.editing.
could_edit
(request)[source]¶ Return true if the context of the given request would allow Xtheme editing.
Parameters: request (django.http.HttpRequest) – HTTP request Returns: Would allow editing? Return type: bool
-
shuup.xtheme.editing.
is_edit_mode
(request)[source]¶ Return true if the given request has xtheme editing enabled.
Parameters: request (django.http.HttpRequest) – HTTP request Returns: In edit mode? Return type: bool
-
shuup.xtheme.editing.
set_edit_mode
(request, flag)[source]¶ Enable or disable edit mode for the request.
Parameters: - request (django.http.HttpRequest) – HTTP request
- flag (bool) – Enable flag
-
shuup.xtheme.editing.
may_inject
(context)[source]¶ Figure out if we may inject Xtheme editing into this view.
The requirements are that there is a CBV
view
object in the context, and thatview
object does not explicitly opt-out of editing withxtheme_injection = False
Parameters: context (jinja2.runtime.Context) – Jinja rendering context Returns: Permission bool Return type: bool
shuup.xtheme.engine module¶
-
class
shuup.xtheme.engine.
XthemeTemplate
[source]¶ Bases:
jinja2.environment.Template
A subclass of Jinja templates with additional post-processing magic.
-
class
shuup.xtheme.engine.
XthemeEnvironment
(block_start_string='{%', block_end_string='%}', variable_start_string='{{', variable_end_string='}}', comment_start_string='{#', comment_end_string='#}', line_statement_prefix=None, line_comment_prefix=None, trim_blocks=False, lstrip_blocks=False, newline_sequence='n', keep_trailing_newline=False, extensions=(), optimized=True, undefined=<class 'jinja2.runtime.Undefined'>, finalize=None, autoescape=False, loader=None, cache_size=400, auto_reload=True, bytecode_cache=None)[source]¶ Bases:
jinja2.environment.Environment
Overrides the usual template class and allows dynamic switching of Xthemes.
Enable by adding
"environment": "shuup.xtheme.engine.XthemeEnvironment"
in yourTEMPLATES
settings.-
template_class
¶ alias of
XthemeTemplate
-
get_template
(name, parent=None, globals=None)[source]¶ Load a template from the loader. If a loader is configured this method asks the loader for the template and returns a
Template
.Parameters: - name (str) – Template name.
- parent (str|None) – If the
parent
parameter is notNone
,join_path
is called to get the real template name before loading. - globals (dict|None) – The
globals
parameter can be used to provide template wide globals. These variables are available in the context at render time.
Returns: Template object
Return type:
-
get_or_select_template
(template_name_or_list, parent=None, globals=None)[source]¶ Does a typecheck and dispatches to
select_template
orget_template
.Parameters: - template_name_or_list (str|Iterable[str]) – Template name or list
- parent (str|None) – If the
parent
parameter is notNone
,join_path
is called to get the real template name before loading. - globals – The
globals
parameter can be used to provide template wide globals. These variables are available in the context at render time.
Returns: Template object
Return type:
-
-
shuup.xtheme.engine.
concat
()¶ S.join(iterable) -> str
Return a string which is the concatenation of the strings in the iterable. The separator between elements is S.
shuup.xtheme.extenders module¶
shuup.xtheme.forms module¶
-
class
shuup.xtheme.forms.
GenericThemeForm
(**kwargs)[source]¶ Bases:
django.forms.models.ModelForm
A generic form for Xthemes; populates itself based on
fields
in the theme class.-
base_fields
= OrderedDict()¶
-
declared_fields
= OrderedDict()¶
-
media
¶
-
save
(commit=True)[source]¶ Save theme settings into the ThemeSettings instance.
Parameters: commit (bool) – Commit flag. Default is True and will raise a ValueError if it is defined in any way. This field is here only to ensure the compatibility with the superclass. Returns: The now saved ThemeSettings
instanceReturn type: shuup.xtheme.models.ThemeSettings
-
shuup.xtheme.middleware module¶
shuup.xtheme.models module¶
-
class
shuup.xtheme.models.
SnippetType
[source]¶ Bases:
object
-
InlineJS
= 'inline_js'¶
-
InlineCSS
= 'inline_css'¶
-
InlineHTMLMarkup
= 'inline_html'¶
-
InlineJinjaHTMLMarkup
= 'inline_jinja_html'¶
-
-
class
shuup.xtheme.models.
SavedViewConfigQuerySet
(model=None, query=None, using=None, hints=None)[source]¶ Bases:
django.db.models.query.QuerySet
-
appropriate
(theme, shop, view_name, draft)[source]¶ Get an “appropriate”
SavedViewConfig
for the parameters given.When draft mode is off:
- A PUBLIC SavedViewConfig is returned, or a new one in CURRENT_DRAFT status.
When draft mode is on:
- A CURRENT_DRAFT SavedViewConfig is returned, if one exists.
- If a PUBLIC SavedViewConfig exists, its data is copied into a new, unsaved CURRENT_DRAFT SavedViewConfig.
Parameters: - theme (shuup.xtheme.Theme) – Theme instance.
- view_name (str) – View name string.
- draft (bool) – Draft mode flag.
Returns: SavedViewConfig (possibly not saved).
Return type:
-
-
class
shuup.xtheme.models.
SavedViewConfigStatus
[source]¶ Bases:
enumfields.enums.Enum
Stati for SavedViewConfigs.
The lifecycle for SavedViewConfigs (SVCs) for a given (theme, view) pair is as follows:
- Initially, there’s zero SVCs.
- When a placeholder layout is saved in edit mode, an SVC in the CURRENT_DRAFT status is saved.
- When an SVC in CURRENT_DRAFT status is published, all other SVCs for the theme/view pair are “demoted” to being OLD_VERSIONs and the CURRENT_DRAFT SVC is promoted to being the PUBLIC one (and there should always be zero or one PUBLIC SavedViewConfigs per (theme, view) pair).
- When an SVC in CURRENT_DRAFT status is reverted, it is simply deleted.
- When an SVC has been published and edit mode is entered again, the current PUBLIC SVC is copied into a new CURRENT_DRAFT version.
-
CURRENT_DRAFT
= 1¶
-
OLD_VERSION
= 2¶
-
PUBLIC
= 3¶
-
class
shuup.xtheme.models.
SavedViewConfig
(id, theme_identifier, shop, view_name, created_on, modified_on, status, _data)[source]¶ Bases:
django.db.models.base.Model
Parameters: - id (AutoField) – Id
- theme_identifier (CharField) – Theme identifier
- shop (ForeignKey to
shuup.core.models.Shop
) – Shop - view_name (CharField) – View name
- created_on (DateTimeField) – Created on
- modified_on (DateTimeField) – Modified on
- status (EnumIntegerField) – Status
- _data (TaggedJSONField) – Internal data
-
theme_identifier
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
shop
¶ Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.
In the example:
class Child(Model): parent = ForeignKey(Parent, related_name='children')
Child.parent
is aForwardManyToOneDescriptor
instance.
-
view_name
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
created_on
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
modified_on
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
status
¶ A property descriptor which ensures that
field.to_python()
is called on _every_ assignment to the field.This used to be provided by the
django.db.models.subclassing.Creator
class, which in turn was used by the deprecated-in-Django-1.10SubfieldBase
class, hence the reimplementation here.
-
objects
= <django.db.models.manager.ManagerFromSavedViewConfigQuerySet object>¶
-
draft
¶
-
exception
DoesNotExist
¶ Bases:
django.core.exceptions.ObjectDoesNotExist
-
exception
MultipleObjectsReturned
¶ Bases:
django.core.exceptions.MultipleObjectsReturned
-
get_next_by_created_on
(*, field=<django.db.models.fields.DateTimeField: created_on>, is_next=True, **kwargs)¶
-
get_next_by_modified_on
(*, field=<django.db.models.fields.DateTimeField: modified_on>, is_next=True, **kwargs)¶
-
get_previous_by_created_on
(*, field=<django.db.models.fields.DateTimeField: created_on>, is_next=False, **kwargs)¶
-
get_previous_by_modified_on
(*, field=<django.db.models.fields.DateTimeField: modified_on>, is_next=False, **kwargs)¶
-
get_status_display
(*, field=<enumfields.fields.EnumIntegerField: status>)¶
-
id
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
shop_id
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
class
shuup.xtheme.models.
ThemeSettings
(id, theme_identifier, shop, active, data)[source]¶ Bases:
django.db.models.base.Model
Parameters: - id (AutoField) – Id
- theme_identifier (CharField) – Theme identifier
- shop (ForeignKey to
shuup.core.models.Shop
) – Shop - active (BooleanField) – Active
- data (TaggedJSONField) – Data
-
theme_identifier
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
shop
¶ Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.
In the example:
class Child(Model): parent = ForeignKey(Parent, related_name='children')
Child.parent
is aForwardManyToOneDescriptor
instance.
-
active
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
data
¶ A placeholder class that provides a way to set the attribute on the model.
-
exception
DoesNotExist
¶ Bases:
django.core.exceptions.ObjectDoesNotExist
-
exception
MultipleObjectsReturned
¶ Bases:
django.core.exceptions.MultipleObjectsReturned
-
id
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
objects
= <django.db.models.manager.Manager object>¶
-
shop_id
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
class
shuup.xtheme.models.
Snippet
(*args, **kwargs)[source]¶ Bases:
django.db.models.base.Model
Inject snippet code globally filtering by themes if configured.
Parameters: - id (AutoField) – Id
- shop (ForeignKey to
shuup.core.models.Shop
) – Shop - location (CharField) – Location
- snippet_type (CharField) – Snippet type
- snippet (TextField) – Snippet
- themes (SeparatedValuesField) – Select the themes that will have this snippet injected. Leave the field blank to inject in all themes.
-
shop
¶ Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.
In the example:
class Child(Model): parent = ForeignKey(Parent, related_name='children')
Child.parent
is aForwardManyToOneDescriptor
instance.
-
location
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
snippet_type
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
snippet
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
themes
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
exception
DoesNotExist
¶ Bases:
django.core.exceptions.ObjectDoesNotExist
-
exception
MultipleObjectsReturned
¶ Bases:
django.core.exceptions.MultipleObjectsReturned
-
get_snippet_type_display
(*, field=<django.db.models.fields.CharField: snippet_type>)¶
-
id
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
-
objects
= <django.db.models.manager.Manager object>¶
-
shop_id
¶ A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.
shuup.xtheme.parsing module¶
-
exception
shuup.xtheme.parsing.
Unflattenable
[source]¶ Bases:
Exception
Exception raised when a node list can’t be flattened into a constant.
-
exception
shuup.xtheme.parsing.
NonConstant
[source]¶ Bases:
ValueError
Exception raised when something expected to be constant... is not.
-
exception
shuup.xtheme.parsing.
NestingError
[source]¶ Bases:
ValueError
Exception raised when a template’s placeholder/column/row/plugin hierarchy is out of whack.
-
shuup.xtheme.parsing.
flatten_const_node_list
(environment, node_list)[source]¶ Try to flatten the given node list into a single string.
Parameters: - environment (jinja2.environment.Environment) – Jinja2 environment.
- node_list (list[jinja2.nodes.Node]) – List of nodes.
Returns: String of content.
Return type: Raises: Unflattenable – Raised when the node list can’t be flattened into a constant.
-
shuup.xtheme.parsing.
parse_constantlike
(environment, parser)[source]¶ Parse the next expression as a “constantlike” expression.
Expression trees that fold into constants are constantlike, as are bare variable names.
Parameters: - environment (jinja2.environment.Environment) – Jinja2 environment.
- parser (jinja2.parser.Parser) – Template parser.
Returns: Constant value of any type.
Return type:
-
shuup.xtheme.parsing.
noop_node
(lineno)[source]¶ Return a no-op node (compiled into a single
0
).Parameters: lineno (int) – Line number for the node. Returns: Node Return type: jinja2.nodes.ExprStmt
-
class
shuup.xtheme.parsing.
PlaceholderExtension
(environment)[source]¶ Bases:
shuup.xtheme.parsing._PlaceholderManagingExtension
PlaceholderExtension
manages{% placeholder <NAME> [global] %}
...{% endplaceholder %}
.
- The
name
can be any Jinja2 expression that can be folded into a constant, with the addition of bare variable names such asname
meaning the same as"name"
. This makes it slightly easier to write templates. - The body of this block is actually discarded; only the inner
column
,row
andplugin
directives have any meaning. (A parser-timeLayout
object is created and populated during parsing of this block.) - An optional
global
parameter can be used to specify that the configuration for this placeholder should be “global” across different views (although currently that only applies to placeholders within the same template, i.e, if you defined the same global placeholder in different templates they will not share configuration, but an included or base template that is rendered by different views will).
-
parse
(parser)[source]¶ Parse a placeholder!
Parameters: parser (jinja2.parser.Parser) – Template parser. Returns: Output node for rendering a placeholder. Return type: jinja2.nodes.Output
-
identifier
= 'shuup.xtheme.parsing.PlaceholderExtension'¶
-
class
shuup.xtheme.parsing.
LayoutPartExtension
(environment)[source]¶ Bases:
shuup.xtheme.parsing._PlaceholderManagingExtension
Parser for row and column tags.
Syntax for the row and column tags is:
{% row %} {% column [SIZES] %}...{% endcolumn %} {% endrow %}
- Rows map to
LayoutRow
objects and columns map toLayoutCell
. - For a single-cell layout, these are not necessary.
{% plugin %}
invocations without preceding{% row %}
/{% column %}
directives imply a single row and a single column.
-
parse
(parser)[source]¶ Parse a column or row.
Parameters: parser (jinja2.parser.Parser) – Template parser. Returns: A null output node. Return type: jinja2.nodes.Node
-
identifier
= 'shuup.xtheme.parsing.LayoutPartExtension'¶
- Rows map to
-
class
shuup.xtheme.parsing.
PluginExtension
(environment)[source]¶ Bases:
shuup.xtheme.parsing._PlaceholderManagingExtension
Parser for plugin tags.
Syntax for plugin tag is:
{% plugin <NAME> %}...{% endplugin %}
- The (optional) body of the plugin block is expected to be a Jinja2
AST that can be folded into a constant. Generally this means a
single block of text (
{% raw }
/{% endraw %}
is okay!). - The contents of the body, if set, must be valid TOML markup. The TOML is parsed during Jinja2 parse time into a dict, which in turn is folded into the layout description object. This means only the initial parsing of the template incurs whatever performance hit there is in parsing TOML; the Jinja2 bccache should take care of the rest.
-
parse
(parser)[source]¶ Parse a column or row.
Parameters: parser (jinja2.parser.Parser) – Template parser. Returns: A null output node. Return type: jinja2.nodes.Node
-
identifier
= 'shuup.xtheme.parsing.PluginExtension'¶
- The (optional) body of the plugin block is expected to be a Jinja2
AST that can be folded into a constant. Generally this means a
single block of text (
shuup.xtheme.rendering module¶
-
shuup.xtheme.rendering.
get_view_config
(context, global_type=False)[source]¶ Get a view configuration object for a Jinja2 rendering context.
Parameters: - context (jinja2.runtime.Context) – Rendering context
- global_type (bool|False) – Boolean indicating whether this is a global type
Returns: View config
Return type:
-
shuup.xtheme.rendering.
render_placeholder
(context, placeholder_name, default_layout=None, template_name=None, global_type=False)[source]¶ Render a placeholder in a given context.
See
PlaceholderRenderer
for argument docs.Returns: Markup Return type: Markup
-
class
shuup.xtheme.rendering.
PlaceholderRenderer
(context, placeholder_name, default_layout=None, template_name=None, global_type=False)[source]¶ Bases:
object
Main class for materializing a placeholder’s contents during template render time.
Parameters: - context (jinja2.runtime.Context) – Rendering context
- placeholder_name (str) – Placeholder name
- default_layout (Layout|dict|None) – Layout or serialized layout (from template configuration)
- template_name (str|None) – The actual template this node was in. Used to figure out whether the placeholder
lives in an
extends
parent, or in a child. - global_type (bool|False) – Boolean indicating whether this is a global placeholder
shuup.xtheme.resources module¶
-
class
shuup.xtheme.resources.
InlineScriptResource
[source]¶ Bases:
str
An inline script resource (a subclass of string).
The contents are rendered inside a
<script>
tag.-
classmethod
from_vars
(var_name, *args, **kwargs)[source]¶ Create an InlineScriptResource assigning an object of variables into a name in the
window
scope.Aside from
var_name
the signature of this function is similar to that ofdict
. Useful for configuration options, etc.Parameters: var_name (str) – The variable to add into global scope. Returns: An InlineScriptResource
object.Return type: InlineScriptResource
-
classmethod
-
class
shuup.xtheme.resources.
JinjaMarkupResource
(template, context)[source]¶ Bases:
object
A Jinja markup resource.
-
class
shuup.xtheme.resources.
InlineMarkupResource
[source]¶ Bases:
str
An inline markup resource (a subclass of string).
The contents are rendered as-is.
-
class
shuup.xtheme.resources.
InlineStyleResource
[source]¶ Bases:
str
An inline style resource (a subclass of string).
-
class
shuup.xtheme.resources.
ResourceContainer
[source]¶ Bases:
object
ResourceContainers deal with storing and rendering injected resources.
A ResourceContainer is injected into rendering contexts by
XthemeTemplate
(akin to howdjango-jinja
‘s Template injectsrequest
andcsrf_token
).-
add_resource
(location, resource)[source]¶ Add a resource into the given location.
Duplicate resources are ignored (and false is returned). Resource injection order is retained.
Parameters: - location (str) – The name of the location. See KNOWN_LOCATIONS.
- resource (str|InlineMarkupResource|InlineScriptResource) – The actual resource. Either an URL string or one of the inline resource classes.
Returns: Success flag.
Return type:
-
-
shuup.xtheme.resources.
inject_resources
(context, content, clean=True)[source]¶ Inject all the resources in the context’s
ResourceContainer
into appropriate places in the content given.Parameters: Returns: Possibly modified HTML content.
Return type:
-
shuup.xtheme.resources.
get_resource_container
(context)[source]¶ Get a
ResourceContainer
from a rendering context.Parameters: context (jinja2.runtime.Context) – Context. Returns: Resource Container. Return type: shuup.xtheme.resources.ResourceContainer|None
-
shuup.xtheme.resources.
add_resource
(context, location, resource)[source]¶ Add an Xtheme resource into the given context.
Parameters: - context (jinja2.runtime.Context) – Context.
- location (str) – Location string (see
KNOWN_LOCATIONS
). - resource (str|InlineMarkupResource|InlineScriptResource) – Resource descriptor (URL or inline markup object).
Returns: Success flag.
Return type:
shuup.xtheme.settings module¶
-
shuup.xtheme.settings.
SHUUP_XTHEME_ADMIN_THEME_CONTEXT
= 'shuup.xtheme.admin_module.utils.get_theme_context'¶ Spec string for the Xtheme admin theme context.
You can use this to determine logic around which themes are visible in your project Admin Panel. This function takes shop
shuup.core.models.Shop
and should returncurrent_theme_classes
andcurrent_theme
for context, wherecurrent_theme_classes
is a list ofshuup.xtheme.models.ThemeSettings
.
-
shuup.xtheme.settings.
SHUUP_XTHEME_EXCLUDE_TEMPLATES_FROM_RESOUCE_INJECTION
= ['notify/admin/script_item_editor.jinja']¶ Spec to control Xtheme resource injections.
Include your template names here to prevent xtheme injecting resources. This does not expect the template to exist.
Can be useful in situations, where you have
html
andbody
HTML tags inside the actual template structure.
shuup.xtheme.signal_handlers module¶
shuup.xtheme.template_ns module¶
-
class
shuup.xtheme.template_ns.
XthemeNamespace
[source]¶ Bases:
object
A template helper namespace for Xtheme-related functionality.
-
get_view_name
(context)[source]¶ Get the current view’s view name (used for identifying view configurations).
Parameters: context (jinja2.runtime.Context) – Implicit Jinja2 context Returns: View name string Return type: str
-
shuup.xtheme.testing module¶
-
shuup.xtheme.testing.
override_current_theme_class
(theme_class=<object object>, shop=None)¶ Context manager for overriding the currently active theme class for testing.
An instance of this class is then returned by
get_current_theme
.A falsy value means
None
is returned fromget_current_theme
. This is also useful for testing.Parameters: theme_class (class[Theme]) – A theme class object.
shuup.xtheme.urls module¶
shuup.xtheme.utils module¶
-
shuup.xtheme.utils.
join_css_classes
(class_list)[source]¶ Join an iterable of truthy values by spaces, effectively creating a list of CSS classes.
The retval is sorted for cleanliness.
Parameters: class_list (Iterable[str]) – Iterable of classes Returns: String Return type: str
-
shuup.xtheme.utils.
get_html_attrs
(attrs)[source]¶ Flatten a dict into HTML attributes (it’s
django.forms.utils.flatatt
on steroids!).Only truthy keys and values are taken into account; list-like values are flattened with
join_css_classes
Parameters: attrs (dict[str, object]) – Attribute dict Returns: string ready to paste after a HTML tag open. <foo%s>
!Return type: str
shuup.xtheme.view_config module¶
-
class
shuup.xtheme.view_config.
ViewConfig
(theme, shop, view_name, draft, global_type=False)[source]¶ Bases:
object
A view configuration.
Contains layout and plugin configuration for all placeholders in a given view.
This class does not directly correspond to a database model; it may act as a container for
SavedViewConfig
objects, and wraps theSavedViewConfig
API.Initialize a view configuration.
Parameters: - theme (shuup.xtheme.Theme|None) – Theme object (could be None to not touch the database).
- shop (shuup.core.models.Shop) – Shop object.
- view_name (str) – View name (the class name of the view).
- draft (bool) – Load in draft mode?
- global_type (bool|False) – Boolean indicating whether this is a global config.
-
saved_view_config
¶ Get a saved view config model depending on the current parameters.
Returns: A SavedViewConfig object for the current theme/view/draft mode, or None. Return type: shuup.xtheme.models.SavedViewConfig|None
-
get_placeholder_layouts
(context, placeholder_name, default_layout={})[source]¶ Get a layout objects for the given placeholder and context.
Parameters: - context (jinja2.runtime.Context) – Rendering context.
- placeholder_name (str) – The name of the placeholder to load.
- default_layout (dict|Layout) – Default layout configuration (either a dict or an actual Layout).
Returns: List of layouts available for current placeholder and context.
Return type:
-
get_placeholder_layout
(layout_cls, placeholder_name, default_layout={}, context=None, layout_data_key=None)[source]¶ Get a layout object for the given placeholder.
Parameters: Returns: Layout.
Return type:
-
save_default_placeholder_layout
(placeholder_name, layout)[source]¶ Save a default placeholder layout (only if no data for the PH already exists).
Parameters: - placeholder_name (str) – Placeholder name.
- layout (Layout|dict) – Layout or layout data.
Returns: True if saved.
Return type:
-
publish
()[source]¶ Publish this revision of the view configuration as the currently public one.
Returns: Success flag. Return type: bool
Module contents¶
-
class
shuup.xtheme.
Plugin
(config)¶ Bases:
object
A plugin that can be instantiated within a
shuup.xtheme.layout.LayoutCell
.Other plugins should inherit from this class and register themselves in the
xtheme_plugin
provide category.Instantiate a Plugin with the given
config
dictionary.Parameters: config (dict) – Dictionary of freeform configuration data -
cacheable
= False¶
-
editor_form_class
¶ alias of
GenericPluginForm
-
fields
= []¶
-
get_cache_key
(context, **kwargs) → str[source]¶ Return a string that is used as the cache key when the plugin can be cached
-
get_defaults
()[source]¶ Return the default values of this plugins configuration.
Default values will be set to the plugin’s configuration and applied to the form fields’ initial values
-
get_editor_form_class
()[source]¶ Return the form class for editing this plugin.
The form class should either derive from PluginForm, or at least have a
get_config()
method.Form classes without
fields
are treated the same way as if you’d returnNone
, i.e. no configuration form is presented to the user.Returns: Editor form class Return type: class[forms.Form]|None
-
classmethod
get_plugin_choices
(empty_label=None)[source]¶ Get a sorted list of 2-tuples (identifier and name) of available Xtheme plugins.
Handy for
<select>
boxes.Parameters: empty_label (str|None) – Label for the “empty” choice. If falsy, no empty choice is prepended Returns: List of 2-tuples Return type: Iterable[tuple[str, str]]
-
get_translated_value
(key, default=None, language=None)[source]¶ Get a translated value from the plugin’s configuration.
It’s assumed that translated values are stored in a
{language: data, ...}
dictionary in the plugin configuration blob. This is the protocol thatshuup.xtheme.plugins.forms.TranslatableField
uses.If the configuration blob contains such a dictionary, but it does not contain a translated value in the requested language does not exist, the fallback value, if any, within that dictionary is tried next. Failing that, the
default
value is returned.Parameters: - key (str) – Configuration key
- default – Default value to return when all else fails.
- language (str|None) – Requested language. Defaults to the active language.
Returns: A translated value.
-
identifier
= None¶
-
is_context_valid
(context)[source]¶ Check that the given rendering context is valid for rendering this plugin.
By default, just checks
required_context_variables
.Parameters: context (jinja2.runtime.Context) – Rendering context Returns: True if we should bother trying to render this Return type: bool
-
classmethod
load
(identifier, theme=None)[source]¶ Get a plugin class based on the identifier from the
xtheme_plugin
provides registry.Parameters: identifier (str) – Plugin class identifier Returns: A plugin class, or None Return type: class[Plugin]|None
-
name
= 'Plugin'¶
-
render
(context)[source]¶ Return the HTML for a plugin in a given rendering context.
Parameters: context (jinja2.runtime.Context) – Rendering context Returns: String of rendered content. Return type: str
-
required_context_variables
= set()¶
-
-
class
shuup.xtheme.
TemplatedPlugin
(config)¶ Bases:
shuup.xtheme.Plugin
Convenience base class for plugins that just render a “sub-template” with a given context.
Instantiate a Plugin with the given
config
dictionary.Parameters: config (dict) – Dictionary of freeform configuration data -
config_copied_variables
= set()¶
-
engine
= None¶
-
get_context_data
(context)[source]¶ Get a context dictionary from a Jinja2 context.
Parameters: context (jinja2.runtime.Context) – Jinja2 rendering context Returns: Dict of vars Return type: dict[str, object]
-
inherited_variables
= set()¶
-
template_name
= ''¶
-
-
class
shuup.xtheme.
Theme
(theme_settings=None, shop=None)¶ Bases:
object
Base class for all the Xtheme themes.
This class does not directly correspond to a database object; it’s used in the rendering, etc. process.
It does, however, act as a container for a
ThemeSettings
object that contains the actual persisted settings, etc.Initialize this theme, with an optional
ThemeSettings
orShop
object. Only one should be passed.Parameters: - theme_settings (ThemeSettings|None) – A theme settings object for this theme.
- shop (Shop|None) – The shop for this theme.
-
default_style_identifier
= None¶
-
default_template_dir
= None¶
-
extra_config_extra_css
= None¶
-
extra_config_extra_js
= None¶
-
extra_config_template
= None¶
-
fields
= []¶
-
get_all_plugin_choices
(empty_label=None)[source]¶ Get grouped list of 2-tuples (identifier and name) of all available Xtheme plugins.
Super handy for
<select>
boxes.Parameters: empty_label (str|None) – Label for the “empty” choice. If falsy, no empty choice is prepended. Returns: List of 2-tuples Return type: Iterable[tuple[str, str]]
-
get_configuration_form
(form_kwargs)[source]¶ Return a ModelForm instance (model=ThemeSettings) for configuring this theme.
By default, returns a GenericThemeForm (a ModelForm populated from
theme.fields
).Parameters: form_kwargs (dict) – The keyword arguments that should be used for initializing the form. Return type: django.forms.ModelForm
-
get_global_plugin_choices
(empty_label=None)[source]¶ Get a sorted list of 2-tuples (identifier and name) of available global Xtheme plugins.
Handy for
<select>
boxes.Parameters: empty_label (str|None) – Label for the “empty” choice. If falsy, no empty choice is prepended. Returns: List of 2-tuples Return type: Iterable[tuple[str, str]]
-
get_setting
(key, default=None)[source]¶ Get a setting value for this theme.
Parameters: Returns: Setting value
Return type:
-
get_settings
()[source]¶ Get all the currently set settings for the theme as a dict.
Returns: Dict of settings Return type: dict
-
get_theme_plugin_choices
(empty_label=None)[source]¶ Get a sorted list of 2-tuples (identifier and name) of available theme specific Xtheme plugins.
Handy for
<select>
boxes.Parameters: empty_label (str|None) – Label for the “empty” choice. If falsy, no empty choice is prepended. Returns: List of 2-tuples Return type: Iterable[tuple[str, str]]
-
get_view
(view_name)[source]¶ Get an extra view for this theme.
Views may be either normal Django functions or CBVs (or anything that has
as_view()
really). Falsy values are considered “not found”.Parameters: view_name (str) – View name. Returns: The extra view, if one exists for the given name. Return type: dict[str, View|callable]|None
-
global_placeholders
= []¶
-
guide_template
= None¶
-
identifier
= None¶
-
name
= ''¶
-
plugins
= []¶
Render menu extensions.
Some addons want to provide items to main menu.
Parameters: request – Return safe HTML string:
-
set_settings
(*args, **kwargs)[source]¶ Set a number of settings for this theme.
The arguments are exactly the same as those to
dict
.Note
It’s better to call this once instead of calling
set_setting
several times.
-
settings_obj
¶ Get a saved settings model for this theme.
Return type: shuup.xtheme.models.ThemeSettings
-
stylesheets
= []¶
-
template_dir
= None¶
-
shuup.xtheme.
get_current_theme
(shop)¶ Get the currently active theme object.
Parameters: shop (shuup.core.models.Shop) – The shop to get the active theme. Returns: Theme object or None Return type: Theme
-
shuup.xtheme.
get_theme_by_identifier
(identifier, shop)¶ Get an instantiated theme by identifier.
Parameters: - identifier (str) – Theme identifier.
- shop (shuup.core.models.Shop) – Shop to fetch the theme settings.
Returns: Theme object or None
Return type:
-
shuup.xtheme.
set_current_theme
(identifier, shop)¶ Activate a theme based on identifier.
Parameters: - identifier (str) – Theme identifier.
- shop (shuup.core.models.Shop) – Shop to fetch the theme settings.
Returns: Activated theme
Return type:
-
shuup.xtheme.
templated_plugin_factory
(identifier, template_name, **kwargs)¶ A factory (akin to
modelform_factory
) to quickly create simple plugins.Parameters: - identifier (str) – The unique identifier for the new plugin.
- template_name (str) – The template file path this plugin should render
- kwargs (dict) – Other arguments for the
TemplatedPlugin
/Plugin
classes.
Returns: New
TemplatedPlugin
subclassReturn type: class[TemplatedPlugin]
-
shuup.xtheme.
get_theme_cache_key
(shop=None)¶
-
shuup.xtheme.
get_middleware_current_theme
()¶ Return the current middleware state theme.
-
shuup.xtheme.
set_middleware_current_theme
(theme)¶ ” Set the theme as the current for this thread.