[module] update module creator for tasks and dependencies (#2771)

This commit is contained in:
Gautier Hattenberger
2021-08-30 00:28:18 +02:00
committed by GitHub
parent c992e5bb5a
commit 73249228dc
4 changed files with 279 additions and 7 deletions
+8
View File
@@ -91,6 +91,10 @@ class CreateModGUI(Ui_CreateModule_Window):
author = self.author_edit.text()
email = self.email_edit.text()
description = unidecode.unidecode(self.description_edit.toPlainText())
task = self.task_combo.currentText()
depends = self.depends_edit.text()
provides = self.provides_edit.text()
conflicts = self.conflicts_edit.text()
self.description_edit.setPlainText(description)
if name == "" or author == "" or description == "" or email == "":
self.statusbar.showMessage("Please fill the name, author, mail and description!")
@@ -98,9 +102,13 @@ class CreateModGUI(Ui_CreateModule_Window):
return
fc.name = name
fc.directory = directory
fc.task = task
fc.description = description
fc.author = author
fc.email = email
fc.depends = depends
fc.provides = provides
fc.conflicts = conflicts
for comp in self.components:
if comp.comp_type == "Init":
+71 -1
View File
@@ -21,6 +21,11 @@ class Ui_CreateModule_Window(object):
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.name_edit = QtWidgets.QLineEdit(self.centralwidget)
@@ -30,13 +35,43 @@ class Ui_CreateModule_Window(object):
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
self.label_2.setSizePolicy(sizePolicy)
self.label_2.setObjectName("label_2")
self.horizontalLayout_2.addWidget(self.label_2)
self.directory_combo = QtWidgets.QComboBox(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.directory_combo.sizePolicy().hasHeightForWidth())
self.directory_combo.setSizePolicy(sizePolicy)
self.directory_combo.setEditable(True)
self.directory_combo.setObjectName("directory_combo")
self.horizontalLayout_2.addWidget(self.directory_combo)
self.horizontalLayout_6.addLayout(self.horizontalLayout_2)
self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.label_7 = QtWidgets.QLabel(self.centralwidget)
self.label_7.setObjectName("label_7")
self.horizontalLayout_8.addWidget(self.label_7)
self.task_combo = QtWidgets.QComboBox(self.centralwidget)
self.task_combo.setObjectName("task_combo")
self.task_combo.addItem("")
self.task_combo.setItemText(0, "")
self.task_combo.addItem("")
self.task_combo.addItem("")
self.task_combo.addItem("")
self.task_combo.addItem("")
self.task_combo.addItem("")
self.task_combo.addItem("")
self.task_combo.addItem("")
self.task_combo.addItem("")
self.task_combo.addItem("")
self.horizontalLayout_8.addWidget(self.task_combo)
self.horizontalLayout_6.addLayout(self.horizontalLayout_8)
self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
self.label_12 = QtWidgets.QLabel(self.centralwidget)
@@ -73,6 +108,28 @@ class Ui_CreateModule_Window(object):
self.horizontalLayout_3.addWidget(self.email_edit)
self.horizontalLayout_5.addLayout(self.horizontalLayout_3)
self.verticalLayout.addLayout(self.horizontalLayout_5)
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
self.label_9 = QtWidgets.QLabel(self.centralwidget)
self.label_9.setObjectName("label_9")
self.horizontalLayout_9.addWidget(self.label_9)
self.depends_edit = QtWidgets.QLineEdit(self.centralwidget)
self.depends_edit.setObjectName("depends_edit")
self.horizontalLayout_9.addWidget(self.depends_edit)
self.label_10 = QtWidgets.QLabel(self.centralwidget)
self.label_10.setObjectName("label_10")
self.horizontalLayout_9.addWidget(self.label_10)
self.provides_edit = QtWidgets.QLineEdit(self.centralwidget)
self.provides_edit.setObjectName("provides_edit")
self.horizontalLayout_9.addWidget(self.provides_edit)
self.label_11 = QtWidgets.QLabel(self.centralwidget)
self.label_11.setObjectName("label_11")
self.horizontalLayout_9.addWidget(self.label_11)
self.conflicts_edit = QtWidgets.QLineEdit(self.centralwidget)
self.conflicts_edit.setText("")
self.conflicts_edit.setObjectName("conflicts_edit")
self.horizontalLayout_9.addWidget(self.conflicts_edit)
self.verticalLayout.addLayout(self.horizontalLayout_9)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setObjectName("label_3")
self.verticalLayout.addWidget(self.label_3)
@@ -99,7 +156,7 @@ class Ui_CreateModule_Window(object):
self.components_area.setWidgetResizable(True)
self.components_area.setObjectName("components_area")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 859, 356))
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 859, 316))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.scroll_area_layout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
self.scroll_area_layout.setObjectName("scroll_area_layout")
@@ -150,11 +207,24 @@ class Ui_CreateModule_Window(object):
CreateModule_Window.setWindowTitle(_translate("CreateModule_Window", "Create Module"))
self.label.setText(_translate("CreateModule_Window", "Module name"))
self.label_2.setText(_translate("CreateModule_Window", "Directory"))
self.label_7.setText(_translate("CreateModule_Window", "Task"))
self.task_combo.setItemText(1, _translate("CreateModule_Window", "mcu"))
self.task_combo.setItemText(2, _translate("CreateModule_Window", "core"))
self.task_combo.setItemText(3, _translate("CreateModule_Window", "sensors"))
self.task_combo.setItemText(4, _translate("CreateModule_Window", "estimation"))
self.task_combo.setItemText(5, _translate("CreateModule_Window", "radio_control"))
self.task_combo.setItemText(6, _translate("CreateModule_Window", "control"))
self.task_combo.setItemText(7, _translate("CreateModule_Window", "actuators"))
self.task_combo.setItemText(8, _translate("CreateModule_Window", "datalink"))
self.task_combo.setItemText(9, _translate("CreateModule_Window", "default"))
self.label_12.setText(_translate("CreateModule_Window", "Licence"))
self.licence_comboBox.setItemText(0, _translate("CreateModule_Window", "GPLv2"))
self.licence_comboBox.setItemText(1, _translate("CreateModule_Window", "None"))
self.label_4.setText(_translate("CreateModule_Window", "Author"))
self.label_5.setText(_translate("CreateModule_Window", "email"))
self.label_9.setText(_translate("CreateModule_Window", "Depends"))
self.label_10.setText(_translate("CreateModule_Window", "Provides"))
self.label_11.setText(_translate("CreateModule_Window", "Conflicts"))
self.label_3.setText(_translate("CreateModule_Window", "Description"))
self.label_6.setText(_translate("CreateModule_Window", "Add element :"))
self.init_button.setText(_translate("CreateModule_Window", "Init"))
+123 -2
View File
@@ -16,11 +16,17 @@
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,1,0">
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,1,0,0">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Module name</string>
</property>
@@ -35,6 +41,12 @@
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Directory</string>
</property>
@@ -42,6 +54,12 @@
</item>
<item>
<widget class="QComboBox" name="directory_combo">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editable">
<bool>true</bool>
</property>
@@ -49,6 +67,71 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QLabel" name="label_7">
<property name="text">
<string>Task</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="task_combo">
<item>
<property name="text">
<string/>
</property>
</item>
<item>
<property name="text">
<string>mcu</string>
</property>
</item>
<item>
<property name="text">
<string>core</string>
</property>
</item>
<item>
<property name="text">
<string>sensors</string>
</property>
</item>
<item>
<property name="text">
<string>estimation</string>
</property>
</item>
<item>
<property name="text">
<string>radio_control</string>
</property>
</item>
<item>
<property name="text">
<string>control</string>
</property>
</item>
<item>
<property name="text">
<string>actuators</string>
</property>
</item>
<item>
<property name="text">
<string>datalink</string>
</property>
</item>
<item>
<property name="text">
<string>default</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
@@ -111,6 +194,44 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>Depends</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="depends_edit"/>
</item>
<item>
<widget class="QLabel" name="label_10">
<property name="text">
<string>Provides</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="provides_edit"/>
</item>
<item>
<widget class="QLabel" name="label_11">
<property name="text">
<string>Conflicts</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="conflicts_edit">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
@@ -165,7 +286,7 @@
<x>0</x>
<y>0</y>
<width>859</width>
<height>356</height>
<height>316</height>
</rect>
</property>
<layout class="QVBoxLayout" name="scroll_area_layout">
+77 -4
View File
@@ -2,6 +2,7 @@
import os
from lxml import etree
from collections import namedtuple
import datetime
PPRZ_SRC = os.getenv("PAPARAZZI_SRC")
@@ -46,9 +47,14 @@ class FilesCreate:
self.src = ""
self._name = ""
self._directory = ""
self._task = ""
self._description = ""
self._author = ""
self._email = ""
self._year = datetime.datetime.now().year
self._depends = ""
self._provides = ""
self._conflicts = ""
self.inits = []
self.periodics = []
self.events = []
@@ -73,6 +79,16 @@ class FilesCreate:
def directory(self, d):
self._directory = d.lower()
@property
def task(self):
if self._task == "":
return None
return self._task
@task.setter
def task(self, t):
self._task = t
@property
def description(self):
return self._description
@@ -97,6 +113,44 @@ class FilesCreate:
def email(self, email):
self._email = "<{}>".format(email)
@property
def year(self):
return self._year
@property
def depends(self):
if self._depends == "":
return None
return self._depends
@depends.setter
def depends(self, depends):
self._depends = depends
@property
def provides(self):
if self._provides == "":
return None
return self._provides
@provides.setter
def provides(self, provides):
self._provides = provides
@property
def conflicts(self):
if self._conflicts == "":
return None
return self._conflicts
@conflicts.setter
def conflicts(self, conflicts):
self._conflicts = conflicts
def has_dep(self):
# at least one is not empty
return self._depends != "" or self._provides != "" or self._conflicts != ""
def add_init(self, fun):
fun = fun.strip("()")
self.inits.append(Init(fun=fun))
@@ -135,12 +189,31 @@ class FilesCreate:
self.xml.attrib["name"] = self.name
# set directory
self.xml.attrib["dir"] = self.directory
#set description
# set task
if self.task is not None:
self.xml.attrib["task"] = self.task
# set description
description = etree.Element("description")
description.text = self.description
doc = etree.Element("doc")
doc.append(description)
self.xml.append(doc)
# set dependencies
if self.has_dep():
dep = etree.Element("dep")
if self.depends is not None:
depends = etree.Element("depends")
depends.text = self.depends
dep.append(depends)
if self.provides is not None:
provides = etree.Element("provides")
provides.text = self.provides
dep.append(provides)
if self.conflicts is not None:
conflicts = etree.Element("conflicts")
conflicts.text = self.conflicts
dep.append(conflicts)
self.xml.append(dep)
# set header
h_file = etree.Element("file")
h_file.attrib["name"] = "{}.h".format(self.name)
@@ -188,8 +261,8 @@ class FilesCreate:
self.xml.append(makefile)
def build_src(self, licence="GPLv2"):
cop = "/*\n * Copyright (C) {author} {email}\n{licence}\n */".format(
author=self.author, email=self.email, licence=LICENCES[licence])
cop = "/*\n * Copyright (C) {year} {author} {email}\n{licence}\n */".format(
year=self.year, author=self.author, email=self.email, licence=LICENCES[licence])
description = "/** @file \"modules/{dir}/{name}.c\"\n * @author {author} {email}\n * {description}\n */".format(
dir=self.directory, name=self.name, author=self.author, email=self.email, description=self.description)
include = "#include \"modules/{dir}/{name}.h\"".format(dir=self.directory, name=self.name)
@@ -221,7 +294,7 @@ class FilesCreate:
self.src = "{}\n\n{}\n\n{}\n\n{}\n".format(cop, description, include, declarations)
def build_header(self, licence="GPLv2"):
cop = "/*\n * Copyright (C) {author} {email}\n{licence}\n */".format(author=self.author, email=self.email, licence=LICENCES[licence])
cop = "/*\n * Copyright (C) {year} {author} {email}\n{licence}\n */".format(year=self.year, author=self.author, email=self.email, licence=LICENCES[licence])
description = "/** @file \"modules/{dir}/{name}.h\"\n * @author {author} {email}\n * {description}\n */".format(
dir=self.directory, name=self.name, author=self.author, email=self.email, description=self.description)
includes = ""