lektor-website/docs/api/build/context/sub-artifact/index.html

324 lines
13 KiB
HTML
Raw Normal View History

2022-02-20 15:15:38 +01:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
2022-02-23 01:34:48 +01:00
<link rel="stylesheet" href="../../../../../static/styles.css?h=ca3aba42">
2022-02-20 15:15:38 +01:00
<link rel="stylesheet" href="../../../../../static/pygments.css">
<link rel="shortcut icon" href="../../../../../static/favicon.png?h=fa09bedd">
<title>sub_artifact | Documentation | Lektor Static Content Management System</title>
</head>
<body class="default">
<nav class="navbar navbar-inverse navbar-static-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../../../../../">Lektor</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="../../../../../downloads/">Download</a></li>
<li class="active"><a href="../../../../">Documentation</a></li>
<li><a href="../../../../../showcase/">Showcase</a></li>
<li><a href="../../../../../plugins/">Plugins</a></li>
<li><a href="../../../../../community/">Community</a></li>
<li><a href="../../../../../blog/">Blog</a></li>
</ul>
</div>
</div>
</nav>
<div class="body-wrapper">
<div class="container">
<div class="row">
<div class="col-sm-3">
<ul class="tree-nav nocontent">
<li><a href="../../../../">Welcome</a></li>
<li><a href="../../../../what/">What is Lektor</a>
<li><a href="../../../../installation/">Installation</a>
<li><a href="../../../../quickstart/">Quickstart</a>
<li><a href="../../../../project/">Project</a>
<li><a href="../../../../content/">Content</a>
<li><a href="../../../../templates/">Templates</a>
<li><a href="../../../../themes/">Themes</a>
<li><a href="../../../../guides/">Guides</a>
<li><a href="../../../../deployment/">Deployment</a>
<li><a href="../../../../plugins/">Plugins</a>
<li><a href="../../../../models/">Data Modelling</a>
<li><a href="../../../../cli/">Command Line</a>
<li><a href="../../../">API</a>
<ul>
<li><a href="../../">Build System</a>
<ul>
<li><a href="../../artifact/">Artifact</a>
<li><a href="../../program/">BuildProgram</a>
<li><a href="../">Context</a>
<ul>
<li><a href="../changed-base-url/">changed_base_url()</a>
<li><a href="../gather-dependencies/">gather_dependencies()</a>
<li><a href="../locale/">locale</a>
<li><a href="../pad/">pad</a>
<li><a href="../record/">record</a>
<li><a href="../record-dependency/">record_dependency()</a>
<li><a href="../source/">source</a>
<li class="active"><a href="./">sub_artifact()</a>
<ul></ul>
</ul>
<li><a href="../../get-ctx/">get_ctx()</a>
</ul>
<li><a href="../../../databags/">Databags</a>
<li><a href="../../../db/">Database</a>
<li><a href="../../../environment/">Environment</a>
<li><a href="../../../plugins/">Plugins</a>
<li><a href="../../../project/">Project</a>
<li><a href="../../../publisher/">Publisher</a>
<li><a href="../../../templates/">Template API</a>
<li><a href="../../../utils/">Utilities</a>
</ul>
<li><a href="../../../../search/">Search</a>
</ul>
<div class="visible-md-block visible-lg-block">
<h4>This Page</h4>
<ul class="toc">
<li><a href="#example">Example</a></li>
</ul>
</div>
</div>
<div class="col-sm-9 doc-styling">
<h1><i class="glyphicon glyphicon-cog"></i> <code class="obj">sub_artifact</code> <span class="sig">(<code>artifact_name, sources=None, source_obj=None, config_hash=None</code>)</span></h1>
<ul class=page-meta>
<li>Method of <a href="../">Context</a></li>
</ul>
<p>This method can be used as Python decorator to inform the builder to create
an artifact that is related to the current artifact but locally contained
within it. For instance this is used to implement the thumbnailing and
similar things.</p>
<p>Each artifact needs at least a name which is what the final file will be
called. For instance <code>/demo.css</code> would place an artifact named <code>demo.css</code>
in the root folder. The <code>sources</code> is an optional list of files that indicate
that they are responsible for creating this artifact. It can be left empty
in which case the artifact just tracks the current file. The <code>source_obj</code>
can optionally point to a source object but for most plugins this will never
be set.</p>
<p>The artifact passed to the function is then the <a href="../../artifact/" class="ref">Artifact</a>
object for modification. Note that the function will not be invoked if the
artifact is already considered up to date.</p>
<p>In addition a <code>config_hash</code> can be provided with can be a hash value. If
provided it can identify the configuration that the artifact was created
from. If the hash changes the artifact will be rebuilt. Such a hash
can for instance be generated with <a href="../../../utils/get-structure-hash/" class="ref">get_structure_hash</a>.</p>
2022-02-23 01:16:10 +01:00
<h2 id="example">Example</h2><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span>
2022-02-20 15:15:38 +01:00
<span class="kn">from</span> <span class="nn">lektor.pluginsystem</span> <span class="kn">import</span> <span class="n">Plugin</span>
<span class="k">class</span> <span class="nc">IncludeFilePlugin</span><span class="p">(</span><span class="n">Plugin</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">setup_env</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">extra</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">get_css</span><span class="p">(</span><span class="n">artifact_name</span><span class="o">=</span><span class="s1">&#39;/demo.css&#39;</span><span class="p">):</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">get_ctx</span><span class="p">()</span>
<span class="nd">@ctx</span><span class="o">.</span><span class="n">sub_artifact</span><span class="p">(</span><span class="n">artifact_name</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">build_stylesheet</span><span class="p">(</span><span class="n">artifact</span><span class="p">):</span>
<span class="k">with</span> <span class="n">artifact</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;body { background: red; }</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">artifact_name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">jinja_env</span><span class="o">.</span><span class="n">globals</span><span class="p">[</span><span class="s1">&#39;get_demo_css&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_css</span>
</pre></div>
<p>Inside a template it can be used like this:</p>
2022-02-23 01:16:10 +01:00
<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">stylesheet</span> <span class="na">href</span><span class="o">=</span><span class="s">&quot;</span><span class="cp">{{</span> <span class="nv">get_demo_css</span><span class="o">()|</span><span class="nf">url</span> <span class="cp">}}</span><span class="s">&quot;</span><span class="p">&gt;</span>
2022-02-20 15:15:38 +01:00
</pre></div>
<div class="comment-box">
<h2>Comments</h2>
<div id="disqus_thread"></div>
<script>
var disqus_config = function() { this.page.identifier = "/docs/api/build/context/sub-artifact"; this.page.url = "https://www.getlektor.com/docs/api/build/context/sub-artifact/"; };
(function() {
var d = document, s = d.createElement('script');
s.src = '//lektordocumentation.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>
Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript"
rel="nofollow">comments powered by Disqus.</a>
</noscript>
</div>
</div>
</div>
</div>
</div>
<div class="bottomsummary">
<div class="container">
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-sm-4 icon-bar">
<a href="https://github.com/lektor/lektor/" title="Lektor on GitHub"
><i class="fa fa-github"></i></a>
<a href="https://github.com/lektor/lektor/issues/" title="Report Issues for Lektor"
><i class="fa fa-bug"></i></a>
<a href="https://twitter.com/getlektor" title="Find Lektor on Twitter"
><i class="fa fa-twitter"></i></a>
<a href="https://gitter.im/lektor/lektor" title="Chat on Gitter"
><i class="fa fa-comment"></i></a>
<a href="https://github.com/lektor/lektor-website/tree/master/content/docs/api/build/context/sub-artifact/contents.lr" title="View source for this page"><i class="fa fa-code"></i></a>
</div>
<div class="col-sm-8">
<a href="../../../../../license/">License & Copyright</a>
<a href="../../../../../contact/">Contact</a>
Made with <i class="fa fa-fw fa-heart" title="Heart"><span hidden>Heart</span></i> in Carinthia
</div>
</div>
</div>
</footer>
2022-02-23 01:34:48 +01:00
<script type=text/javascript src="../../../../../static/app.js?h=bb1b933a" charset="utf-8"></script>
2022-02-20 15:15:38 +01:00
<script>
((window.gitter = {}).chat = {}).options = {
room: 'lektor/lektor',
activationElement: null
};
document.write('<button class="js-gitter-toggle-chat-button">Toggle Chat</button>');
var dnt = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
if (dnt != "1" && dnt != "yes") {
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-70822533-1', 'auto');
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
} else {
console.debug("Respecting Do-Not-Track, not running analytics.");
}
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<script async defer id="github-bjs" src="https://buttons.github.io/buttons.js"></script>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
<script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
</body>
</html>