2022.12 #133

Merged
edraft merged 85 commits from 2022.12 into master 2022-12-25 11:58:35 +01:00
76 changed files with 878 additions and 288 deletions
Showing only changes of commit 6f3099a8db - Show all commits

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -16,6 +16,8 @@ cpl **G** *<schematic>* *<name>*
Generates files based on a schematic.
You can define custom schematics by creating templates in a ```.cpl``` folder.
## Arguments
| Argument | Description | Value type |
@ -26,14 +28,16 @@ Generates files based on a schematic.
## Schematics
| Schematic | Description | Arguments |
|-----------------|:-------------------------------------:|:------------:|
| ```abc``` | Abstract base class | ```<name>``` |
| ```class``` | Class | ```<name>``` |
| ```enum``` | Enum class | ```<name>``` |
| ```pipe``` | Pipe class | ```<name>``` |
| ```service``` | Service class | ```<name>``` |
| ```settings``` | [Configmodel](cpl_core.configuration) | ```<name>``` |
| ```test``` | Test class | ```<name>``` |
| ```thread``` | Thread class | ```<name>``` |
| ```validator``` | Validator class | ```<name>``` |
| Schematic | Description | Arguments |
|-----------------|:--------------------------------------:|:------------:|
| ```abc``` | Abstract base class | ```<name>``` |
| ```class``` | Class | ```<name>``` |
| ```enum``` | Enum class | ```<name>``` |
| ```pipe``` | Pipe class | ```<name>``` |
| ```service``` | Service class | ```<name>``` |
| ```settings``` | [Configmodel](cpl_core.configuration) | ```<name>``` |
| ```test``` | Test class | ```<name>``` |
| ```thread``` | Thread class | ```<name>``` |
| ```validator``` | Validator class | ```<name>``` |
| ```command``` | Discord bot command class | ```<name>``` |
| ```event``` | Discord bot event class | ```<name>``` |

View File

@ -16,6 +16,8 @@ cpl **N** *&lt;type&gt;* *&lt;name&gt;*
Generates a workspace and initial project or add a project to workspace.
You can define custom project types by creating templates in a ```.cpl``` folder.
If the command is running in a CPL workspace, it will add the new project to the workspace.
| Argument | Description | Value type |

View File

@ -1,3 +1,3 @@
# Using appsettings.json
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Handle console arguments
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Use cpl_core.console.Console
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Create startup class
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Extend application
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Extend startup
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Use builtin logger
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Send mails
## Comming soon
## Coming soon

View File

@ -12,3 +12,4 @@ Tutorials
tutorials.console
tutorials.logging
tutorials.mail
tutorials.templating

View File

@ -0,0 +1,181 @@
# Using cpl g & cpl n templating
## Contents
- [Prerequisites](#prerequisites)
- [Generate schematics](#cpl-generate-scmatics)
- [Project types](#cpl-new-project-types)
## Prerequisites
Create a folder called ```.cpl```
## cpl generate schematics
Create a file which begins with ```schematic_your_schematic.py```.
A schematic template is detected by starting with ```schematic_``` and endswith ```.py```.
You should replace ```your_schematic``` with an appropriate name of your schematic. For example, we will choose ```Enum```.
Attention: It is important that you do not overwrite templates by creating a file or class with the same name.
In the template create a class with the name of your schematic. For example:
```python
from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC
class Enum(GenerateSchematicABC):
def __init__(self, *args: str):
GenerateSchematicABC.__init__(self, *args)
def get_code(self) -> str:
import textwrap
code = textwrap.dedent("""\
from enum import Enum
class $Name(Enum):
atr = 0
""")
return self.build_code_str(code, Name=self._class_name)
@classmethod
def register(cls):
GenerateSchematicABC.register(
cls,
'enum',
['e', 'E']
)
```
You can test it by calling ```cpl g --help``` your schematic should be listed as available.
## cpl new project types
The project templating is a little more complex and is therefore divided into several files.
First of all, for information, it is very important not to overwrite any existing files or classes!
Template structure explained by the example of the internal type ```console```:
```
- project_console.py
- project_file_license.py
- project_file_appsettings.py
- project_file.py
- project_file_readme.py
- project_file_code_main.py
- project_file_code_startup.py
- project_file_code_application.py
```
Here the template ```project_console.py``` defines how a console project has to look like when it is generated. Here is the code to illustrate this:
```python
from cpl_cli.abc.project_type_abc import ProjectTypeABC
from cpl_cli.configuration import WorkspaceSettings
from cpl_core.utils import String
class Console(ProjectTypeABC):
def __init__(
self,
base_path: str,
project_name: str,
workspace: WorkspaceSettings,
use_application_api: bool,
use_startup: bool,
use_service_providing: bool,
use_async: bool,
project_file_data: dict,
):
from project_file import ProjectFile
from project_file_appsettings import ProjectFileAppsettings
from project_file_code_application import ProjectFileApplication
from project_file_code_main import ProjectFileMain
from project_file_code_startup import ProjectFileStartup
from project_file_readme import ProjectFileReadme
from project_file_license import ProjectFileLicense
from schematic_init import Init
ProjectTypeABC.__init__(self, base_path, project_name, workspace, use_application_api, use_startup, use_service_providing, use_async, project_file_data)
project_path = f'{base_path}{String.convert_to_snake_case(project_name.split("/")[-1])}/'
self.add_template(ProjectFile(project_name.split('/')[-1], project_path, project_file_data))
if workspace is None:
self.add_template(ProjectFileLicense(''))
self.add_template(ProjectFileReadme(''))
self.add_template(Init('', 'init', f'{base_path}tests/'))
self.add_template(Init('', 'init', project_path))
self.add_template(ProjectFileAppsettings(project_path))
if use_application_api:
self.add_template(ProjectFileApplication(project_path, use_application_api, use_startup, use_service_providing, use_async))
if use_startup:
self.add_template(ProjectFileStartup(project_path, use_application_api, use_startup, use_service_providing, use_async))
self.add_template(ProjectFileMain(project_name.split('/')[-1], project_path, use_application_api, use_startup, use_service_providing, use_async))
```
The class must be named exactly as the project type should be named. It is also checked on the initial letter of the class as alias.
Now create a class for normal files which inherits from ```FileTemplateABC``` and a class for code files which inherits from ```CodeFileTemplateABC```.
For example:
project_file_code_startup.py:
```python
from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC
class ProjectFileStartup(CodeFileTemplateABC):
def __init__(self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool):
CodeFileTemplateABC.__init__(self, 'startup', path, '', use_application_api, use_startup, use_service_providing, use_async)
def get_code(self) -> str:
import textwrap
return textwrap.dedent("""\
from cpl_core.application import StartupABC
from cpl_core.configuration import ConfigurationABC
from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC
from cpl_core.environment import ApplicationEnvironment
class Startup(StartupABC):
def __init__(self):
StartupABC.__init__(self)
def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC:
return configuration
def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC:
return services.build_service_provider()
""")
```
project_file.py:
```python
import json
from cpl_cli.abc.file_template_abc import FileTemplateABC
class ProjectFile(FileTemplateABC):
def __init__(self, name: str, path: str, code: dict):
FileTemplateABC.__init__(self, '', path, '{}')
self._name = f'{name}.json'
self._code = code
def get_code(self) -> str:
return json.dumps(self._code, indent=2)
```

View File

@ -112,6 +112,7 @@ cpl <strong>G</strong> <em>&lt;schematic&gt;</em> <em>&lt;name&gt;</em></p>
<section id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this heading"></a></h2>
<p>Generates files based on a schematic.</p>
<p>You can define custom schematics by creating templates in a <code class="docutils literal notranslate"><span class="pre">.cpl</span></code> folder.</p>
</section>
<section id="arguments">
<h2>Arguments<a class="headerlink" href="#arguments" title="Permalink to this heading"></a></h2>
@ -184,6 +185,14 @@ cpl <strong>G</strong> <em>&lt;schematic&gt;</em> <em>&lt;name&gt;</em></p>
<td class="text-center"><p>Validator class</p></td>
<td class="text-center"><p><code class="docutils literal notranslate"><span class="pre">&lt;name&gt;</span></code></p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">command</span></code></p></td>
<td class="text-center"><p>Discord bot command class</p></td>
<td class="text-center"><p><code class="docutils literal notranslate"><span class="pre">&lt;name&gt;</span></code></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">event</span></code></p></td>
<td class="text-center"><p>Discord bot event class</p></td>
<td class="text-center"><p><code class="docutils literal notranslate"><span class="pre">&lt;name&gt;</span></code></p></td>
</tr>
</tbody>
</table>
</section>

View File

@ -112,6 +112,7 @@ cpl <strong>N</strong> <em>&lt;type&gt;</em> <em>&lt;name&gt;</em></p>
<section id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this heading"></a></h2>
<p>Generates a workspace and initial project or add a project to workspace.</p>
<p>You can define custom project types by creating templates in a <code class="docutils literal notranslate"><span class="pre">.cpl</span></code> folder.</p>
<p>If the command is running in a CPL workspace, it will add the new project to the workspace.</p>
<table class="colwidths-auto docutils align-default">
<thead>

View File

@ -20,7 +20,7 @@
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="CLI reference" href="cpl_cli.html" />
<link rel="prev" title="Send mails" href="tutorials.mail.html" />
<link rel="prev" title="Using cpl g &amp; cpl n templating" href="tutorials.templating.html" />
</head>
<body class="wy-body-for-nav">
@ -189,7 +189,7 @@ See <a class="reference external" href="https://git.sh-edraft.de/sh-edraft.de/cp
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="tutorials.mail.html" class="btn btn-neutral float-left" title="Send mails" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="tutorials.templating.html" class="btn btn-neutral float-left" title="Using cpl g &amp; cpl n templating" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="cpl_cli.html" class="btn btn-neutral float-right" title="CLI reference" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>

View File

@ -104,13 +104,13 @@
<dd><p>Bases: <a class="reference internal" href="#cpl_core.configuration.configuration_abc.ConfigurationABC" title="cpl_core.configuration.configuration_abc.ConfigurationABC"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigurationABC</span></code></a></p>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_core.configuration.configuration.Configuration.add_configuration">
<span class="sig-name descname"><span class="pre">add_configuration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">type</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><span class="pre">ConfigurationModelABC</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_core.configuration.configuration.Configuration.add_configuration" title="Permalink to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">add_configuration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">type</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">any</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_core.configuration.configuration.Configuration.add_configuration" title="Permalink to this definition"></a></dt>
<dd><p>Add configuration object</p>
<blockquote>
<div><dl class="simple">
<dt>key_type: Union[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">type</span></code>]</dt><dd><p>Type of the value</p>
</dd>
<dt>value: Union[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><code class="xref py py-class docutils literal notranslate"><span class="pre">cpl_core.configuration.configuration_model_abc.ConfigurationModelABC</span></code></a>]</dt><dd><p>Object of the value</p>
<dt>value: any</dt><dd><p>Object of the value</p>
</dd>
</dl>
</div></blockquote>
@ -217,7 +217,7 @@
<dl class="py method">
<dt class="sig sig-object py" id="cpl_core.configuration.configuration.Configuration.get_configuration">
<span class="sig-name descname"><span class="pre">get_configuration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">search_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Type</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><span class="pre">ConfigurationModelABC</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><span class="pre">ConfigurationModelABC</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#cpl_core.configuration.configuration.Configuration.get_configuration" title="Permalink to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">get_configuration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">search_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Type</span><span class="p"><span class="pre">[</span></span><span class="pre">T</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">T</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#cpl_core.configuration.configuration.Configuration.get_configuration" title="Permalink to this definition"></a></dt>
<dd><p>Returns value from configuration by given type</p>
<blockquote>
<div><dl class="simple">
@ -256,13 +256,13 @@
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_core.configuration.configuration_abc.ConfigurationABC.add_configuration">
<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">add_configuration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">type</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><span class="pre">ConfigurationModelABC</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_core.configuration.configuration_abc.ConfigurationABC.add_configuration" title="Permalink to this definition"></a></dt>
<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">add_configuration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">type</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">any</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_core.configuration.configuration_abc.ConfigurationABC.add_configuration" title="Permalink to this definition"></a></dt>
<dd><p>Add configuration object</p>
<blockquote>
<div><dl class="simple">
<dt>key_type: Union[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">type</span></code>]</dt><dd><p>Type of the value</p>
</dd>
<dt>value: Union[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><code class="xref py py-class docutils literal notranslate"><span class="pre">cpl_core.configuration.configuration_model_abc.ConfigurationModelABC</span></code></a>]</dt><dd><p>Object of the value</p>
<dt>value: any</dt><dd><p>Object of the value</p>
</dd>
</dl>
</div></blockquote>
@ -369,7 +369,7 @@
<dl class="py method">
<dt class="sig sig-object py" id="cpl_core.configuration.configuration_abc.ConfigurationABC.get_configuration">
<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_configuration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">search_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Type</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><span class="pre">ConfigurationModelABC</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><span class="pre">ConfigurationModelABC</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#cpl_core.configuration.configuration_abc.ConfigurationABC.get_configuration" title="Permalink to this definition"></a></dt>
<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_configuration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">search_type</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Type</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#cpl_core.configuration.configuration_model_abc.ConfigurationModelABC" title="cpl_core.configuration.configuration_model_abc.ConfigurationModelABC"><span class="pre">ConfigurationModelABC</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">T</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#cpl_core.configuration.configuration_abc.ConfigurationABC.get_configuration" title="Permalink to this definition"></a></dt>
<dd><p>Returns value from configuration by given type</p>
<blockquote>
<div><dl class="simple">

View File

@ -244,7 +244,7 @@
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_discord.events.on_group_join_abc.OnGroupJoinABC.on_group_join">
<em class="property"><span class="pre">abstract</span><span class="w"> </span><span class="pre">async</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">on_group_join</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">chhanel</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">GroupChannel</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">User</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_discord.events.on_group_join_abc.OnGroupJoinABC.on_group_join" title="Permalink to this definition"></a></dt>
<em class="property"><span class="pre">abstract</span><span class="w"> </span><span class="pre">async</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">on_group_join</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">channel</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">GroupChannel</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">User</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_discord.events.on_group_join_abc.OnGroupJoinABC.on_group_join" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View File

@ -51,8 +51,8 @@
<li class="toctree-l3"><a class="reference internal" href="#module-cpl_query.base.ordered_queryable">cpl_query.base.ordered_queryable</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-cpl_query.base.ordered_queryable_abc">cpl_query.base.ordered_queryable_abc</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-cpl_query.base.queryable_abc">cpl_query.base.queryable_abc</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-cpl_query.base.sequence_abc">cpl_query.base.sequence_abc</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-cpl_query.base.sequence_values">cpl_query.base.sequence_values</a></li>
<li class="toctree-l3"><a class="reference internal" href="#cpl-query-base-sequence-abc">cpl_query.base.sequence_abc</a></li>
<li class="toctree-l3"><a class="reference internal" href="#cpl-query-base-sequence-values">cpl_query.base.sequence_values</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="cpl_query.enumerable.html">cpl_query.enumerable</a></li>
@ -170,7 +170,7 @@
<dl class="py class">
<dt class="sig sig-object py" id="cpl_query.base.queryable_abc.QueryableABC">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">cpl_query.base.queryable_abc.</span></span><span class="sig-name descname"><span class="pre">QueryableABC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">t</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">type</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">values</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">list</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.base.queryable_abc.QueryableABC" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#cpl_query.base.sequence_abc.SequenceABC" title="cpl_query.base.sequence_abc.SequenceABC"><code class="xref py py-class docutils literal notranslate"><span class="pre">SequenceABC</span></code></a></p>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Sequence</span></code></p>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.queryable_abc.QueryableABC.all">
<span class="sig-name descname"><span class="pre">all</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Callable</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#cpl_query.base.queryable_abc.QueryableABC.all" title="Permalink to this definition"></a></dt>
@ -603,91 +603,11 @@ Exception: when argument is None or found more than one element</p>
</dd></dl>
</section>
<section id="module-cpl_query.base.sequence_abc">
<span id="cpl-query-base-sequence-abc"></span><h2>cpl_query.base.sequence_abc<a class="headerlink" href="#module-cpl_query.base.sequence_abc" title="Permalink to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="cpl_query.base.sequence_abc.SequenceABC">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">cpl_query.base.sequence_abc.</span></span><span class="sig-name descname"><span class="pre">SequenceABC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">t</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">type</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">values</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">list</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.base.sequence_abc.SequenceABC" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.sequence_abc.SequenceABC.copy">
<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#cpl_query.base.sequence_abc.SequenceABC" title="cpl_query.base.sequence_abc.SequenceABC"><span class="pre">SequenceABC</span></a></span></span><a class="headerlink" href="#cpl_query.base.sequence_abc.SequenceABC.copy" title="Permalink to this definition"></a></dt>
<dd><p>Creates a copy of sequence</p>
<blockquote>
<div><p>SequenceABC</p>
</div></blockquote>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.sequence_abc.SequenceABC.empty">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">empty</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#cpl_query.base.sequence_abc.SequenceABC" title="cpl_query.base.sequence_abc.SequenceABC"><span class="pre">SequenceABC</span></a></span></span><a class="headerlink" href="#cpl_query.base.sequence_abc.SequenceABC.empty" title="Permalink to this definition"></a></dt>
<dd><p>Returns an empty sequence</p>
<blockquote>
<div><p>Sequence object that contains no elements</p>
</div></blockquote>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.sequence_abc.SequenceABC.index">
<span class="sig-name descname"><span class="pre">index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_object</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">object</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#cpl_query.base.sequence_abc.SequenceABC.index" title="Permalink to this definition"></a></dt>
<dd><p>Returns the index of given element</p>
<blockquote>
<div><p>Index of object</p>
</div></blockquote>
<blockquote>
<div><p>IndexError if object not in sequence</p>
</div></blockquote>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.sequence_abc.SequenceABC.next">
<span class="sig-name descname"><span class="pre">next</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.base.sequence_abc.SequenceABC.next" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.sequence_abc.SequenceABC.range">
<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">range</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">length</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#cpl_query.base.sequence_abc.SequenceABC" title="cpl_query.base.sequence_abc.SequenceABC"><span class="pre">SequenceABC</span></a></span></span><a class="headerlink" href="#cpl_query.base.sequence_abc.SequenceABC.range" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.sequence_abc.SequenceABC.to_list">
<span class="sig-name descname"><span class="pre">to_list</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span></span></span><a class="headerlink" href="#cpl_query.base.sequence_abc.SequenceABC.to_list" title="Permalink to this definition"></a></dt>
<dd><p>Converts :class: <cite>cpl_query.base.sequence_abc.SequenceABC</cite> to :class: <cite>list</cite></p>
<blockquote>
<div><dl class="field-list simple">
<dt class="field-odd">class</dt>
<dd class="field-odd"><p><cite>list</cite></p>
</dd>
</dl>
</div></blockquote>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="cpl_query.base.sequence_abc.SequenceABC.type">
<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">type</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">type</span></em><a class="headerlink" href="#cpl_query.base.sequence_abc.SequenceABC.type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<section id="cpl-query-base-sequence-abc">
<h2>cpl_query.base.sequence_abc<a class="headerlink" href="#cpl-query-base-sequence-abc" title="Permalink to this heading"></a></h2>
</section>
<section id="module-cpl_query.base.sequence_values">
<span id="cpl-query-base-sequence-values"></span><h2>cpl_query.base.sequence_values<a class="headerlink" href="#module-cpl_query.base.sequence_values" title="Permalink to this heading"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="cpl_query.base.sequence_values.SequenceValues">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">cpl_query.base.sequence_values.</span></span><span class="sig-name descname"><span class="pre">SequenceValues</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_t</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">type</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.base.sequence_values.SequenceValues" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.sequence_values.SequenceValues.next">
<span class="sig-name descname"><span class="pre">next</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.base.sequence_values.SequenceValues.next" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.base.sequence_values.SequenceValues.reset">
<span class="sig-name descname"><span class="pre">reset</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.base.sequence_values.SequenceValues.reset" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<section id="cpl-query-base-sequence-values">
<h2>cpl_query.base.sequence_values<a class="headerlink" href="#cpl-query-base-sequence-values" title="Permalink to this heading"></a></h2>
</section>
</section>

View File

@ -103,12 +103,6 @@
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">cpl_query.enumerable.enumerable_abc.</span></span><span class="sig-name descname"><span class="pre">EnumerableABC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">t</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">type</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">values</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">list</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.enumerable.enumerable_abc.EnumerableABC" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="cpl_query.base.html#cpl_query.base.queryable_abc.QueryableABC" title="cpl_query.base.queryable_abc.QueryableABC"><code class="xref py py-class docutils literal notranslate"><span class="pre">QueryableABC</span></code></a></p>
<p>ABC to define functions on list</p>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.enumerable.enumerable_abc.EnumerableABC.set_remove_error_check">
<span class="sig-name descname"><span class="pre">set_remove_error_check</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.enumerable.enumerable_abc.EnumerableABC.set_remove_error_check" title="Permalink to this definition"></a></dt>
<dd><p>Set flag to check if element exists before removing</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.enumerable.enumerable_abc.EnumerableABC.to_iterable">
<span class="sig-name descname"><span class="pre">to_iterable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="cpl_query.iterable.html#cpl_query.iterable.iterable_abc.IterableABC" title="cpl_query.iterable.iterable_abc.IterableABC"><span class="pre">IterableABC</span></a></span></span><a class="headerlink" href="#cpl_query.enumerable.enumerable_abc.EnumerableABC.to_iterable" title="Permalink to this definition"></a></dt>

View File

@ -88,8 +88,8 @@
<li class="toctree-l2"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.ordered_queryable">cpl_query.base.ordered_queryable</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.ordered_queryable_abc">cpl_query.base.ordered_queryable_abc</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.queryable_abc">cpl_query.base.queryable_abc</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.sequence_abc">cpl_query.base.sequence_abc</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.sequence_values">cpl_query.base.sequence_values</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpl_query.base.html#cpl-query-base-sequence-abc">cpl_query.base.sequence_abc</a></li>
<li class="toctree-l2"><a class="reference internal" href="cpl_query.base.html#cpl-query-base-sequence-values">cpl_query.base.sequence_values</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="cpl_query.enumerable.html">cpl_query.enumerable</a><ul>

View File

@ -119,7 +119,8 @@ Parameter
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.iterable.iterable_abc.IterableABC.append">
<span class="sig-name descname"><span class="pre">append</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_object</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">object</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.iterable.iterable_abc.IterableABC.append" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dd><p>Append object to the end of the list.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.iterable.iterable_abc.IterableABC.extend">
@ -149,6 +150,20 @@ Parameter
</div></blockquote>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.iterable.iterable_abc.IterableABC.remove_at">
<span class="sig-name descname"><span class="pre">remove_at</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_index</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#cpl_query.iterable.iterable_abc.IterableABC.remove_at" title="Permalink to this definition"></a></dt>
<dd><p>Removes element from list
Parameter
———</p>
<blockquote>
<div><dl class="simple">
<dt>_object: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></dt><dd><p>value</p>
</dd>
</dl>
</div></blockquote>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="cpl_query.iterable.iterable_abc.IterableABC.to_enumerable">
<span class="sig-name descname"><span class="pre">to_enumerable</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="cpl_query.enumerable.html#cpl_query.enumerable.enumerable_abc.EnumerableABC" title="cpl_query.enumerable.enumerable_abc.EnumerableABC"><span class="pre">EnumerableABC</span></a></span></span><a class="headerlink" href="#cpl_query.iterable.iterable_abc.IterableABC.to_enumerable" title="Permalink to this definition"></a></dt>

View File

@ -388,8 +388,6 @@
<li><a href="cpl_core.utils.html#cpl_core.utils.string.String.convert_to_camel_case">convert_to_camel_case() (cpl_core.utils.string.String static method)</a>
</li>
<li><a href="cpl_core.utils.html#cpl_core.utils.string.String.convert_to_snake_case">convert_to_snake_case() (cpl_core.utils.string.String static method)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_abc.SequenceABC.copy">copy() (cpl_query.base.sequence_abc.SequenceABC method)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.queryable_abc.QueryableABC.count">count() (cpl_query.base.queryable_abc.QueryableABC method)</a>
</li>
@ -1275,20 +1273,6 @@
<ul>
<li><a href="cpl_query.base.html#module-cpl_query.base.queryable_abc">module</a>
</li>
</ul></li>
<li>
cpl_query.base.sequence_abc
<ul>
<li><a href="cpl_query.base.html#module-cpl_query.base.sequence_abc">module</a>
</li>
</ul></li>
<li>
cpl_query.base.sequence_values
<ul>
<li><a href="cpl_query.base.html#module-cpl_query.base.sequence_values">module</a>
</li>
</ul></li>
<li>
@ -1527,8 +1511,6 @@
<li><a href="cpl_core.mailing.html#cpl_core.mailing.email_client_settings_name_enum.EMailClientSettingsNameEnum">EMailClientSettingsNameEnum (class in cpl_core.mailing.email_client_settings_name_enum)</a>
</li>
<li><a href="cpl_discord.container.html#cpl_discord.container.guild.Guild.emojis">emojis (cpl_discord.container.guild.Guild attribute)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_abc.SequenceABC.empty">empty() (cpl_query.base.sequence_abc.SequenceABC class method)</a>
</li>
<li><a href="cpl_core.console.html#cpl_core.console.console.Console.enable">enable() (cpl_core.console.console.Console class method)</a>
</li>
@ -1775,19 +1757,17 @@
</li>
</ul></li>
<li><a href="cpl_core.dependency_injection.html#cpl_core.dependency_injection.service_descriptor.ServiceDescriptor.implementation">implementation (cpl_core.dependency_injection.service_descriptor.ServiceDescriptor property)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_abc.SequenceABC.index">index() (cpl_query.base.sequence_abc.SequenceABC method)</a>
</li>
<li><a href="cpl_core.logging.html#cpl_core.logging.logging_level_enum.LoggingLevelEnum.INFO">INFO (cpl_core.logging.logging_level_enum.LoggingLevelEnum attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="cpl_core.logging.html#cpl_core.logging.logger_abc.LoggerABC.info">info() (cpl_core.logging.logger_abc.LoggerABC method)</a>
<ul>
<li><a href="cpl_core.logging.html#cpl_core.logging.logger_service.Logger.info">(cpl_core.logging.logger_service.Logger method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="cpl_discord.service.html#cpl_discord.service.discord_service.DiscordService.init">init() (cpl_discord.service.discord_service.DiscordService method)</a>
<ul>
@ -2171,10 +2151,6 @@
<li><a href="cpl_query.base.html#module-cpl_query.base.ordered_queryable_abc">cpl_query.base.ordered_queryable_abc</a>
</li>
<li><a href="cpl_query.base.html#module-cpl_query.base.queryable_abc">cpl_query.base.queryable_abc</a>
</li>
<li><a href="cpl_query.base.html#module-cpl_query.base.sequence_abc">cpl_query.base.sequence_abc</a>
</li>
<li><a href="cpl_query.base.html#module-cpl_query.base.sequence_values">cpl_query.base.sequence_values</a>
</li>
<li><a href="cpl_query.enumerable.html#module-cpl_query.enumerable.enumerable">cpl_query.enumerable.enumerable</a>
</li>
@ -2217,12 +2193,6 @@
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_abc.SequenceABC.next">next() (cpl_query.base.sequence_abc.SequenceABC method)</a>
<ul>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_values.SequenceValues.next">(cpl_query.base.sequence_values.SequenceValues method)</a>
</li>
</ul></li>
<li><a href="cpl_discord.container.html#cpl_discord.container.member.Member.nick">nick (cpl_discord.container.member.Member attribute)</a>
</li>
<li><a href="cpl_discord.container.html#cpl_discord.container.category_channel.CategoryChannel.nsfw">nsfw (cpl_discord.container.category_channel.CategoryChannel attribute)</a>
@ -2846,8 +2816,6 @@
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="cpl_core.utils.html#cpl_core.utils.string.String.random_string">random_string() (cpl_core.utils.string.String static method)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_abc.SequenceABC.range">range() (cpl_query.base.sequence_abc.SequenceABC class method)</a>
</li>
<li><a href="cpl_core.console.html#cpl_core.console.console.Console.read">read() (cpl_core.console.console.Console class method)</a>
</li>
@ -2865,12 +2833,12 @@
</ul></li>
<li><a href="cpl_query.iterable.html#cpl_query.iterable.iterable_abc.IterableABC.remove">remove() (cpl_query.iterable.iterable_abc.IterableABC method)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_values.SequenceValues.reset">reset() (cpl_query.base.sequence_values.SequenceValues method)</a>
<li><a href="cpl_query.iterable.html#cpl_query.iterable.iterable_abc.IterableABC.remove_at">remove_at() (cpl_query.iterable.iterable_abc.IterableABC method)</a>
</li>
<li><a href="cpl_core.console.html#cpl_core.console.console.Console.reset_cursor_position">reset_cursor_position() (cpl_core.console.console.Console class method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="cpl_core.console.html#cpl_core.console.console.Console.reset_cursor_position">reset_cursor_position() (cpl_core.console.console.Console class method)</a>
</li>
<li><a href="cpl_core.utils.html#cpl_core.utils.pip.Pip.reset_executable">reset_executable() (cpl_core.utils.pip.Pip class method)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.queryable_abc.QueryableABC.reverse">reverse() (cpl_query.base.queryable_abc.QueryableABC method)</a>
@ -2929,10 +2897,6 @@
<li><a href="cpl_core.mailing.html#cpl_core.mailing.email_client_service.EMailClient.send_mail">(cpl_core.mailing.email_client_service.EMailClient method)</a>
</li>
</ul></li>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_abc.SequenceABC">SequenceABC (class in cpl_query.base.sequence_abc)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_values.SequenceValues">SequenceValues (class in cpl_query.base.sequence_values)</a>
</li>
<li><a href="cpl_core.database.connection.html#cpl_core.database.connection.database_connection.DatabaseConnection.server">server (cpl_core.database.connection.database_connection.DatabaseConnection property)</a>
<ul>
@ -2977,8 +2941,6 @@
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="cpl_query.enumerable.html#cpl_query.enumerable.enumerable_abc.EnumerableABC.set_remove_error_check">set_remove_error_check() (cpl_query.enumerable.enumerable_abc.EnumerableABC method)</a>
</li>
<li><a href="cpl_core.environment.html#cpl_core.environment.application_environment.ApplicationEnvironment.set_runtime_directory">set_runtime_directory() (cpl_core.environment.application_environment.ApplicationEnvironment method)</a>
<ul>
@ -3120,11 +3082,7 @@
</li>
</ul></li>
<li><a href="cpl_core.configuration.html#cpl_core.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum.to_list">to_list() (cpl_core.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum static method)</a>
<ul>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_abc.SequenceABC.to_list">(cpl_query.base.sequence_abc.SequenceABC method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="cpl_core.pipes.html#cpl_core.pipes.to_camel_case_pipe.ToCamelCasePipe">ToCamelCasePipe (class in cpl_core.pipes.to_camel_case_pipe)</a>
@ -3183,12 +3141,8 @@
</li>
<li><a href="cpl_translation.html#cpl_translation.translation_settings.TranslationSettings">TranslationSettings (class in cpl_translation.translation_settings)</a>
</li>
<li><a href="cpl_query.base.html#cpl_query.base.sequence_abc.SequenceABC.type">type (cpl_query.base.sequence_abc.SequenceABC property)</a>
<ul>
<li><a href="cpl_query.iterable.html#cpl_query.iterable.iterable_abc.IterableABC.type">(cpl_query.iterable.iterable_abc.IterableABC property)</a>
<li><a href="cpl_query.iterable.html#cpl_query.iterable.iterable_abc.IterableABC.type">type (cpl_query.iterable.iterable_abc.IterableABC property)</a>
</li>
</ul></li>
</ul></td>
</tr></table>

View File

@ -104,35 +104,42 @@
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.html">Tutorials</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.extend-application.html">Extend application</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-application.html#comming-soon">Comming soon</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-application.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.create-startup.html">Create startup class</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.create-startup.html#comming-soon">Comming soon</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.create-startup.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.extend-startup.html">Extend startup</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-startup.html#comming-soon">Comming soon</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-startup.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.appsettings.html">Using appsettings.json</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.appsettings.html#comming-soon">Comming soon</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.appsettings.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.console-arguments.html">Handle console arguments</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console-arguments.html#comming-soon">Comming soon</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console-arguments.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html#comming-soon">Comming soon</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html#comming-soon">Comming soon</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.mail.html">Send mails</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html#comming-soon">Comming soon</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html#contents">Contents</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html#prerequisites">Prerequisites</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html#cpl-generate-schematics">cpl generate schematics</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html#cpl-new-project-types">cpl new project types</a></li>
</ul>
</li>
</ul>

View File

@ -98,35 +98,42 @@
</li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.html">Tutorials</a><ul>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-application.html">Extend application</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.extend-application.html#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.extend-application.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.create-startup.html">Create startup class</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.create-startup.html#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.create-startup.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-startup.html">Extend startup</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.extend-startup.html#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.extend-startup.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.appsettings.html">Using appsettings.json</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.appsettings.html#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.appsettings.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console-arguments.html">Handle console arguments</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.console-arguments.html#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.console-arguments.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.console.html#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.console.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.logging.html#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.logging.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.mail.html#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.mail.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a><ul>
<li class="toctree-l4"><a class="reference internal" href="tutorials.templating.html#contents">Contents</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.templating.html#prerequisites">Prerequisites</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.templating.html#cpl-generate-schematics">cpl generate schematics</a></li>
<li class="toctree-l4"><a class="reference internal" href="tutorials.templating.html#cpl-new-project-types">cpl new project types</a></li>
</ul>
</li>
</ul>
@ -407,8 +414,8 @@
<li class="toctree-l3"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.ordered_queryable">cpl_query.base.ordered_queryable</a></li>
<li class="toctree-l3"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.ordered_queryable_abc">cpl_query.base.ordered_queryable_abc</a></li>
<li class="toctree-l3"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.queryable_abc">cpl_query.base.queryable_abc</a></li>
<li class="toctree-l3"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.sequence_abc">cpl_query.base.sequence_abc</a></li>
<li class="toctree-l3"><a class="reference internal" href="cpl_query.base.html#module-cpl_query.base.sequence_values">cpl_query.base.sequence_values</a></li>
<li class="toctree-l3"><a class="reference internal" href="cpl_query.base.html#cpl-query-base-sequence-abc">cpl_query.base.sequence_abc</a></li>
<li class="toctree-l3"><a class="reference internal" href="cpl_query.base.html#cpl-query-base-sequence-values">cpl_query.base.sequence_values</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="cpl_query.enumerable.html">cpl_query.enumerable</a><ul>

Binary file not shown.

View File

@ -731,16 +731,6 @@
<td>&#160;&#160;&#160;
<a href="cpl_query.base.html#module-cpl_query.base.queryable_abc"><code class="xref">cpl_query.base.queryable_abc</code></a></td><td>
<em></em></td></tr>
<tr class="cg-3">
<td></td>
<td>&#160;&#160;&#160;
<a href="cpl_query.base.html#module-cpl_query.base.sequence_abc"><code class="xref">cpl_query.base.sequence_abc</code></a></td><td>
<em></em></td></tr>
<tr class="cg-3">
<td></td>
<td>&#160;&#160;&#160;
<a href="cpl_query.base.html#module-cpl_query.base.sequence_values"><code class="xref">cpl_query.base.sequence_values</code></a></td><td>
<em></em></td></tr>
<tr class="cg-3">
<td></td>
<td>&#160;&#160;&#160;

File diff suppressed because one or more lines are too long

View File

@ -48,13 +48,14 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.create-startup.html">Create startup class</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-startup.html">Extend startup</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Using appsettings.json</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console-arguments.html">Handle console arguments</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -95,8 +96,8 @@
<section id="using-appsettings-json">
<h1>Using appsettings.json<a class="headerlink" href="#using-appsettings-json" title="Permalink to this heading"></a></h1>
<section id="comming-soon">
<h2>Comming soon<a class="headerlink" href="#comming-soon" title="Permalink to this heading"></a></h2>
<section id="coming-soon">
<h2>Coming soon<a class="headerlink" href="#coming-soon" title="Permalink to this heading"></a></h2>
</section>
</section>

View File

@ -49,12 +49,13 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-startup.html">Extend startup</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.appsettings.html">Using appsettings.json</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Handle console arguments</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -95,8 +96,8 @@
<section id="handle-console-arguments">
<h1>Handle console arguments<a class="headerlink" href="#handle-console-arguments" title="Permalink to this heading"></a></h1>
<section id="comming-soon">
<h2>Comming soon<a class="headerlink" href="#comming-soon" title="Permalink to this heading"></a></h2>
<section id="coming-soon">
<h2>Coming soon<a class="headerlink" href="#coming-soon" title="Permalink to this heading"></a></h2>
</section>
</section>

View File

@ -50,11 +50,12 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.appsettings.html">Using appsettings.json</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console-arguments.html">Handle console arguments</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Use cpl_core.console.Console</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -95,8 +96,8 @@
<section id="use-cpl-core-console-console">
<h1>Use cpl_core.console.Console<a class="headerlink" href="#use-cpl-core-console-console" title="Permalink to this heading"></a></h1>
<section id="comming-soon">
<h2>Comming soon<a class="headerlink" href="#comming-soon" title="Permalink to this heading"></a></h2>
<section id="coming-soon">
<h2>Coming soon<a class="headerlink" href="#coming-soon" title="Permalink to this heading"></a></h2>
</section>
</section>

View File

@ -46,7 +46,7 @@
<li class="toctree-l2 current"><a class="reference internal" href="tutorials.html">Tutorials</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-application.html">Extend application</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Create startup class</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-startup.html">Extend startup</a></li>
@ -55,6 +55,7 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -95,8 +96,8 @@
<section id="create-startup-class">
<h1>Create startup class<a class="headerlink" href="#create-startup-class" title="Permalink to this heading"></a></h1>
<section id="comming-soon">
<h2>Comming soon<a class="headerlink" href="#comming-soon" title="Permalink to this heading"></a></h2>
<section id="coming-soon">
<h2>Coming soon<a class="headerlink" href="#coming-soon" title="Permalink to this heading"></a></h2>
</section>
</section>

View File

@ -45,7 +45,7 @@
<li class="toctree-l2"><a class="reference internal" href="setup.html">Setting up the local environment and workspace</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="tutorials.html">Tutorials</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">Extend application</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.create-startup.html">Create startup class</a></li>
@ -55,6 +55,7 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -95,8 +96,8 @@
<section id="extend-application">
<h1>Extend application<a class="headerlink" href="#extend-application" title="Permalink to this heading"></a></h1>
<section id="comming-soon">
<h2>Comming soon<a class="headerlink" href="#comming-soon" title="Permalink to this heading"></a></h2>
<section id="coming-soon">
<h2>Coming soon<a class="headerlink" href="#coming-soon" title="Permalink to this heading"></a></h2>
</section>
</section>

View File

@ -47,7 +47,7 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-application.html">Extend application</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.create-startup.html">Create startup class</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Extend startup</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.appsettings.html">Using appsettings.json</a></li>
@ -55,6 +55,7 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -95,8 +96,8 @@
<section id="extend-startup">
<h1>Extend startup<a class="headerlink" href="#extend-startup" title="Permalink to this heading"></a></h1>
<section id="comming-soon">
<h2>Comming soon<a class="headerlink" href="#comming-soon" title="Permalink to this heading"></a></h2>
<section id="coming-soon">
<h2>Coming soon<a class="headerlink" href="#coming-soon" title="Permalink to this heading"></a></h2>
</section>
</section>

View File

@ -52,6 +52,7 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -94,35 +95,42 @@
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="tutorials.extend-application.html">Extend application</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.extend-application.html#comming-soon">Comming soon</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.extend-application.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.create-startup.html">Create startup class</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.create-startup.html#comming-soon">Comming soon</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.create-startup.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.extend-startup.html">Extend startup</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.extend-startup.html#comming-soon">Comming soon</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.extend-startup.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.appsettings.html">Using appsettings.json</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.appsettings.html#comming-soon">Comming soon</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.appsettings.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.console-arguments.html">Handle console arguments</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.console-arguments.html#comming-soon">Comming soon</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.console-arguments.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.console.html#comming-soon">Comming soon</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.console.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.logging.html#comming-soon">Comming soon</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.logging.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.mail.html">Send mails</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.mail.html#comming-soon">Comming soon</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.mail.html#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a><ul>
<li class="toctree-l2"><a class="reference internal" href="tutorials.templating.html#contents">Contents</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.templating.html#prerequisites">Prerequisites</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.templating.html#cpl-generate-schematics">cpl generate schematics</a></li>
<li class="toctree-l2"><a class="reference internal" href="tutorials.templating.html#cpl-new-project-types">cpl new project types</a></li>
</ul>
</li>
</ul>

View File

@ -51,10 +51,11 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.console-arguments.html">Handle console arguments</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Use builtin logger</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -95,8 +96,8 @@
<section id="use-builtin-logger">
<h1>Use builtin logger<a class="headerlink" href="#use-builtin-logger" title="Permalink to this heading"></a></h1>
<section id="comming-soon">
<h2>Comming soon<a class="headerlink" href="#comming-soon" title="Permalink to this heading"></a></h2>
<section id="coming-soon">
<h2>Coming soon<a class="headerlink" href="#coming-soon" title="Permalink to this heading"></a></h2>
</section>
</section>

View File

@ -19,7 +19,7 @@
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Contributing to CPL" href="contributing.html" />
<link rel="next" title="Using cpl g &amp; cpl n templating" href="tutorials.templating.html" />
<link rel="prev" title="Use builtin logger" href="tutorials.logging.html" />
</head>
@ -52,9 +52,10 @@
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Send mails</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#comming-soon">Comming soon</a></li>
<li class="toctree-l4"><a class="reference internal" href="#coming-soon">Coming soon</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.templating.html">Using cpl g &amp; cpl n templating</a></li>
</ul>
</li>
</ul>
@ -95,8 +96,8 @@
<section id="send-mails">
<h1>Send mails<a class="headerlink" href="#send-mails" title="Permalink to this heading"></a></h1>
<section id="comming-soon">
<h2>Comming soon<a class="headerlink" href="#comming-soon" title="Permalink to this heading"></a></h2>
<section id="coming-soon">
<h2>Coming soon<a class="headerlink" href="#coming-soon" title="Permalink to this heading"></a></h2>
</section>
</section>
@ -105,7 +106,7 @@
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="tutorials.logging.html" class="btn btn-neutral float-left" title="Use builtin logger" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="contributing.html" class="btn btn-neutral float-right" title="Contributing to CPL" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="tutorials.templating.html" class="btn btn-neutral float-right" title="Using cpl g &amp; cpl n templating" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@ -0,0 +1,304 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Using cpl g &amp; cpl n templating &mdash; Common Python Library documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Contributing to CPL" href="contributing.html" />
<link rel="prev" title="Send mails" href="tutorials.mail.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> Common Python Library
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="introduction.html">Introduction to the CPL Docs</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="getting_started.html">Getting started</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="quickstart.html">Getting started with CPL</a></li>
<li class="toctree-l2"><a class="reference internal" href="setup.html">Setting up the local environment and workspace</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="tutorials.html">Tutorials</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-application.html">Extend application</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.create-startup.html">Create startup class</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.extend-startup.html">Extend startup</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.appsettings.html">Using appsettings.json</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console-arguments.html">Handle console arguments</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.console.html">Use cpl_core.console.Console</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.logging.html">Use builtin logger</a></li>
<li class="toctree-l3"><a class="reference internal" href="tutorials.mail.html">Send mails</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Using cpl g &amp; cpl n templating</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#contents">Contents</a></li>
<li class="toctree-l4"><a class="reference internal" href="#prerequisites">Prerequisites</a></li>
<li class="toctree-l4"><a class="reference internal" href="#cpl-generate-schematics">cpl generate schematics</a></li>
<li class="toctree-l4"><a class="reference internal" href="#cpl-new-project-types">cpl new project types</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing to CPL</a></li>
<li class="toctree-l1"><a class="reference internal" href="cpl_cli.html">CLI reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="cpl_core.html">API reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="cpl_discord.html">Discord reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="cpl_query.html">Query reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="cpl_translation.html">Translation reference</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Common Python Library</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="getting_started.html">Getting started</a> &raquo;</li>
<li><a href="tutorials.html">Tutorials</a> &raquo;</li>
<li>Using cpl g &amp; cpl n templating</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/tutorials.templating.md.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="using-cpl-g-cpl-n-templating">
<h1>Using cpl g &amp; cpl n templating<a class="headerlink" href="#using-cpl-g-cpl-n-templating" title="Permalink to this heading"></a></h1>
<section id="contents">
<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><span class="xref myst">Prerequisites</span></p></li>
<li><p><span class="xref myst">Generate schematics</span></p></li>
<li><p><span class="xref myst">Project types</span></p></li>
</ul>
</section>
<section id="prerequisites">
<h2>Prerequisites<a class="headerlink" href="#prerequisites" title="Permalink to this heading"></a></h2>
<p>Create a folder called <code class="docutils literal notranslate"><span class="pre">.cpl</span></code></p>
</section>
<section id="cpl-generate-schematics">
<h2>cpl generate schematics<a class="headerlink" href="#cpl-generate-schematics" title="Permalink to this heading"></a></h2>
<p>Create a file which begins with <code class="docutils literal notranslate"><span class="pre">schematic_your_schematic.py</span></code>.
A schematic template is detected by starting with <code class="docutils literal notranslate"><span class="pre">schematic_</span></code> and endswith <code class="docutils literal notranslate"><span class="pre">.py</span></code>.</p>
<p>You should replace <code class="docutils literal notranslate"><span class="pre">your_schematic</span></code> with an appropriate name of your schematic. For example, we will choose <code class="docutils literal notranslate"><span class="pre">Enum</span></code>.
Attention: It is important that you do not overwrite templates by creating a file or class with the same name.</p>
<p>In the template create a class with the name of your schematic. For example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">cpl_cli.abc.generate_schematic_abc</span> <span class="kn">import</span> <span class="n">GenerateSchematicABC</span>
<span class="k">class</span> <span class="nc">Enum</span><span class="p">(</span><span class="n">GenerateSchematicABC</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">GenerateSchematicABC</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_code</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">textwrap</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">textwrap</span><span class="o">.</span><span class="n">dedent</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
<span class="s2"> from enum import Enum</span>
<span class="s2"> </span>
<span class="s2"> </span>
<span class="s2"> class $Name(Enum):</span>
<span class="s2"> </span>
<span class="s2"> atr = 0</span>
<span class="s2"> &quot;&quot;&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">build_code_str</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">Name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_class_name</span><span class="p">)</span>
<span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
<span class="n">GenerateSchematicABC</span><span class="o">.</span><span class="n">register</span><span class="p">(</span>
<span class="bp">cls</span><span class="p">,</span>
<span class="s1">&#39;enum&#39;</span><span class="p">,</span>
<span class="p">[</span><span class="s1">&#39;e&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">]</span>
<span class="p">)</span>
</pre></div>
</div>
<p>You can test it by calling <code class="docutils literal notranslate"><span class="pre">cpl</span> <span class="pre">g</span> <span class="pre">--help</span></code> your schematic should be listed as available.</p>
</section>
<section id="cpl-new-project-types">
<h2>cpl new project types<a class="headerlink" href="#cpl-new-project-types" title="Permalink to this heading"></a></h2>
<p>The project templating is a little more complex and is therefore divided into several files.
First of all, for information, it is very important not to overwrite any existing files or classes!</p>
<p>Template structure explained by the example of the internal type <code class="docutils literal notranslate"><span class="pre">console</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">-</span> <span class="n">project_console</span><span class="o">.</span><span class="n">py</span>
<span class="o">-</span> <span class="n">project_file_license</span><span class="o">.</span><span class="n">py</span>
<span class="o">-</span> <span class="n">project_file_appsettings</span><span class="o">.</span><span class="n">py</span>
<span class="o">-</span> <span class="n">project_file</span><span class="o">.</span><span class="n">py</span>
<span class="o">-</span> <span class="n">project_file_readme</span><span class="o">.</span><span class="n">py</span>
<span class="o">-</span> <span class="n">project_file_code_main</span><span class="o">.</span><span class="n">py</span>
<span class="o">-</span> <span class="n">project_file_code_startup</span><span class="o">.</span><span class="n">py</span>
<span class="o">-</span> <span class="n">project_file_code_application</span><span class="o">.</span><span class="n">py</span>
</pre></div>
</div>
<p>Here the template <code class="docutils literal notranslate"><span class="pre">project_console.py</span></code> defines how a console project has to look like when it is generated. Here is the code to illustrate this:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">cpl_cli.abc.project_type_abc</span> <span class="kn">import</span> <span class="n">ProjectTypeABC</span>
<span class="kn">from</span> <span class="nn">cpl_cli.configuration</span> <span class="kn">import</span> <span class="n">WorkspaceSettings</span>
<span class="kn">from</span> <span class="nn">cpl_core.utils</span> <span class="kn">import</span> <span class="n">String</span>
<span class="k">class</span> <span class="nc">Console</span><span class="p">(</span><span class="n">ProjectTypeABC</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">base_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">project_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">workspace</span><span class="p">:</span> <span class="n">WorkspaceSettings</span><span class="p">,</span>
<span class="n">use_application_api</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
<span class="n">use_startup</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
<span class="n">use_service_providing</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
<span class="n">use_async</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
<span class="n">project_file_data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
<span class="p">):</span>
<span class="kn">from</span> <span class="nn">project_file</span> <span class="kn">import</span> <span class="n">ProjectFile</span>
<span class="kn">from</span> <span class="nn">project_file_appsettings</span> <span class="kn">import</span> <span class="n">ProjectFileAppsettings</span>
<span class="kn">from</span> <span class="nn">project_file_code_application</span> <span class="kn">import</span> <span class="n">ProjectFileApplication</span>
<span class="kn">from</span> <span class="nn">project_file_code_main</span> <span class="kn">import</span> <span class="n">ProjectFileMain</span>
<span class="kn">from</span> <span class="nn">project_file_code_startup</span> <span class="kn">import</span> <span class="n">ProjectFileStartup</span>
<span class="kn">from</span> <span class="nn">project_file_readme</span> <span class="kn">import</span> <span class="n">ProjectFileReadme</span>
<span class="kn">from</span> <span class="nn">project_file_license</span> <span class="kn">import</span> <span class="n">ProjectFileLicense</span>
<span class="kn">from</span> <span class="nn">schematic_init</span> <span class="kn">import</span> <span class="n">Init</span>
<span class="n">ProjectTypeABC</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">base_path</span><span class="p">,</span> <span class="n">project_name</span><span class="p">,</span> <span class="n">workspace</span><span class="p">,</span> <span class="n">use_application_api</span><span class="p">,</span> <span class="n">use_startup</span><span class="p">,</span> <span class="n">use_service_providing</span><span class="p">,</span> <span class="n">use_async</span><span class="p">,</span> <span class="n">project_file_data</span><span class="p">)</span>
<span class="n">project_path</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">base_path</span><span class="si">}{</span><span class="n">String</span><span class="o">.</span><span class="n">convert_to_snake_case</span><span class="p">(</span><span class="n">project_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span><span class="si">}</span><span class="s1">/&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">ProjectFile</span><span class="p">(</span><span class="n">project_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">project_path</span><span class="p">,</span> <span class="n">project_file_data</span><span class="p">))</span>
<span class="k">if</span> <span class="n">workspace</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">ProjectFileLicense</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">ProjectFileReadme</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">Init</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;init&#39;</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">base_path</span><span class="si">}</span><span class="s1">tests/&#39;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">Init</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;init&#39;</span><span class="p">,</span> <span class="n">project_path</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">ProjectFileAppsettings</span><span class="p">(</span><span class="n">project_path</span><span class="p">))</span>
<span class="k">if</span> <span class="n">use_application_api</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">ProjectFileApplication</span><span class="p">(</span><span class="n">project_path</span><span class="p">,</span> <span class="n">use_application_api</span><span class="p">,</span> <span class="n">use_startup</span><span class="p">,</span> <span class="n">use_service_providing</span><span class="p">,</span> <span class="n">use_async</span><span class="p">))</span>
<span class="k">if</span> <span class="n">use_startup</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">ProjectFileStartup</span><span class="p">(</span><span class="n">project_path</span><span class="p">,</span> <span class="n">use_application_api</span><span class="p">,</span> <span class="n">use_startup</span><span class="p">,</span> <span class="n">use_service_providing</span><span class="p">,</span> <span class="n">use_async</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_template</span><span class="p">(</span><span class="n">ProjectFileMain</span><span class="p">(</span><span class="n">project_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">project_path</span><span class="p">,</span> <span class="n">use_application_api</span><span class="p">,</span> <span class="n">use_startup</span><span class="p">,</span> <span class="n">use_service_providing</span><span class="p">,</span> <span class="n">use_async</span><span class="p">))</span>
</pre></div>
</div>
<p>The class must be named exactly as the project type should be named. It is also checked on the initial letter of the class as alias.
Now create a class for normal files which inherits from <code class="docutils literal notranslate"><span class="pre">FileTemplateABC</span></code> and a class for code files which inherits from <code class="docutils literal notranslate"><span class="pre">CodeFileTemplateABC</span></code>.</p>
<p>For example:</p>
<p>project_file_code_startup.py:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">cpl_cli.abc.code_file_template_abc</span> <span class="kn">import</span> <span class="n">CodeFileTemplateABC</span>
<span class="k">class</span> <span class="nc">ProjectFileStartup</span><span class="p">(</span><span class="n">CodeFileTemplateABC</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">use_application_api</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">use_startup</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">use_service_providing</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">use_async</span><span class="p">:</span> <span class="nb">bool</span><span class="p">):</span>
<span class="n">CodeFileTemplateABC</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;startup&#39;</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">use_application_api</span><span class="p">,</span> <span class="n">use_startup</span><span class="p">,</span> <span class="n">use_service_providing</span><span class="p">,</span> <span class="n">use_async</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_code</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">textwrap</span>
<span class="k">return</span> <span class="n">textwrap</span><span class="o">.</span><span class="n">dedent</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
<span class="s2"> from cpl_core.application import StartupABC</span>
<span class="s2"> from cpl_core.configuration import ConfigurationABC</span>
<span class="s2"> from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC</span>
<span class="s2"> from cpl_core.environment import ApplicationEnvironment</span>
<span class="s2"> </span>
<span class="s2"> </span>
<span class="s2"> class Startup(StartupABC):</span>
<span class="s2"> </span>
<span class="s2"> def __init__(self):</span>
<span class="s2"> StartupABC.__init__(self)</span>
<span class="s2"> </span>
<span class="s2"> def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -&gt; ConfigurationABC:</span>
<span class="s2"> return configuration</span>
<span class="s2"> </span>
<span class="s2"> def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -&gt; ServiceProviderABC:</span>
<span class="s2"> return services.build_service_provider()</span>
<span class="s2"> &quot;&quot;&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>project_file.py:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">json</span>
<span class="kn">from</span> <span class="nn">cpl_cli.abc.file_template_abc</span> <span class="kn">import</span> <span class="n">FileTemplateABC</span>
<span class="k">class</span> <span class="nc">ProjectFile</span><span class="p">(</span><span class="n">FileTemplateABC</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">code</span><span class="p">:</span> <span class="nb">dict</span><span class="p">):</span>
<span class="n">FileTemplateABC</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s1">.json&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_code</span> <span class="o">=</span> <span class="n">code</span>
<span class="k">def</span> <span class="nf">get_code</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_code</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="tutorials.mail.html" class="btn btn-neutral float-left" title="Send mails" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="contributing.html" class="btn btn-neutral float-right" title="Contributing to CPL" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021 - 2023, Sven Heidemann.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@ -16,6 +16,8 @@ cpl **G** *&lt;schematic&gt;* *&lt;name&gt;*
Generates files based on a schematic.
You can define custom schematics by creating templates in a ```.cpl``` folder.
## Arguments
| Argument | Description | Value type |
@ -26,14 +28,16 @@ Generates files based on a schematic.
## Schematics
| Schematic | Description | Arguments |
|-----------------|:-------------------------------------:|:------------:|
| ```abc``` | Abstract base class | ```<name>``` |
| ```class``` | Class | ```<name>``` |
| ```enum``` | Enum class | ```<name>``` |
| ```pipe``` | Pipe class | ```<name>``` |
| ```service``` | Service class | ```<name>``` |
| ```settings``` | [Configmodel](cpl_core.configuration) | ```<name>``` |
| ```test``` | Test class | ```<name>``` |
| ```thread``` | Thread class | ```<name>``` |
| ```validator``` | Validator class | ```<name>``` |
| Schematic | Description | Arguments |
|-----------------|:--------------------------------------:|:------------:|
| ```abc``` | Abstract base class | ```<name>``` |
| ```class``` | Class | ```<name>``` |
| ```enum``` | Enum class | ```<name>``` |
| ```pipe``` | Pipe class | ```<name>``` |
| ```service``` | Service class | ```<name>``` |
| ```settings``` | [Configmodel](cpl_core.configuration) | ```<name>``` |
| ```test``` | Test class | ```<name>``` |
| ```thread``` | Thread class | ```<name>``` |
| ```validator``` | Validator class | ```<name>``` |
| ```command``` | Discord bot command class | ```<name>``` |
| ```event``` | Discord bot event class | ```<name>``` |

View File

@ -16,6 +16,8 @@ cpl **N** *&lt;type&gt;* *&lt;name&gt;*
Generates a workspace and initial project or add a project to workspace.
You can define custom project types by creating templates in a ```.cpl``` folder.
If the command is running in a CPL workspace, it will add the new project to the workspace.
| Argument | Description | Value type |

View File

@ -1,3 +1,3 @@
# Using appsettings.json
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Handle console arguments
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Use cpl_core.console.Console
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Create startup class
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Extend application
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Extend startup
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Use builtin logger
## Comming soon
## Coming soon

View File

@ -1,3 +1,3 @@
# Send mails
## Comming soon
## Coming soon

View File

@ -12,3 +12,4 @@ Tutorials
tutorials.console
tutorials.logging
tutorials.mail
tutorials.templating

View File

@ -0,0 +1,181 @@
# Using cpl g & cpl n templating
## Contents
- [Prerequisites](#prerequisites)
- [Generate schematics](#cpl-generate-scmatics)
- [Project types](#cpl-new-project-types)
## Prerequisites
Create a folder called ```.cpl```
## cpl generate schematics
Create a file which begins with ```schematic_your_schematic.py```.
A schematic template is detected by starting with ```schematic_``` and endswith ```.py```.
You should replace ```your_schematic``` with an appropriate name of your schematic. For example, we will choose ```Enum```.
Attention: It is important that you do not overwrite templates by creating a file or class with the same name.
In the template create a class with the name of your schematic. For example:
```python
from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC
class Enum(GenerateSchematicABC):
def __init__(self, *args: str):
GenerateSchematicABC.__init__(self, *args)
def get_code(self) -> str:
import textwrap
code = textwrap.dedent("""\
from enum import Enum
class $Name(Enum):
atr = 0
""")
return self.build_code_str(code, Name=self._class_name)
@classmethod
def register(cls):
GenerateSchematicABC.register(
cls,
'enum',
['e', 'E']
)
```
You can test it by calling ```cpl g --help``` your schematic should be listed as available.
## cpl new project types
The project templating is a little more complex and is therefore divided into several files.
First of all, for information, it is very important not to overwrite any existing files or classes!
Template structure explained by the example of the internal type ```console```:
```
- project_console.py
- project_file_license.py
- project_file_appsettings.py
- project_file.py
- project_file_readme.py
- project_file_code_main.py
- project_file_code_startup.py
- project_file_code_application.py
```
Here the template ```project_console.py``` defines how a console project has to look like when it is generated. Here is the code to illustrate this:
```python
from cpl_cli.abc.project_type_abc import ProjectTypeABC
from cpl_cli.configuration import WorkspaceSettings
from cpl_core.utils import String
class Console(ProjectTypeABC):
def __init__(
self,
base_path: str,
project_name: str,
workspace: WorkspaceSettings,
use_application_api: bool,
use_startup: bool,
use_service_providing: bool,
use_async: bool,
project_file_data: dict,
):
from project_file import ProjectFile
from project_file_appsettings import ProjectFileAppsettings
from project_file_code_application import ProjectFileApplication
from project_file_code_main import ProjectFileMain
from project_file_code_startup import ProjectFileStartup
from project_file_readme import ProjectFileReadme
from project_file_license import ProjectFileLicense
from schematic_init import Init
ProjectTypeABC.__init__(self, base_path, project_name, workspace, use_application_api, use_startup, use_service_providing, use_async, project_file_data)
project_path = f'{base_path}{String.convert_to_snake_case(project_name.split("/")[-1])}/'
self.add_template(ProjectFile(project_name.split('/')[-1], project_path, project_file_data))
if workspace is None:
self.add_template(ProjectFileLicense(''))
self.add_template(ProjectFileReadme(''))
self.add_template(Init('', 'init', f'{base_path}tests/'))
self.add_template(Init('', 'init', project_path))
self.add_template(ProjectFileAppsettings(project_path))
if use_application_api:
self.add_template(ProjectFileApplication(project_path, use_application_api, use_startup, use_service_providing, use_async))
if use_startup:
self.add_template(ProjectFileStartup(project_path, use_application_api, use_startup, use_service_providing, use_async))
self.add_template(ProjectFileMain(project_name.split('/')[-1], project_path, use_application_api, use_startup, use_service_providing, use_async))
```
The class must be named exactly as the project type should be named. It is also checked on the initial letter of the class as alias.
Now create a class for normal files which inherits from ```FileTemplateABC``` and a class for code files which inherits from ```CodeFileTemplateABC```.
For example:
project_file_code_startup.py:
```python
from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC
class ProjectFileStartup(CodeFileTemplateABC):
def __init__(self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool):
CodeFileTemplateABC.__init__(self, 'startup', path, '', use_application_api, use_startup, use_service_providing, use_async)
def get_code(self) -> str:
import textwrap
return textwrap.dedent("""\
from cpl_core.application import StartupABC
from cpl_core.configuration import ConfigurationABC
from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC
from cpl_core.environment import ApplicationEnvironment
class Startup(StartupABC):
def __init__(self):
StartupABC.__init__(self)
def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC:
return configuration
def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC:
return services.build_service_provider()
""")
```
project_file.py:
```python
import json
from cpl_cli.abc.file_template_abc import FileTemplateABC
class ProjectFile(FileTemplateABC):
def __init__(self, name: str, path: str, code: dict):
FileTemplateABC.__init__(self, '', path, '{}')
self._name = f'{name}.json'
self._code = code
def get_code(self) -> str:
return json.dumps(self._code, indent=2)
```

View File

@ -1,5 +1,3 @@
import os
from cpl_cli.abc.project_type_abc import ProjectTypeABC
from cpl_cli.configuration import WorkspaceSettings
from cpl_core.utils import String

View File

@ -1,5 +1,3 @@
import textwrap
from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC
@ -9,16 +7,16 @@ class Enum(GenerateSchematicABC):
GenerateSchematicABC.__init__(self, *args)
def get_code(self) -> str:
code = """\
import textwrap
code = textwrap.dedent("""\
from enum import Enum
class $Name(Enum):
atr = 0
"""
x = self.build_code_str(code, Name=self._class_name)
return x
""")
return self.build_code_str(code, Name=self._class_name)
@classmethod
def register(cls):

View File

@ -22,7 +22,7 @@ from cpl_core.dependency_injection.service_provider_abc import ServiceProviderAB
from cpl_core.environment.application_environment import ApplicationEnvironment
from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
from cpl_core.environment.environment_name_enum import EnvironmentNameEnum
from cpl_core.typing import T
from cpl_core.type import T
class Configuration(ConfigurationABC):

View File

@ -6,7 +6,7 @@ from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC
from cpl_core.configuration.argument_abc import ArgumentABC
from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum
from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
from cpl_core.typing import T
from cpl_core.type import T
class ConfigurationABC(ABC):

View File

@ -16,22 +16,23 @@
"LicenseName": "MIT",
"LicenseDescription": "MIT, see LICENSE for more details.",
"Dependencies": [
"art==5.7",
"colorama==0.4.5",
"art==5.8",
"colorama==0.4.6",
"mysql-connector==2.2.9",
"psutil==5.9.2",
"packaging==21.3",
"psutil==5.9.4",
"packaging==22.0",
"pynput==1.7.6",
"setuptools==65.3.0",
"tabulate==0.8.10",
"termcolor==1.1.0",
"watchdog==2.1.9",
"wheel==0.37.1"
"setuptools==65.6.3",
"tabulate==0.9.0",
"termcolor==2.1.1",
"watchdog==2.2.0",
"wheel==0.38.4"
],
"DevDependencies": [
"sphinx==5.0.2",
"sphinx_rtd_theme==1.0.0",
"myst_parser==0.18.0"
"Sphinx==5.0.2",
"sphinx-rtd-theme==1.0.0",
"myst-parser==0.18.0",
"twine==4.0.2"
],
"PythonVersion": ">=3.10",
"PythonPath": {},

View File

@ -65,7 +65,7 @@ class Pip:
"""
result = None
with suppress(Exception):
args = [cls._executable, "-m", "pip", "freeze"]
args = [cls._executable, "-m", "pip", "freeze", "--all"]
result = subprocess.check_output(
args,

View File

@ -16,7 +16,7 @@
"LicenseName": "MIT",
"LicenseDescription": "MIT, see LICENSE for more details.",
"Dependencies": [
"cpl-core>=2022.12.0"
"cpl-core==2022.12.0"
],
"PythonVersion": ">=3.10.4",
"PythonPath": {},

View File

@ -16,13 +16,13 @@
"LicenseName": "MIT",
"LicenseDescription": "MIT, see LICENSE for more details.",
"Dependencies": [
"cpl-core>=2022.12.0",
"gitpython==3.1.27"
"cpl-core==2022.12.0",
"GitPython==3.1.29"
],
"DevDependencies": [],
"PythonVersion": ">=3.10.4",
"PythonPath": {},
"Classifiers": [],
"DevDependencies": []
"Classifiers": []
},
"BuildSettings": {
"ProjectType": "console",