nfdi4plants / ARCtrl

Library for management of Annotated Research Contexts (ARCs) using an in-memory representation and runtime-agnostic contract systems.
MIT License
11 stars 8 forks source link

[Feature request] Increase robustness when parsing to ROCrate json #390

Closed Freymaurer closed 3 months ago

Freymaurer commented 3 months ago

Just encountered this issue in Swate, trying to export to rocrate json:

image

Here is the reproduction code, it fails in .net too.

#r "nuget: ARCtrl, 2.0.0-alpha.7.swate"

open ARCtrl
open ARCtrl.Json

let a = ArcAssay.init("New Assay")

let t = a.InitTable("New Table0")

t.AddColumn(CompositeHeader.Input IOType.Sample, [|for i in 1 .. 8 do CompositeCell.FreeText (sprintf "Sample_%i" i)|])
t.AddColumn(CompositeHeader.Output IOType.Source, [|for i in 1 .. 8 do CompositeCell.FreeText (sprintf "Source_%i" i)|])

a.ToROCrateJsonString () 
- a.ToROCrateJsonString () ;;
System.Exception: Could not parse output header Output [Source Name]
   at Microsoft.FSharp.Core.PrintfModule.PrintFormatToStringThenFail@1448.Invoke(String message)
   at ARCtrl.Process.Conversion.ProcessParsing.outputGetter@423-1.Invoke(Dictionary`2 matrix, Int32 i)
   at ARCtrl.Process.Conversion.ProcessParsing.getProcessGetter@441.Invoke(Dictionary`2 matrix, Int32 i)
   at ARCtrl.Process.Conversion.ArcTable.GetProcesses(ArcTable)
   at ARCtrl.Process.Conversion.ArcTables-GetProcesses@755.Invoke(ArcTable t)
   at ARCtrl.Json.Assay.ROCrate.encoder(FSharpOption`1 studyName, ArcAssay a)
   at ARCtrl.Json.AssayExtensions.ArcAssay-toROCrateJsonString-Static@199.Invoke(ArcAssay obj)
   at <StartupCode$FSI_0004>.$FSI_0004.main@() in c:\Users\Kevin\Desktop\test.fsx:line 13
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Stopped due to error
Freymaurer commented 3 months ago

This seems to fail for ISA too!

HLWeil commented 3 months ago

I think I know the issue... Output can't be a Source.

https://isa-specs.readthedocs.io/en/latest/isajson.html#process-schema-json

HLWeil commented 3 months ago

We could just transform it to Sample when writing to Json though.

Freymaurer commented 3 months ago

Seems fine with me, or we need to apply the restrictions directly into ARCtrl data model