bec/bec_lib/util_scripts/create_plugin_structure.py

107 lines
3.6 KiB
Python

"""
Helper script to create a new plugin structure
"""
import os
import sys
# current directory:
current_dir = os.path.dirname(os.path.realpath(__file__))
class PluginStructure:
def __init__(self, target_dir):
self.target_dir = target_dir
self.create_dir("")
def create_dir(self, dir_name):
try:
os.makedirs(os.path.join(self.target_dir, dir_name))
except FileExistsError as exc:
raise FileExistsError(f"Directory {dir_name} already exists") from exc
def create_init_file(self, dir_name):
init_file = os.path.join(self.target_dir, dir_name, "__init__.py")
with open(init_file, "w", encoding="utf-8") as f:
f.write("")
def copy_setup_files(self):
# copy setup files
setup_file = os.path.join(current_dir, "plugin_setup_files", "setup.py")
os.system(f"cp {setup_file} {self.target_dir}")
setup_file = os.path.join(current_dir, "plugin_setup_files", "setup.cfg")
os.system(f"cp {setup_file} {self.target_dir}")
def add_plugins(self):
self.create_dir("bec_plugins")
self.create_init_file("bec_plugins")
def add_scan_server(self):
self.create_dir("bec_plugins/scan_server/scan_plugins")
self.create_init_file("bec_plugins/scan_server")
self.create_init_file("bec_plugins/scan_server/scan_plugins")
# copy scan_plugin_template.py
scan_plugin_template_file = os.path.join(
current_dir, "plugin_setup_files", "scan_plugin_template.py"
)
os.system(
f"cp {scan_plugin_template_file} {self.target_dir}/bec_plugins/scan_server/scan_plugins"
)
def add_client(self):
self.create_dir("bec_plugins/bec_client")
self.create_init_file("bec_plugins/bec_client")
# high level interface
self.create_dir("bec_plugins/bec_client/high_level_interface")
self.create_init_file("bec_plugins/bec_client/high_level_interface")
# plugins
self.create_dir("bec_plugins/bec_client/plugins")
self.create_init_file("bec_plugins/bec_client/plugins")
# startup
self.create_dir("bec_plugins/bec_client/startup")
self.create_init_file("bec_plugins/bec_client/startup")
## copy pre_startup.py
pre_startup_file = os.path.join(current_dir, "plugin_setup_files", "pre_startup.py")
os.system(f"cp {pre_startup_file} {self.target_dir}/bec_plugins/bec_client/startup")
## copy post_startup.py
post_startup_file = os.path.join(current_dir, "plugin_setup_files", "post_startup.py")
os.system(f"cp {post_startup_file} {self.target_dir}/bec_plugins/bec_client/startup")
def add_device_server(self):
self.create_dir("bec_plugins/device_server")
self.create_init_file("bec_plugins/device_server")
def add_devices(self):
self.create_dir("bec_plugins/devices")
self.create_init_file("bec_plugins/devices")
def add_device_configs(self):
self.create_dir("bec_plugins/device_configs")
self.create_init_file("bec_plugins/device_configs")
def add_dap_services(self):
self.create_dir("bec_plugins/dap_services")
self.create_init_file("bec_plugins/dap_services")
def add_bin(self):
self.create_dir("bin")
if __name__ == "__main__":
struc = PluginStructure(sys.argv[1])
struc.add_plugins()
struc.copy_setup_files()
struc.add_scan_server()
struc.add_client()
struc.add_device_server()
struc.add_devices()
struc.add_device_configs()
struc.add_dap_services()
struc.add_bin()
print(f"Plugin structure created in {sys.argv[1]}")