Guides for developers¶
Guides for developers
Overview: We provide guidelines for developers modifying PASTA-ELN code, including instructions on writing Python test scripts for backend and frontend components like widgets and dialogs. It also covers essential development practices such as code profiling, debugging on Linux using pudb, running pytest, and notes on documentation and general coding.
Notes for Documentation Developers¶
When updating the documentation, ensure it is professional and concise. Use tools like GitHub Copilot to assist in refining the text. "Can you make the markdown text professional and concise?"
How to write code¶
How to write small python programs that test code directly¶
Backend
from pasta_eln.backend import Pasta
pasta = Pasta()
viewProj = pasta.db.getView('viewDocType/x0')
projID1 = [i['id'] for i in viewProj if 'PASTA' in i['value'][0]][0]
pasta.changeHierarchy(projID1)
print(pasta.outputHierarchy())
Frontend: widgets: For testing widgets put this code into "pasta_eln/test.py":
from PySide6.QtWidgets import QApplication, QMainWindow
from .backend import Backend
from .communicate import Communicate
from .widgetDetails import Details
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.backend = Backend()
comm = Communicate(self.backend)
widget = Details(comm)
self.setCentralWidget(widget)
comm.changeDetails.emit('m-a23019163b9c4fccb4edaab0feb2b5ee')
app = QApplication()
window = MainWindow()
window.show()
app.exec()
and execute "python -m pasta_eln.test"
Frontend: dialogs: For testing dialogs put this code into "pasta_eln/test.py":
import sys
from PySide6.QtWidgets import QApplication
from .GUI.form import Form
from .backend import Backend
from .guiCommunicate import Communicate
from .GUI.palette import Palette
app = QApplication(sys.argv)
backend = Backend()
palette = Palette(app,'none')
comm = Communicate(backend,palette)
doc = backend.db.getDoc("m-3a43570c4fd84b1ab81a8863ae058fb0")
dialog = Form(comm, doc)
dialog.show()
sys.exit(app.exec())
and execute "python -m pasta_eln.test"
Profiling¶
Begin...
from cProfile import Profile
from pstats import SortKey, Stats
with Profile() as profile:
End...
(Stats(profile).strip_dirs().sort_stats(SortKey.CUMULATIVE).print_stats(100)) #end cProfile
For example: to profile the start of the program
def startMain() -> None:
"""
Main function to start GUI. Extra function is required to allow starting in module fashion
"""
from cProfile import Profile
from pstats import SortKey, Stats
with Profile() as profile:
app, window = mainGUI()
window.show()
(Stats(profile).strip_dirs().sort_stats(SortKey.CUMULATIVE).print_stats(100)) #end cProfile
# if app:
# app.exec()
Debugging on a conventional install: linux¶
'sudo apt install python3-pudb' (not pip install)
create small 'temp.py' into any folder, with this content:
temp.py¶from pasta_eln.gui import startMain startMain()
start with 'pudb3 temp.py'
Running pytests (python 3.12)¶
python3 -m tests.test_01_3Projects
General notes¶
Find qt-awesome icons: qta-browser
print works great in frontend and backend