def get_by_regexp (entity, method): ''' returns a specific field of the given entity ''' meth = Autoload.get_by_regexp ("format", entity) if meth and meth.data.has_key (method): return meth.data [method] return None
def bibopen (entity, how = None): ''' Generic function to open a bibliographic database ''' def simple_try (url, how): # url is Fields.URL instance, only to be passed to opener base = None if how == None: listedmethods = Autoload.available ("format") for method in listedmethods: opener = get_by_name (method, 'open') if opener: base = opener (url, 1) if base is not None: return base return None opener = get_by_name (how, 'open') if opener: base = opener (url, 0) else: raise Exceptions.FormatError (_("method `%s' provides no opener") % how) return base # Consider the reference as an URL: url is an Fields.URL instance url = Fields.URL (entity) if url.url [0] == 'file' and not os.path.exists (url.url [2]): raise Exceptions.FileError (_("File `%s' does not exist") % url.get_url ()) # eventually load a new module if how is None: handler = Autoload.get_by_regexp ("format", url.get_url ()) if handler: how = handler.name base = simple_try (url, how) if base is None: raise Exceptions.FormatError (_("don't know how to open `%s'") % entity) return base