Ejemplo n.º 1
0
    def find_module(self, fullname, path=None):
        import clr
        namespaces, classes, generics = clr.get_assemblies_info()

        if fullname in namespaces or fullname in classes:
            return self  # fullname is a  .NET Module
        else:
            return None  # fullname is not a .NET Module
Ejemplo n.º 2
0
    def find_module(self, fullname, path=None):
        import clr
        namespaces, classes, generics = clr.get_assemblies_info()

        if fullname in namespaces or fullname in classes:
            return self # fullname is a  .NET Module
        else:
            return None # fullname is not a .NET Module
Ejemplo n.º 3
0
    def test_list_of_namespaces_and_classes(self):
        import clr
        ns, classes, generics = clr.get_assemblies_info()
        
        assert 'System' in ns
        assert 'System.Collections' in ns
        assert 'System.Runtime' in ns
        assert 'System.Runtime.InteropServices' in ns

        assert 'System' not in classes
        assert 'System.Math' in classes
        assert 'System.Collections.ArrayList' in classes

        assert 'System.Collections.Generic.List' in classes
        assert generics['System.Collections.Generic.List'] == 'System.Collections.Generic.List`1'
Ejemplo n.º 4
0
    def load_module(self, fullname):
        '''
            The load_module() must fulfill the following *before* it runs any code:
            Note that the module object *must* be in sys.modules before the
            loader executes the module code.  

          A  If 'fullname' exists in sys.modules, the loader must use that
             else the loader must create a new module object and add it to sys.modules.

                module = sys.modules.setdefault(fullname, new.module(fullname))

          B  The __file__ attribute must be set.  String say "<frozen>"

          C  The __name__ attribute must be set.  If one uses
              imp.new_module() then the attribute is set automatically.

          D  If it\'s a package, the __path__ variable must be set.  This must
              be a list, but may be empty if __path__ has no further
              significance to the importer (more on this later).

          E  It should add a __loader__ attribute to the module, set to the loader object. 

        '''
        # If it is a call for a Class then return with the Class reference
        import clr
        namespaces, classes, generics = clr.get_assemblies_info()

        if fullname in classes:
            assemblyname = classes[fullname]
            fullname = generics.get(fullname, fullname)
            ns, classname = fullname.rsplit('.', 1)
            sys.modules[fullname] = clr.load_cli_class(assemblyname, ns, classname)
        else:  # if not a call for actual class (say for namespaces) assign an empty module 
            if fullname not in sys.modules:
                mod = CLRModule(fullname)
                mod.__file__ = "<%s>" % self.__class__.__name__
                mod.__loader__ = self
                mod.__name__ = fullname
                # add it to the modules dict
                sys.modules[fullname] = mod
            else:
                mod = sys.modules[fullname]

            # if it is a PACKAGE then we are to initialize the __path__ for the module
            # we won't deal with Packages here
        return sys.modules[fullname]