Mysteriously a tuple
Not the first time I've been stung by this, so it's worth recording the problem.
A function or call inexplicably returns not as the expected type but as a tuple containing the said type. After a furious amount of debugging, you determine that everything is acting as it should and returning the types that it should. Yet, somehow, the value you capture from a particular line is a tuple.
Your code will look something like this:
f = radio_input ('Pathogen', 'pathogen', pathogen_choices, env=d, ... ... helptext="Which organism are you looking for matches with?", default=None),
You may have spotted this already but it's the trailing comma. Easy to miss when you're scanning complex code and a series of nested calls, but instead of this:
x = long_complicated_stuff
you're doing this:
x = long_complicated_stuff,
which evalulates to this:
x = (long_complicated_stuff, )
i.e. an implicit one-element tuple
Remove the comma, obviously.