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
**kwargs
like 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
ActorDiscoveryExecutionError
ActorInspectionFailedError
CannotConsumeErrorMessages
CommandDefinitionError
CommandError
CyclingDependenciesError
FrameworkInitializationError
InvalidTagDefinitionError
InvalidTopicDefinitionError
InvalidTopicItemError
LeappError
LeappRuntimeError
MissingActorAttributeError
ModelDefinitionError
ModuleNameAlreadyExistsError
MultipleActorsError
MultipleConfigActorsError
ProcessLockError
RepoItemPathDoesNotExistError
RepositoryConfigurationError
RequestStopAfterPhase
StopActorExecution
StopActorExecutionError
TagFilterUsageError
UnknownCommandError
UnsupportedDefinitionKindError
UsageError
WorkflowConfigNotAvailable
WrongAttributeTypeError
- leapp.snactor.fixture module
- Module contents