Im not sure if this is the right place to do this, but Im not sure how else to ping people, so…
I’m trying to put together a new semantic type format for a file I need. I’ve got my defination (adapted from the dada2 plugin)
from qiime2.plugin import SemanticType, model
from q2_types.feature_data import FeatureData
KmerMap = SemanticType('KmerMap', variant_of=FeatureData.field['type'])
So, then I go to register the new semantic type in my plugin
from qiime2.plugin import Plugin
from q2_types.feature_data import (FeatureData,
Sequence)
from q2_sidle.import KmerMap, KmerMapFormat, KmerMapDirFrmt
plugin = Plugin(
name='sidle',
...
)
plugin.register_semantic_types(KmerMap)
When I go to update with qiime dev refresh-cache, I get a value error:
ValueError: Duplicate semantic type ('FeatureData') defined in plugins: 'sidle' and 'types'
Im not sure how to get my KmerMap semantic type registered and would love some help!
Best,
Justine
2 Likes
thermokarst
(Matthew Ryan Dillon)
assigned thermokarst
#2
Any chance you've just missed an accidental registration of FeatureData somewhere in your plugin? If you have the source somewhere I would be happy to take a look. The code you have presented here works as expected:
from qiime2.plugin import SemanticType
from q2_types.feature_data import FeatureData, DifferentialDirectoryFormat
from qiime2.plugin import Plugin
from qiime2.sdk import PluginManager
plugin = Plugin(name='sidle', version='foo', website='bar')
KmerMap = SemanticType('KmerMap', variant_of=FeatureData.field['type'])
# this part is necessary, but I am doing it so that we can show the complete
# registration, below
plugin.register_semantic_type_to_format(
FeatureData[KmerMap],
artifact_format=DifferentialDirectoryFormat)
plugin.register_semantic_types(KmerMap)
# This part is because I am testing this in an interactive python session
pm = PluginManager(add_plugins=False)
pm.add_plugin(plugin, package='sidle', project_name='sidle')
from q2_types.plugin_setup import plugin as types_plugin
pm.add_plugin(types_plugin, project_name='types')
# confirm new semantic type
print(pm.get_semantic_types()['FeatureData[KmerMap]'])
this should yield:
SemanticTypeRecord(semantic_type=FeatureData[KmerMap], plugin=<qiime2.plugin.plugin.Plugin object at 0x10ceece10>)
You can see an example "in the wild" here:
Maybe do a global search in your code to look for all of the registration you are performing?
1 Like
thermokarst
(Matthew Ryan Dillon)
unassigned thermokarst
#4