def read_file(self, filename, namespace=None):
        """ Parse a file. """

        # Only parse the file if we haven't parsed it before or it has been
        # modified since we last parsed it!
        module, mod_time = self._database.get(filename, (None, None))
        if module is None or mod_time != os.stat(filename)[stat.ST_MTIME]:
            # Event notification.
            self.parsing_module = filename
            logger.debug('parsing module %s' % filename)

            module_factory = ModuleFactory()
            try:
                module = module_factory.from_file(filename, namespace)

                # Event notification.
                self.parsed_module = module
                logger.debug('parsed module %s' % filename)

                # Add the parsed module to the database.
                self._database[filename] = (
                    module, os.stat(filename)[stat.ST_MTIME]
                )
                self._database_changed = True

            except:
                logger.debug('error parsing module %s' % filename)

        if module is not None:
            self._index[module.name] = module

        else:
            print 'None for', filename, namespace
                
        return module
Esempio n. 2
0
def read_file(filename, namespace=None):
    """ Parses a file. """

    global MODULES
    global MODULES_CHANGED

    module, mod_time = MODULES.get(filename, (None, None))
    if module is None or mod_time != os.stat(filename)[stat.ST_MTIME]:
        logger.debug('parsing module %s' % filename)

        module_factory = ModuleFactory()
        try:
            module = module_factory.from_file(filename, namespace)

            # Add the parsed module to the cache.
            MODULES[filename] = (module, os.stat(filename)[stat.ST_MTIME])
            MODULES_CHANGED = True

        except:
            logger.exception('error parsing file %s' % filename)

    return module