diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3fec32c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +tmp/ diff --git a/copier.yml b/copier.yml index 091a81d..8e0ca3d 100644 --- a/copier.yml +++ b/copier.yml @@ -52,13 +52,12 @@ dotnet_name: when: false dotnet_full_name: - # Eg: Aind.Behavior.NewProject - default: '{{ (prefix | replace("-", " ") | title | replace(" ", ".")) }}.{{ (dotnet_name) }}' + # Eg: UclOpenNewProject + default: '{{ (prefix | replace("-", " ") | title | replace(" ", "")) }}{{ (dotnet_name) }}' help: Internal .NET module name (auto-generated) when: false python_class_prefix: - # Eg: AindBehaviorNewProject default: '{{ dotnet_full_name | replace(".", "") }}' help: Internal Python class prefix (auto-generated) type: str diff --git a/template/examples/session.py.jinja b/template/examples/session.py.jinja index e98d7dd..e442ffa 100644 --- a/template/examples/session.py.jinja +++ b/template/examples/session.py.jinja @@ -1,7 +1,7 @@ import datetime import os -from swc.aeon.schema import Experiment +from ucl_open.rigs.experiment import Experiment # TODO - autofill experiment fields session = Experiment( diff --git a/template/scripts/deploy.ps1 b/template/scripts/deploy.ps1.jinja similarity index 86% rename from template/scripts/deploy.ps1 rename to template/scripts/deploy.ps1.jinja index 42f5b67..fc41560 100644 --- a/template/scripts/deploy.ps1 +++ b/template/scripts/deploy.ps1.jinja @@ -17,7 +17,13 @@ if (Test-Path -Path ./.venv) { &uv venv .\.venv\Scripts\Activate.ps1 Write-Output "Synchronizing environment..." -&uv sync +&uv sync + +Write-Output "Creating sgen output folder" +mkdir src\DataSchemas + +Write-Output "Generate placeholder extension classes..." +&uv run .\src\{{ python_folder_name }}\regenerate.py Write-Output "Creating a Bonsai environment and installing packages..." if (Test-Path -Path "bonsai") { @@ -32,7 +38,4 @@ if (Test-Path -Path "bonsai") { Set-Location .. Write-Output "Creating bonsai extensions folder..." -mkdir src\Extensions - -Write-Output "Creating sgen output folder" -mkdir src\DataSchemas \ No newline at end of file +mkdir src\Extensions \ No newline at end of file diff --git a/template/src/Extensions/LoadSchemas.cs.jinja b/template/src/Extensions/LoadSchemas.cs.jinja new file mode 100644 index 0000000..bff108f --- /dev/null +++ b/template/src/Extensions/LoadSchemas.cs.jinja @@ -0,0 +1,37 @@ +using System; +using System.ComponentModel; +using System.IO; +using System.Reactive.Linq; +using Bonsai; +using {{ dotnet_full_name }}DataSchema; + +public class LoadSchemas : Source> +{ + [Description("The relative or absolute path of the session file to open for reading.")] + [Editor("Bonsai.Design.OpenFileNameEditor, Bonsai.Design", DesignTypes.UITypeEditor)] + public string SessionSettingsPath {get; set;} + + [Description("The relative or absolute path of the rig file to open for reading.")] + [Editor("Bonsai.Design.OpenFileNameEditor, Bonsai.Design", DesignTypes.UITypeEditor)] + public string RigSettingsPath {get; set;} + + [Description("The relative or absolute path of the task file to open for reading.")] + [Editor("Bonsai.Design.OpenFileNameEditor, Bonsai.Design", DesignTypes.UITypeEditor)] + public string TaskLogicSettingsPath {get; set;} + + public override IObservable> Generate() + { + string sessionSettingsRaw = File.ReadAllText(SessionSettingsPath); + string rigSettingsRaw = File.ReadAllText(RigSettingsPath); + string taskLogicSettingsRaw = File.ReadAllText(TaskLogicSettingsPath); + + var sessionSource = Observable.Return(Newtonsoft.Json.JsonConvert.DeserializeObject(sessionSettingsRaw)); + var rigSource = Observable.Return(Newtonsoft.Json.JsonConvert.DeserializeObject<{{ dotnet_full_name }}Rig>(rigSettingsRaw)); + var taskLogicSource = Observable.Return(Newtonsoft.Json.JsonConvert.DeserializeObject<{{ dotnet_full_name }}TaskLogic>(taskLogicSettingsRaw)); + + return sessionSource.Zip(rigSource, taskLogicSource, (s1, s2, s3) => + { + return Tuple.Create(s1, s2, s3); + }); + } +} \ No newline at end of file diff --git a/template/src/{{ python_folder_name }}/regenerate.py.jinja b/template/src/{{ python_folder_name }}/regenerate.py.jinja index 8f2754a..bbb0a80 100644 --- a/template/src/{{ python_folder_name }}/regenerate.py.jinja +++ b/template/src/{{ python_folder_name }}/regenerate.py.jinja @@ -17,6 +17,7 @@ def main(): models = [ {{ python_folder_name }}.task.{{ python_class_prefix }}TaskLogic, {{ python_folder_name }}.rig.{{ python_class_prefix }}Rig, + Experiment ] model = pydantic.RootModel[Union[tuple(models)]]