Use cases¶
Generally, you will use the command-line interface (CLI) of the pymetacode package, i.e. typing commands on a terminal, probably from within your IDE while programming. Hence, the use cases described here focus entirely on this user interface.
Of course, you could use the API of the actual code creating code that is contained in the pymetacode.coding
module. However, this is only useful for rather special purposes. For details, see the API documentation.
General usage¶
The package provides a command pymeta
(by means of a console-script entry point) available from the command line given the pymetacode package is installed. This command comes with built-in help and follows a rather simple scheme:
pymeta <command> <option1> ...
The number of options available and required depends on the type of command used. The design goal is an intuitive and robust user interface with feedback and help built-in and a “grammar” that feels natural.
Getting help for a command¶
If you are in doubt how to use the pymeta
command, we’ve got you covered:
pymeta
pymeta help
are two equivalent commands that display some general help. The result of either of these commands looks like this:
General usage:
pymeta <command> <option1> ...
Possible commands are:
write
add
create
help
To get more details for a command, type:
pymeta help <command>
Furthermore, you can get help for particular commands, too:
pymeta help create
would provide you with help specifically for the “create” command, like this:
Usage for create command:
pymeta create package from <config>
Prerequisite for this command is an existing configuration stored in
the file given as <config> (a YAML file). Use
pymeta write config to <filename>
to create a config file in YAML format and populate the values
according to your needs.
Furthermore, if you make a mistake, usually, the context-specific help will be displayed for you as well.
Creating a package¶
The first step when creating a new package is to write a config file that can be filled with sensible content afterwards:
pymeta write config to mypackage_config.yaml
This would write the default configuration to “mypackage_config.yaml”. You may want to have a look at the details of the configuration file. Change all values in this file according to your needs. Afterwards, you can create the basic structure of your new project:
pymeta create package from mypackage_config.yaml
Now, you have a complete package that is installable and deployable. If you would like to know what directories and files have been created, have a look at the package directory structure. Next is to add some modules to your newly created package.
But before you add modules to your new package, you may want to make yourself familiar with the (helper) files created and double-check that the CITATION.cff
file contains correct contents. In particular, check the author names in there, as the CITATION.cff
format separates given and family names, whereas setup.py
(and the pymetacode configuration file) do not. Furthermore, you may want to add your ORCID.
Hint
You can even use a lazy form of the first command, namely
pymeta write config
This will result in a configuration file with the default name package_config.yaml
.
Adding modules, classes, functions¶
All following commands need to be issued from within the root directory of your new package.
pymeta add module mymodule
will add a module “mymodule” to your package, together with a “test_mymodule” module in the “tests” subdirectory. And even better, the API documentation will be updated as well for you.
Time to add a class to your new module:
pymeta add class MyClass to mymodule
Here, again, the class will be added to “mymodule” and a test class added to “test_mymodule”. Similarly, you can add a function:
pymeta add function my_function to mymodule
Again, function and test class will be added to your package.
In both cases, class and function, a minimum documentation header will be created as well, just to make it easier to properly document your code.
Hint
All these commands work with (nested) subpackages as well. Just use the familiar dot notation for the module names, e.g. mysubpackage.mymodule
. For details on how to create subpackages, see below.
Adding subpackages¶
All following commands need to be issued from within the root directory of your new package.
pymeta add subpackage mysubpackage
will add a subpackage “mysubpackage” to your package, together with a “mysubpackage” directory in the “tests” subdirectory. And even better, the API documentation will be updated for you as well.
This works similarly for nested subpackages. However, note that you need to first create the intermediate subpackage(s). Hence, a possible sequence of commands would be:
pymeta add subpackage mysubpackage
pymeta add subpackage mysubpackage.mysubsubpackage
But why would one want to add nested subpackages? Suppose you had a rather complicated Python package in mind and wanted to separate functional and technical layers, with the former being the first line of organisation of your package. A typical layer structure for technical layers according to Jacobson would be “boundaries”, “controllers”, and “entities” (BCE). Hence, for each functional layer you would end up with (at least) three technical layers. All these could be modelled as subpackages in Python. In such cases, however, it might be sensible to import the facades of the individual functional layers to the main namespace of your package for easier access by the users.
Adding a GUI and GUI windows¶
All following commands need to be issued from within the root directory of your package.
pymeta add gui
will add the scaffold (directory structure, files, documentation, configuration in setup.py) necessary for adding a graphical user interface (GUI) to your package. Note that Qt6 and the PySide6 Qt bindings are used.
At the same time, a first window, named mainwindow
, will be added, together with a very basic template of the UI file used by the Qt Designer to layout your window.
Adding additional windows is as simple as
pymeta add window mysubwindow
As windows are always suffixed with “window”, you are not required to add the suffix “window”, but in case you do, it will be handled accordingly.
Hence, the same window as above will get added with the command
pymeta add window mysub
Therefore, use whichever way you are more comfortable with.
The same strategy applies for GUI widgets. To add a GUI widget, just type
pymeta add widget fancywidget
As widgets are always suffixed with “widget”, you are not required to add the suffix “widget”, but in case you do, it will be handled accordingly.
Hence, the same widget as above will get added with the command
pymeta add widget fancy
Therefore, use whichever way you are more comfortable with.
Again, if you want to add dialogs, follow the same pattern:
pymeta add dialog fancydialog
As dialogs are always suffixed with “dialog”, you are not required to add the suffix “dialog”, but in case you do, it will be handled accordingly.
Hence, the same dialog as above will get added with the command
pymeta add dialog fancy
Therefore, use whichever way you are more comfortable with.