Catalog doesn't take the Vocabulary object itself as an argument. It takes the (string) id of an acquirable Vocabulary. If you don't specify a string, it creates a standard non-globbing lexicon (Although a ZCatalog creates a globbing lexicon, go figure). Something like this should work (Assuming your product is an acquisition wrapper e.g. by subclassing Acquisition.Implicit):
my_vocab = Vocabulary(globbing=1) my_cat = Catalog(vocabulary='my_vocab')
I'm completely unsure why it was implemented this way. I can kinda understand for ZCatalog, but not really for Catalog. Anyone care to explain??
I'd like to explain, but I can't. I think the intent was to allow vocabularies to be shared between Catalog instances, but the implementation of the idea isn't ideal.