aboutsummaryrefslogtreecommitdiff
path: root/libs/plugin_python/README.md
blob: 90853609e7f5888e21823ad4f465a3796f6f6d5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# ModOrganizer2 - Python Proxy

This repository contains the Python proxy plugin for ModOrganizer2.
The proxy plugin allow developers to write Python plugins for ModOrganizer2.

## Setup, build, tests

This repository is part of MO2 main repositories and should usually be build using
[`mob`](https://github.com/ModOrganizer2/mob).

## Organization

This repositories contains 5 sub-projects in `src`.
The interface between Python and C++ is done using the
[`pybind11`](https://github.com/pybind/pybind11) library.
See the `README` in the subfolder (when there is one) for more details.

- [`src/proxy`](src/proxy/) contains the actual proxy plugin.
  This project is a simple interface between MO2 and the runner (see below).
  The CMake code:
  - generates the `plugin_python.dll` library,
  - generates the translation file (under `src/`),
  - installs necessary files for the plugin (Python DLL, Python libraries, etc),
    including `mobase`.
- [`src/runner`](src/runner/) contains the Python runner. This is the project that
  instantiates a Python interpreter and load/unload Python plugins.
- [`src/pybind11-qt`](src/pybind11-qt/) contains many utility stuff to interface
  pybind11 with Qt and PyQt.
- [`src/pybind11-utils`](src/pybind11-utils/) contains some utility stuff pybind11.
  This project is header-only.
- [`src/mobase`](src/mobase) contains the Python plugin interface.
  - This projects generates the `mobase` Python library.

Some (woefully incomplete) tests are available under `tests`, split in three
sub-directories:

- [`tests/mocks`](tests/mocks/) simply contains mocks of `uibase` interfaces to be used
  in the two other test projects.
- [`tests/python`](tests/python/) contains Python tests for `pytest`.
  This project generates a bunch of Python test libraries that are then imported in
  Python test files (`test_*.py`) and tested using `pytest`.
  These tests mostly cover the pybind11 Qt and utility stuff, and some standalone
  MO2 classes and functions (`IFileTree`, `GuessedString`, etc).
- [`tests/runner`](tests/runner/) contains C++ tests, using GTest
  Tests in this project instantiate a Python runner and then use it to check that
  plugins implemented in Python can be used properly on the C++ side.

## Building & Running tests

Tests are not built by default with `mob`, so you will need to run `cmake` manually
with the proper arguments.

You need to define `PLUGIN_PYTHON_TESTS` with `-DPLUGIN_PYTHON_TESTS` when running
the configure step of cmake.

You can then build the tests

```bash
# replace vsbuild with your build folder
cmake --build vsbuild --config RelWithDebInfo --target "python-tests" "runner-tests"
```

To run the tests, use `ctest`

```bash
# replace vsbuild with your build folder
ctest.exe --test-dir vsbuild -C RelWithDebInfo
```