Welcome to developer documentation for Leapp!
Leapp is an OS and application modernization framework.
Note that if you are interested about documentation related to official leapp repositories and system in-place upgrades with leapp, the related documentation has been separated to https://leapp-repository.readthedocs.io/.
Note
The documentation is nowadays versioned where:
latest - reflects the current upstream development state based on latest commits
stable - refers to the latest released upstream version of leapp
vX.Y.Z - refers to a specific released upstream version of leapp
Contents:
- Building blocks and architecture
- Installation
- Tutorials
- Creating a new repository for actor development
- Creating your first actor
- Using messaging to send data between actors
- Asking user questions
- Linking repositories
- Working with workflows
- Workflow APIs
- Writing tests for actors
- Debugging actors
- How to deprecate entities in leapp?
- Best Practices for actor development
- Follow the contribution guidelines
- Avoid running code on a module level
- Avoid certain global imports
- Use the snactor tool for development
- Move generic functionality to libraries
- Discover standard library functions
- Prefer using stdlib functions over shell commands
- Utilize messages produced by existing actors
- Write unit testable code
- Do not introduce new dependencies
- Use convenience exceptions to stop the actor’s execution
- Use the LEAPP and LEAPP_DEVEL prefixes for new envars
- Tests for actors
- Libraries and API
- Packaging and dependencies
- Contributing to the Leapp project
- Follow Python coding guidelines
- 1. Avoid Inheriting from Multiple Classes
- 2. Avoid Operator Overloading
- 3. Avoid ‘In-Your-Face’ error/exception messages
- 4. Avoid
**kwargslike a plague - 5. Import things the right way
- 6. Avoid Using Assertions For Control Flow & Mutating Operations
- 7. Avoid Map, Reduce and Too Complex Comprehensions
- 8. Avoid Deeply Nested Block Scopes
- 9. Write Docstrings That Work Well With Tools
- 10. Avoid Shadowing Python Builtins
- 11. String Formatting
- 12. Docstrings
- 13. Underscore usage
- Follow best practices
- File naming convention
- Git Commit Messages
- Submitting a Pull Request
- Contact
- Follow Python coding guidelines
- Frequently Asked Questions
- What is Leapp?
- What is an actor and what does it do?
- When and why do I need to write an actor?
- How can I exchange any data between actors?
- What do I have to do in order to execute actor I just wrote?
- What should I do if I need to execute multiple actors? Can I somehow ensure the dependencies between them?
- How can I specify what run time dependencies will my actor have?
- How can I distinguish between actors that I depend on directly (I need to consume their output) and indirectly (I just need them to be executed as part of the upgrade as I don’t handle the upgrade of that specific piece)?
- Once I write an actor that consumes data from some other actors, how can I be sure that the format will not change on the producing side in the future?
- What are the best practices for writing actors?
- What are the requirements for actors to be accepted by upstream?
- How can I debug my actor? Is there a standard/supported way how to log and get logs from actors/channels?
- Are there some technical limitations for an actor? E.g. maximum time execution, size of the input/output, libraries I can use… In case there are, is it possible to specify that the actor needs e.g. longer time for execution?
- Are there some actions that are either forbidden or not recommended to be done in actors?
- I got an error about PES data/ Repositories mapping where I find such files?
- Python documentation for the leapp package
- Subpackages
- Submodules
- leapp.compat module
- leapp.config module
- leapp.exceptions module
ActorDiscoveryExecutionErrorActorInspectionFailedErrorCannotConsumeErrorMessagesCommandDefinitionErrorCommandErrorCyclingDependenciesErrorFrameworkInitializationErrorInvalidTagDefinitionErrorInvalidTopicDefinitionErrorInvalidTopicItemErrorLeappErrorLeappRuntimeErrorMissingActorAttributeErrorModelDefinitionErrorModuleNameAlreadyExistsErrorMultipleActorsErrorMultipleConfigActorsErrorProcessLockErrorRepoItemPathDoesNotExistErrorRepositoryConfigurationErrorRequestStopAfterPhaseStopActorExecutionStopActorExecutionErrorTagFilterUsageErrorUnknownCommandErrorUnsupportedDefinitionKindErrorUsageErrorWorkflowConfigNotAvailableWrongAttributeTypeError
- leapp.snactor.fixture module
- Module contents