Skip to content

Commit 5cb70c1

Browse files
authored
Merge pull request #313 from robotpy/tt-refactor
refactor telemetry/tunables
2 parents 85d52d2 + 5e310ed commit 5cb70c1

68 files changed

Lines changed: 4931 additions & 1638 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

subprojects/robotpy-commands-v2/tests/test_scheduler.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import pytest
1010
import telemetry
11+
import telemetry.mock_backend as mock_backend
1112
import tunables
1213
import wpilib
1314

@@ -147,9 +148,13 @@ def test_scheduler_logs_names_and_ids(scheduler: commands2.CommandScheduler):
147148
scheduler.schedule(command)
148149
scheduler.log_to(telemetry.get_table())
149150

150-
assert backend.get_last_action("/Names")["kind"] == "string[]"
151+
assert backend.get_last_action("/Names") == mock_backend.Action(
152+
"/Names", ["WaitForIt"]
153+
)
151154
assert backend.get_last_value("/Names") == ["WaitForIt"]
152-
assert backend.get_last_action("/Ids")["kind"] == "integer[]"
155+
assert backend.get_last_action("/Ids") == mock_backend.Action(
156+
"/Ids", [id(command)]
157+
)
153158
assert backend.get_last_value("/Ids") == [id(command)]
154159
finally:
155160
telemetry.TelemetryRegistry.reset()

subprojects/robotpy-telemetry/meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ subdir('semiwrap')
66

77
telemetry_sources += files(
88
'telemetry/src/main.cpp',
9-
'telemetry/src/TelemetryPython.cpp',
109
'telemetry/src/rpy/MockTelemetryBackendFunctions.cpp',
1110
'telemetry/src/rpy/PyTelemetryTable.cpp',
11+
'telemetry/src/rpy/TelemetryFunctions.cpp',
1212
)
1313

1414
subdir('semiwrap/modules')

subprojects/robotpy-telemetry/pyproject.in.toml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,12 @@ update_init = [
4141
"telemetry"
4242
]
4343
scan_headers_ignore = [
44-
"wpi/telemetry/DiscardTelemetryBackend.hpp",
45-
"wpi/telemetry/MockTelemetryBackend.hpp",
46-
"wpi/telemetry/MultiTelemetryBackend.hpp",
4744
"wpi/telemetry/Telemetry.hpp",
48-
"wpi/telemetry/TelemetryRegistry.hpp",
49-
"wpi/telemetry/TelemetryTable.hpp",
5045
"wpi/telemetry/detail/PathUtil.hpp",
5146

52-
# internals
53-
"src/TelemetryPython.h",
54-
"src/rpy/MockTelemetryBackendFunctions.h",
55-
"src/rpy/PyTelemetryTable.h"
47+
# rpy
48+
"rpy/MockTelemetryBackendFunctions.h",
49+
"rpy/MockTelemetryBackendValueCasters.h",
5650
]
5751

5852
[tool.semiwrap.name_transform]
@@ -64,8 +58,16 @@ known_words = []
6458
name = "telemetry"
6559
wraps = ["robotpy-native-telemetry"]
6660
depends = ["wpiutil"]
61+
includes = ["telemetry/src"]
6762

6863
[tool.semiwrap.extension_modules."telemetry._telemetry".headers]
6964
TelemetryEntry = "wpi/telemetry/TelemetryEntry.hpp"
7065
TelemetryBackend = "wpi/telemetry/TelemetryBackend.hpp"
66+
DiscardTelemetryBackend = "wpi/telemetry/DiscardTelemetryBackend.hpp"
67+
MultiTelemetryBackend = "wpi/telemetry/MultiTelemetryBackend.hpp"
68+
MockTelemetryBackend = "wpi/telemetry/MockTelemetryBackend.hpp"
69+
TelemetryRegistry = "wpi/telemetry/TelemetryRegistry.hpp"
7170
TelemetryLoggable = "wpi/telemetry/TelemetryLoggable.hpp"
71+
TelemetryTable = "wpi/telemetry/TelemetryTable.hpp"
72+
PyTelemetryTable = "rpy/PyTelemetryTable.h"
73+
TelemetryFunctions = "rpy/TelemetryFunctions.h"
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
extra_includes:
2+
- wpi/telemetry/TelemetryEntry.hpp
3+
4+
classes:
5+
wpi::telemetry::DiscardTelemetryBackend:
6+
methods:
7+
GetEntry:
8+
HasSchema:
9+
AddSchema:
10+
overloads:
11+
std::string_view, std::string_view, std::span<const uint8_t>:
12+
std::string_view, std::string_view, std::string_view:
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
extra_includes:
2+
- rpy/MockTelemetryBackendFunctions.h
3+
- rpy/MockTelemetryBackendValueCasters.h
4+
- wpi/telemetry/TelemetryEntry.hpp
5+
6+
classes:
7+
wpi::telemetry::MockTelemetryBackend:
8+
methods:
9+
MockTelemetryBackend:
10+
GetActions:
11+
no_release_gil: true
12+
Clear:
13+
GetLastAction:
14+
no_release_gil: true
15+
GetLastValue:
16+
no_release_gil: true
17+
cpp_code: |
18+
[](const wpi::telemetry::MockTelemetryBackend& self,
19+
std::string_view path) {
20+
return wpi::telemetry::python::GetLastValue(self, path);
21+
}
22+
GetSchema:
23+
no_release_gil: true
24+
cpp_code: |
25+
[](const wpi::telemetry::MockTelemetryBackend& self,
26+
std::string_view schemaName) {
27+
return wpi::telemetry::python::GetSchema(self, schemaName);
28+
}
29+
GetEntry:
30+
RemoveEntry:
31+
HasSchema:
32+
AddSchema:
33+
overloads:
34+
std::string_view, std::string_view, std::span<const uint8_t>:
35+
std::string_view, std::string_view, std::string_view:
36+
wpi::telemetry::MockTelemetryBackend::KeepDuplicatesValue:
37+
ignore: true
38+
wpi::telemetry::MockTelemetryBackend::SetPropertyValue:
39+
ignore: true
40+
wpi::telemetry::MockTelemetryBackend::LogStringValue:
41+
ignore: true
42+
wpi::telemetry::MockTelemetryBackend::LogBooleanArrayValue:
43+
ignore: true
44+
wpi::telemetry::MockTelemetryBackend::LogRawValue:
45+
ignore: true
46+
wpi::telemetry::MockTelemetryBackend::Action:
47+
ignore: true
48+
wpi::telemetry::MockTelemetryBackend::Schema:
49+
ignore: true
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
extra_includes:
2+
- wpi/telemetry/TelemetryEntry.hpp
3+
4+
classes:
5+
wpi::telemetry::MultiTelemetryBackend:
6+
methods:
7+
MultiTelemetryBackend:
8+
overloads:
9+
"":
10+
std::span<const std::shared_ptr<TelemetryBackend>>:
11+
ignore: true
12+
std::vector<std::shared_ptr<TelemetryBackend>>:
13+
std::initializer_list<std::shared_ptr<TelemetryBackend>>:
14+
ignore: true
15+
GetEntry:
16+
RemoveEntry:
17+
HasSchema:
18+
AddSchema:
19+
overloads:
20+
std::string_view, std::string_view, std::span<const uint8_t>:
21+
std::string_view, std::string_view, std::string_view:
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
defaults:
2+
default_args_as_kw_only: true
3+
classes:
4+
wpi::telemetry::python::PyTelemetryTable:
5+
rename: TelemetryTable
6+
methods:
7+
PyTelemetryTable:
8+
ignore: true
9+
GetPath:
10+
no_release_gil: true
11+
SetType:
12+
no_release_gil: true
13+
GetType:
14+
no_release_gil: true
15+
HasType:
16+
no_release_gil: true
17+
GetTable:
18+
no_release_gil: true
19+
KeepDuplicates:
20+
no_release_gil: true
21+
SetProperty:
22+
no_release_gil: true
23+
Log:
24+
no_release_gil: true
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
defaults:
2+
default_args_as_kw_only: true
3+
4+
functions:
5+
GetTable:
6+
no_release_gil: true
7+
default_args_as_kw_only: false
8+
Log:
9+
no_release_gil: true
10+
KeepDuplicates:
11+
SetProperty:

subprojects/robotpy-telemetry/semiwrap/TelemetryLoggable.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ functions:
88
ignore: true
99
classes:
1010
wpi::telemetry::TelemetryLoggable:
11+
force_no_default_constructor: true
1112
methods:
1213
LogTo:
13-
ignore_py: true
14+
no_release_gil: true
1415
GetTelemetryType:
16+
no_release_gil: true
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
extra_includes:
2+
- memory
3+
- optional
4+
- string
5+
- utility
6+
- pybind11/typing.h
7+
- rpy/PyTelemetryTable.h
8+
- wpi/telemetry/TelemetryBackend.hpp
9+
- wpystruct.h
10+
11+
classes:
12+
wpi::telemetry::TelemetryRegistry:
13+
force_no_default_constructor: true
14+
methods:
15+
SetReportWarning:
16+
no_release_gil: true
17+
param_override:
18+
func:
19+
name: callback
20+
x_type: std::optional<py::typing::Callable<void(std::string_view, std::string_view)>>
21+
default: std::nullopt
22+
cpp_code: |
23+
[](std::optional<py::typing::Callable<
24+
void(std::string_view, std::string_view)>> callback) {
25+
if (!callback) {
26+
wpi::telemetry::TelemetryRegistry::SetReportWarning(nullptr);
27+
return;
28+
}
29+
30+
auto callbackOwner = std::shared_ptr<py::function>{
31+
new py::function{std::move(*callback)}, [](py::function* callback) {
32+
py::gil_scoped_acquire gil;
33+
delete callback;
34+
}};
35+
wpi::telemetry::TelemetryRegistry::SetReportWarning(
36+
[callbackOwner](std::string_view path, std::string_view msg) {
37+
py::gil_scoped_acquire gil;
38+
(*callbackOwner)(std::string{path}, std::string{msg});
39+
});
40+
}
41+
GetReportWarning:
42+
ignore: true
43+
ReportWarning:
44+
RegisterBackend:
45+
cpp_code: |
46+
[](std::string_view prefix,
47+
std::shared_ptr<wpi::telemetry::TelemetryBackend> backend) {
48+
wpi::telemetry::TelemetryRegistry::RegisterBackend(
49+
prefix, std::move(backend));
50+
}
51+
GetBackend:
52+
GetEntry:
53+
GetTable:
54+
no_release_gil: true
55+
cpp_code: |
56+
[](std::string_view path) {
57+
return wpi::telemetry::python::PyTelemetryTable{
58+
wpi::telemetry::TelemetryRegistry::GetTable(path)};
59+
}
60+
Reset:
61+
HasSchema:
62+
AddSchema:
63+
overloads:
64+
TelemetryBackend&, std::string_view, std::string_view, std::span<const uint8_t>:
65+
TelemetryBackend&, std::string_view, std::string_view, std::string_view:
66+
AddProtobufSchema:
67+
ignore: true
68+
AddStructSchema:
69+
no_release_gil: true
70+
param_override:
71+
info:
72+
name: type
73+
cpp_code: |
74+
[](TelemetryBackend &backend, const py::type &type) {
75+
WPyStructInfo info(type);
76+
return TelemetryRegistry::AddStructSchema<WPyStruct, WPyStructInfo>(backend, info);
77+
}

0 commit comments

Comments
 (0)