rccn-gen 1.0.1__py3-none-any.whl → 1.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
rccn_gen/systems.py
CHANGED
@@ -2,6 +2,7 @@ from yamcs.pymdb import System, Subsystem, Command
|
|
2
2
|
import shutil
|
3
3
|
import difflib
|
4
4
|
import datetime
|
5
|
+
from caseconverter import *
|
5
6
|
from importlib.resources import files
|
6
7
|
from .utils import *
|
7
8
|
from .telemetry import *
|
@@ -47,12 +48,12 @@ class Application(Subsystem):
|
|
47
48
|
|
48
49
|
def file_paths(self):
|
49
50
|
paths = {
|
50
|
-
'main': os.path.join(self.export_file_path, 'rccn_usr_'+
|
51
|
-
'main_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+
|
52
|
-
'main_user_snapshot': os.path.join(self.user_snapshot_path(), 'rccn_usr_'+
|
53
|
-
'main_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+
|
51
|
+
'main': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.name), 'src', 'main.rs'),
|
52
|
+
'main_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+snakecase(self.name), 'src', 'main.rs'),
|
53
|
+
'main_user_snapshot': os.path.join(self.user_snapshot_path(), 'rccn_usr_'+snakecase(self.name), 'src', 'main.rs'),
|
54
|
+
'main_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+snakecase(self.name), 'src', 'main.diff'),
|
54
55
|
'main_template': os.path.join(self.text_modules_main_path, 'main.txt'),
|
55
|
-
'cargo_toml': os.path.join(self.export_file_path, 'rccn_usr_'+
|
56
|
+
'cargo_toml': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.name), 'Cargo.toml'),
|
56
57
|
'cargo_toml_template': os.path.join(self.text_modules_path, 'cargo_toml', 'cargo.txt'),
|
57
58
|
}
|
58
59
|
return paths
|
@@ -64,11 +65,11 @@ class Application(Subsystem):
|
|
64
65
|
return [subsystem for subsystem in self.subsystems if isinstance(subsystem, Service)]
|
65
66
|
|
66
67
|
def create_rccn_directories(self):
|
67
|
-
app_src_dir = os.path.join(self.export_file_path, 'rccn_usr_'+
|
68
|
+
app_src_dir = os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.name), 'src')
|
68
69
|
if not os.path.exists(app_src_dir):
|
69
70
|
os.makedirs(app_src_dir)
|
70
71
|
for service in self.services():
|
71
|
-
service_dir = os.path.join(app_src_dir,
|
72
|
+
service_dir = os.path.join(app_src_dir, snakecase(service.name))
|
72
73
|
if not os.path.exists(service_dir):
|
73
74
|
os.makedirs(service_dir)
|
74
75
|
|
@@ -101,7 +102,7 @@ class Application(Subsystem):
|
|
101
102
|
var_translation = {
|
102
103
|
'<<VAR_APID>>':str(self.apid),
|
103
104
|
'<<VAR_VCID>>':str(self.vcid),
|
104
|
-
'<<VAR_APP_NAME_SCASE>>':
|
105
|
+
'<<VAR_APP_NAME_SCASE>>':snakecase(self.name),
|
105
106
|
}
|
106
107
|
var_keywords = get_var_keywords(text)
|
107
108
|
for var_keyword in var_keywords:
|
@@ -128,7 +129,7 @@ class Application(Subsystem):
|
|
128
129
|
if not os.path.exists(service.file_paths()['mod']):
|
129
130
|
service.generate_mod_file()
|
130
131
|
service.generate_telemetry_file()
|
131
|
-
service.generate_rccn_command_file(os.path.join(self.export_file_path, 'rccn_usr_'+
|
132
|
+
service.generate_rccn_command_file(os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.name), 'src'), os.path.join(self.text_modules_path, 'command'))
|
132
133
|
self.delete_old_snapshots()
|
133
134
|
|
134
135
|
def generate_snapshot(self, current_file_reference, snapshot_file_reference):
|
@@ -236,22 +237,22 @@ class Service(Subsystem):
|
|
236
237
|
|
237
238
|
def file_paths(self):
|
238
239
|
paths = {
|
239
|
-
'service': os.path.join(self.export_file_path, 'rccn_usr_'+
|
240
|
-
'service_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+
|
241
|
-
'service_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+
|
242
|
-
'service_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+
|
240
|
+
'service': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'service.rs'),
|
241
|
+
'service_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'service.rs'),
|
242
|
+
'service_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'service.rs'),
|
243
|
+
'service_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'service.diff'),
|
243
244
|
'service_template': os.path.join(self.text_modules_service_path, 'service.txt'),
|
244
|
-
'command': os.path.join(self.export_file_path, 'rccn_usr_'+
|
245
|
-
'command_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+
|
246
|
-
'command_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+
|
247
|
-
'command_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+
|
245
|
+
'command': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.rs'),
|
246
|
+
'command_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.rs'),
|
247
|
+
'command_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.rs'),
|
248
|
+
'command_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.diff'),
|
248
249
|
'command_template': os.path.join(self.text_modules_command_path, 'command.txt'),
|
249
|
-
'mod': os.path.join(self.export_file_path, 'rccn_usr_'+
|
250
|
+
'mod': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'mod.rs'),
|
250
251
|
'mod_template': os.path.join(self.text_modules_path, 'mod', 'mod.txt'),
|
251
|
-
'telemetry': os.path.join(self.export_file_path, 'rccn_usr_'+
|
252
|
-
'telemetry_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+
|
253
|
-
'telemetry_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+
|
254
|
-
'telemetry_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+
|
252
|
+
'telemetry': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'telemetry.rs'),
|
253
|
+
'telemetry_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'telemetry.rs'),
|
254
|
+
'telemetry_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.rs'),
|
255
|
+
'telemetry_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'telemetry.diff'),
|
255
256
|
'telemetry_template': os.path.join(self.text_modules_telemetry_path, 'telemetry.txt'),
|
256
257
|
}
|
257
258
|
return paths
|
@@ -284,7 +285,7 @@ class Service(Subsystem):
|
|
284
285
|
service_var_translation = {
|
285
286
|
'<<VAR_SERVICE_NAME>>': self.name,
|
286
287
|
'<<VAR_SERVICE_ID>>': str(self.service_id),
|
287
|
-
'<<VAR_SERVICE_NAME_UCASE>>':
|
288
|
+
'<<VAR_SERVICE_NAME_UCASE>>': pascalcase(self.name),
|
288
289
|
'<<VAR_SERVICE_TELEMETRY>>': self.generate_rust_telemetry_definition(),
|
289
290
|
}
|
290
291
|
for var_keyword in var_keywords:
|
@@ -331,7 +332,7 @@ class Service(Subsystem):
|
|
331
332
|
command_file_path = self.file_paths()['command_template']
|
332
333
|
with open(command_file_path, 'r') as file:
|
333
334
|
command_file_text = file.read()
|
334
|
-
command_export_file_path = os.path.join(export_file_dir,
|
335
|
+
command_export_file_path = os.path.join(export_file_dir, snakecase(self.name), 'command.rs')
|
335
336
|
with open(command_export_file_path, 'w') as file:
|
336
337
|
file.write(self.find_and_replace_keywords(command_file_text, text_modules_path))
|
337
338
|
# Create snapshot of command.rs if instructed
|
@@ -430,7 +431,7 @@ class RCCNCommand(Command):
|
|
430
431
|
# Find and replace command variable keywords
|
431
432
|
command_var_keywords = get_var_keywords(text)
|
432
433
|
command_var_translation = {
|
433
|
-
'<<VAR_COMMAND_NAME_UCASE>>':
|
434
|
+
'<<VAR_COMMAND_NAME_UCASE>>': pascalcase(self.name),
|
434
435
|
'<<VAR_COMMAND_NAME>>': self.name,
|
435
436
|
'<<VAR_COMMAND_SUBTYPE>>': str(self.assignments['subtype']),
|
436
437
|
'<<VAR_COMMAND_STRUCT>>': self.struct_definition()
|
@@ -450,7 +451,7 @@ class RCCNCommand(Command):
|
|
450
451
|
def struct_definition(self):
|
451
452
|
if len(self.arguments) == 0:
|
452
453
|
return ''
|
453
|
-
struct_definition_text = "#[derive(BitStruct, Debug, PartialEq)]\npub struct "+
|
454
|
+
struct_definition_text = "#[derive(BitStruct, Debug, PartialEq)]\npub struct "+pascalcase(self.name)+" {\n"
|
454
455
|
for argument in self.arguments:
|
455
456
|
struct_definition_text += rust_type_definition(argument)[0]
|
456
457
|
struct_definition_text += "}\n"
|
rccn_gen/utils.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import re
|
2
2
|
import inflect
|
3
3
|
import os
|
4
|
+
from caseconverter import *
|
4
5
|
from yamcs.pymdb import IntegerArgument, FloatArgument, BooleanArgument, EnumeratedArgument, StringArgument
|
5
6
|
|
6
7
|
|
@@ -130,8 +131,8 @@ def rust_type_definition(pymdb_data_instance, parent_name="MyStruct"):
|
|
130
131
|
pymdb_data_instance.name = parent_name
|
131
132
|
else:
|
132
133
|
pymdb_data_instance.name = singular_name
|
133
|
-
print("RCCN-Gen: Information: An unnamed "+base_type+" has been named \""+
|
134
|
-
sc_instance_name =
|
134
|
+
print("RCCN-Gen: Information: An unnamed "+base_type+" has been named \""+pascalcase(pymdb_data_instance.name)+"\" in the generated RCCN code.")
|
135
|
+
sc_instance_name = snakecase(pymdb_data_instance.name)
|
135
136
|
|
136
137
|
if data_type == 'IntegerDataType':
|
137
138
|
if pymdb_data_instance.encoding is None or pymdb_data_instance.encoding.bits is None:
|
@@ -161,14 +162,14 @@ def rust_type_definition(pymdb_data_instance, parent_name="MyStruct"):
|
|
161
162
|
definition_text[0] = definition_text[0].replace(': ', ': Vec<').replace(',\n', '>,\n')
|
162
163
|
|
163
164
|
elif data_type == 'EnumeratedDataType':
|
164
|
-
definition_text = ["\tpub "+pymdb_data_instance.name+": "+
|
165
|
-
definition_text.append("pub enum "+
|
165
|
+
definition_text = ["\tpub "+pymdb_data_instance.name+": "+pascalcase(pymdb_data_instance.name)+",\n"]
|
166
|
+
definition_text.append("pub enum "+pascalcase(pymdb_data_instance.name)+" {\n")
|
166
167
|
for choice in pymdb_data_instance.choices:
|
167
168
|
definition_text[1] += "\t"+str(choice[1])+" = "+str(choice[0])+",\n"
|
168
169
|
definition_text[1] += "}\n"
|
169
170
|
|
170
171
|
elif data_type == 'AggregateDataType':
|
171
|
-
struct_name =
|
172
|
+
struct_name = pascalcase(pymdb_data_instance.name)
|
172
173
|
definition_text = ["\tpub "+sc_instance_name+": "+struct_name+",\n"]
|
173
174
|
definition_text.append("pub struct "+struct_name+" {\n")
|
174
175
|
for member in pymdb_data_instance.members:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: rccn_gen
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.2
|
4
4
|
Summary: A python based generator for RACCOON OS source files in Rust from yamcs-pymdb config files.
|
5
5
|
Project-URL: Homepage, https://gitlab.com/rccn/pymdb_code_generation
|
6
6
|
Project-URL: Issues, https://gitlab.com/rccn/pymdb_code_generation/issues
|
@@ -9,6 +9,8 @@ License-Expression: GPL-3.0
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
11
11
|
Requires-Python: >=3.8
|
12
|
+
Requires-Dist: case-converter>=1.2.0
|
13
|
+
Requires-Dist: inflect>=7.5.0
|
12
14
|
Requires-Dist: yamcs-pymdb>=0.1.0
|
13
15
|
Description-Content-Type: text/markdown
|
14
16
|
|
@@ -2,9 +2,9 @@ rccn_gen/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
|
2
2
|
rccn_gen/__init__.py,sha256=XVvKYcWw9K1P3J1BTbzbODY71Nc1FApCc0wf7ezd4Gc,193
|
3
3
|
rccn_gen/application.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
rccn_gen/service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
-
rccn_gen/systems.py,sha256=
|
5
|
+
rccn_gen/systems.py,sha256=ibpegtBKPF-w6hmiWC_-TgJII6uvWP8wRSDpwEq8rjY,26755
|
6
6
|
rccn_gen/telemetry.py,sha256=huVcqGs95IXlpETWdlIyR9lK4ctZUsq7czgJwvTYtBk,3855
|
7
|
-
rccn_gen/utils.py,sha256=
|
7
|
+
rccn_gen/utils.py,sha256=HF79aMpovRdqLdVjL1w0iEPTEvOl7VSPrf_9QifUyoc,7290
|
8
8
|
rccn_gen/text_modules/cargo_toml/cargo.txt,sha256=2e6xKomkml6-onfQ0QHNqvKnhGLYMUl8zYgbykmm83Y,292
|
9
9
|
rccn_gen/text_modules/command/command.txt,sha256=8Y-uJilhFLoinftIbn7uKfia9LLMZno2LkoDJ-4Y-9M,345
|
10
10
|
rccn_gen/text_modules/command/command_module_enum.txt,sha256=ApzRDQIs-BHJHtFA4ysfpYuWElGntXakkzZkgy57b74,94
|
@@ -17,6 +17,6 @@ rccn_gen/text_modules/mod/mod.txt,sha256=BF8LablBE4ddutdl5m0prvpvLdBRejueVOujkyr
|
|
17
17
|
rccn_gen/text_modules/service/command_module_match_cmd.txt,sha256=eVGo6ltuerG37rVxpXtL-JYuLyLW4c0i6NXb5g1_U-A,89
|
18
18
|
rccn_gen/text_modules/service/service.txt,sha256=0KwwrfrjXuY4e3VNpCdTTzgW8bmYRQ21i-Lvhkz3hVA,691
|
19
19
|
rccn_gen/text_modules/telemetry/telemetry.txt,sha256=Re1d3BfpyXT_CEe7jJzLF3MARik0-J-K98K85iPOE40,193
|
20
|
-
rccn_gen-1.0.
|
21
|
-
rccn_gen-1.0.
|
22
|
-
rccn_gen-1.0.
|
20
|
+
rccn_gen-1.0.2.dist-info/METADATA,sha256=SmSD9_-46j9ZXvYAhuVPr2hINx0_xHOihSPJ31vfwVc,8260
|
21
|
+
rccn_gen-1.0.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
22
|
+
rccn_gen-1.0.2.dist-info/RECORD,,
|
File without changes
|