libsbml icon indicating copy to clipboard operation
libsbml copied to clipboard

FBC: Can't make package version 3 object in L3v2 core model.

Open luciansmith opened this issue 2 years ago • 1 comments

It's impossible to create a flux objective and add it to an L3v2 model:

  • If you run createFluxObjective(), it gives you an object with a getLevel() of 3, a getVersion() of 2, and a getPackageVersion() of 3. When you call 'setVariableType', it notices that getVersion is 2, and returns LIBSBML_UNEXPECTED_ATTRIBUTE.
  • If you create a FluxObjective with FluxObjective(3,1,3), it lets you call 'setVariableType', but doesn't let you call addFluxObjective(), because of the version mismatch to the core SBML object.

I propose that packages in general should never check the core level or version; they should only check the package version. (Perhaps the layout/render functions could check the core level, but even they shouldn't check the core version.) Putting 'version1' in the namespace string turns out to be a terrible idea, but that ship has sailed; at this point, all we can do is just not check it.

For the immediate problem, I say we don't check versions when calling 'addXXX', nor when calling 'setVariableType' for FBC objects, but a more thorough scouring of the code will probably be necessary to check for other packages moving forward.

@skeating @fbergmann Opinions?

luciansmith avatar Jan 18 '24 00:01 luciansmith

I agree, checking the packageVersion is definitely sufficient.

fbergmann avatar Jan 18 '24 23:01 fbergmann

Can we do this for all packages, not just FBC?

luciansmith avatar Aug 05 '24 17:08 luciansmith

I had no PR for anything else, I was going to just include the PRs we had open and make a release since it was requested by some. That include the changes we had. If you'd rather add things here. Then go ahead. As long as the package URIs remain untouched I'm fine with you adding other packages to this. If you won't get to it by this Thursday though, I would put it as issue in the issue tracker for another time. As otherwise I won't be able to make the release.

fbergmann avatar Aug 05 '24 17:08 fbergmann

Done! https://github.com/sbmlteam/libsbml/pull/380

luciansmith avatar Aug 05 '24 18:08 luciansmith