Esempio n. 1
0
        private SaveLoadResult SaveLoad(PythonLanguageVersion version, params AnalysisModule[] modules) {
            IPythonProjectEntry[] entries = new IPythonProjectEntry[modules.Length];

            var fact = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(version.ToVersion());
            var interp = fact.CreateInterpreter();

            var dbFolder = TestData.GetTempPath();

            var state = new PythonAnalysis(fact, interp, SharedDatabaseState.BuiltinName2x);
            state.CreateProjectOnDisk = true;
            for (int i = 0; i < modules.Length; i++) {
                state.AddModule(modules[i].ModuleName, modules[i].Code, modules[i].Filename);
            }

            state.WaitForAnalysis();

            new SaveAnalysis().Save(state.Analyzer, dbFolder);

            File.Copy(
                Path.Combine(PythonTypeDatabase.BaselineDatabasePath, "__builtin__.idb"),
                Path.Combine(dbFolder, "__builtin__.idb"),
                true
            );

            var loadFactory = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(
                version.ToVersion(),
                null,
                dbFolder
            );
            return new SaveLoadResult(CreateAnalyzer(loadFactory), state.CodeFolder);
        }
Esempio n. 2
0
        private SaveLoadResult SaveLoad(PythonLanguageVersion version, params AnalysisModule[] modules)
        {
            IPythonProjectEntry[] entries = new IPythonProjectEntry[modules.Length];

            var fact   = PythonInterpreterFactoryWithDatabase.CreateFromDatabase(version.ToVersion());
            var interp = fact.CreateInterpreter();

            var dbFolder = TestData.GetTempPath();

            var state = new PythonAnalysis(fact, interp);

            state.CreateProjectOnDisk = true;
            for (int i = 0; i < modules.Length; i++)
            {
                state.AddModule(modules[i].ModuleName, modules[i].Code, modules[i].Filename);
            }

            state.WaitForAnalysis();

            new SaveAnalysis().Save(state.Analyzer, dbFolder);
            File.WriteAllText(Path.Combine(dbFolder, "database.ver"), PythonTypeDatabase.CurrentVersion.ToString());

            File.Copy(
                Path.Combine(PythonTypeDatabase.BaselineDatabasePath, state.Analyzer._builtinName + ".idb"),
                Path.Combine(dbFolder, state.Analyzer._builtinName + ".idb"),
                true
                );

            var loadFactory = PythonInterpreterFactoryWithDatabase.CreateFromDatabase(version.ToVersion(), dbFolder);

            return(new SaveLoadResult(CreateAnalyzer(loadFactory), state.CodeFolder));
        }
Esempio n. 3
0
        private static void FullStdLibTest(PythonVersion v)
        {
            v.AssertInstalled();
            var modules = ModulePath.GetModulesInLib(v.PrefixPath).ToList();
            var paths   = modules.Select(m => m.LibraryPath).Distinct().ToArray();

            bool anySuccess = false;

            using (var analyzer = new PythonAnalysis(v.Version)) {
                analyzer.SetSearchPaths(paths);

                foreach (var modName in modules)
                {
                    if (modName.IsCompiled || modName.IsNativeExtension)
                    {
                        continue;
                    }
                    var mod = analyzer.Analyzer.Interpreter.ImportModule(modName.ModuleName);
                    if (mod == null)
                    {
                        Trace.TraceWarning("failed to import {0} from {1}".FormatInvariant(modName.ModuleName, modName.SourceFile));
                    }
                    else
                    {
                        anySuccess = true;
                        mod.GetMemberNames(analyzer.ModuleContext).ToList();
                    }
                }
            }
            Assert.IsTrue(anySuccess, "failed to import any modules at all");
        }
Esempio n. 4
0
        public void AstValues()
        {
            using (var entry = new PythonAnalysis(PythonLanguageVersion.V35)) {
                entry.SetSearchPaths(TestData.GetPath(@"TestData\AstAnalysis"));
                entry.AddModule("test-module", "from Values import *");
                entry.WaitForAnalysis();

                entry.AssertHasAttr("",
                                    "x", "y", "z", "pi", "l", "t", "d", "s",
                                    "X", "Y", "Z", "PI", "L", "T", "D", "S"
                                    );

                entry.AssertIsInstance("x", BuiltinTypeId.Int);
                entry.AssertIsInstance("y", BuiltinTypeId.Str);
                entry.AssertIsInstance("z", BuiltinTypeId.Bytes);
                entry.AssertIsInstance("pi", BuiltinTypeId.Float);
                entry.AssertIsInstance("l", BuiltinTypeId.List);
                entry.AssertIsInstance("t", BuiltinTypeId.Tuple);
                entry.AssertIsInstance("d", BuiltinTypeId.Dict);
                entry.AssertIsInstance("s", BuiltinTypeId.Set);
                entry.AssertIsInstance("X", BuiltinTypeId.Int);
                entry.AssertIsInstance("Y", BuiltinTypeId.Str);
                entry.AssertIsInstance("Z", BuiltinTypeId.Bytes);
                entry.AssertIsInstance("PI", BuiltinTypeId.Float);
                entry.AssertIsInstance("L", BuiltinTypeId.List);
                entry.AssertIsInstance("T", BuiltinTypeId.Tuple);
                entry.AssertIsInstance("D", BuiltinTypeId.Dict);
                entry.AssertIsInstance("S", BuiltinTypeId.Set);
            }
        }
Esempio n. 5
0
        private static void FullStdLibTest(PythonVersion v)
        {
            v.AssertInstalled();
            var factory = new AstPythonInterpreterFactory(v.Configuration, null);
            var modules = ModulePath.GetModulesInLib(v.PrefixPath).ToList();

            bool anySuccess = false;
            bool anyExtensionSuccess = false, anyExtensionSeen = false;

            using (var analyzer = new PythonAnalysis(factory)) {
                foreach (var modName in modules)
                {
                    anyExtensionSeen |= modName.IsNativeExtension;
                    var mod = analyzer.Analyzer.Interpreter.ImportModule(modName.ModuleName);
                    if (mod == null)
                    {
                        Trace.TraceWarning("failed to import {0} from {1}".FormatInvariant(modName.ModuleName, modName.SourceFile));
                    }
                    else
                    {
                        anySuccess           = true;
                        anyExtensionSuccess |= modName.IsNativeExtension;
                        mod.GetMemberNames(analyzer.ModuleContext).ToList();
                    }
                }
            }
            Assert.IsTrue(anySuccess, "failed to import any modules at all");
            Assert.IsTrue(anyExtensionSuccess || !anyExtensionSeen, "failed to import all extension modules");
        }
Esempio n. 6
0
        public void ImportPydFromSearchPath()
        {
            var analyzer = new PythonAnalysis("Global|PythonCore|2.7-32");

            analyzer.AddModule("test-module", "from spam import *");
            analyzer.WaitForAnalysis();
            AssertUtil.CheckCollection(analyzer.GetAllNames(), null, new[] { "system", "spam" });

            analyzer.SetSearchPaths(TestData.GetPath("TestData"));
            analyzer.ReanalyzeAll(CancellationTokens.After60s);

            AssertUtil.CheckCollection(analyzer.GetAllNames(), new[] { "system" }, new[] { "spam" });
        }
Esempio n. 7
0
        public void ImportFromSearchPath()
        {
            var analyzer = new PythonAnalysis(PythonLanguageVersion.V35);

            analyzer.AddModule("test-module", "from test_package import *");
            analyzer.WaitForAnalysis();
            AssertUtil.CheckCollection(analyzer.GetAllNames(), null, new[] { "package_method", "package_method_two", "test_package" });

            analyzer.SetSearchPaths(TestData.GetPath("TestData\\AddImport"));
            analyzer.ReanalyzeAll();

            AssertUtil.CheckCollection(analyzer.GetAllNames(), new[] { "package_method", "package_method_two" }, new[] { "test_package" });
        }
Esempio n. 8
0
        public void ImportPydFromSearchPath()
        {
            PythonTypeDatabase.ExtensionModuleLoader.AlwaysGenerateDb = true;
            try {
                var analyzer = new PythonAnalysis("Global|PythonCore|2.7-32");

                analyzer.AddModule("test-module", "from spam import *");
                analyzer.WaitForAnalysis();
                AssertUtil.CheckCollection(analyzer.GetAllNames(), null, new[] { "system", "spam" });

                analyzer.SetSearchPaths(TestData.GetPath("TestData"));
                analyzer.ReanalyzeAll(CancellationTokens.After60s);

                AssertUtil.CheckCollection(analyzer.GetAllNames(), new[] { "system" }, new[] { "spam" });
            } finally {
                PythonTypeDatabase.ExtensionModuleLoader.AlwaysGenerateDb = false;
            }
        }
Esempio n. 9
0
        private async Task FullStdLibTest(PythonVersion v, params string[] skipModules)
        {
            v.AssertInstalled();
            var factory = new AstPythonInterpreterFactory(v.Configuration, new InterpreterFactoryCreationOptions {
                DatabasePath     = TestData.GetTempPath(),
                UseExistingCache = false
            });
            var modules = ModulePath.GetModulesInLib(v.PrefixPath).ToList();

            var skip = new HashSet <string>(skipModules);

            skip.UnionWith(new[] {
                "matplotlib.backends._backend_gdk",
                "matplotlib.backends._backend_gtkagg",
                "matplotlib.backends._gtkagg",
            });

            bool anySuccess = false;
            bool anyExtensionSuccess = false, anyExtensionSeen = false;
            bool anyParseError = false;

            using (var analyzer = new PythonAnalysis(factory)) {
                try {
                    var tasks = new List <Task <Tuple <ModulePath, IPythonModule> > >();

                    var interp = (AstPythonInterpreter)analyzer.Analyzer.Interpreter;
                    foreach (var m in skip)
                    {
                        interp.AddUnimportableModule(m);
                    }

                    foreach (var r in modules
                             .Where(m => !skip.Contains(m.ModuleName))
                             .GroupBy(m => {
                        int i = m.FullName.IndexOf('.');
                        return(i <= 0 ? m.FullName : m.FullName.Remove(i));
                    })
                             .AsParallel()
                             .SelectMany(g => g.Select(m => Tuple.Create(m, interp.ImportModule(m.ModuleName))))
                             )
                    {
                        var modName = r.Item1;
                        var mod     = r.Item2;

                        anyExtensionSeen |= modName.IsNativeExtension;
                        if (mod == null)
                        {
                            Trace.TraceWarning("failed to import {0} from {1}", modName.ModuleName, modName.SourceFile);
                        }
                        else if (mod is AstScrapedPythonModule smod)
                        {
                            if (smod.ParseErrors?.Any() ?? false)
                            {
                                anyParseError = true;
                                Trace.TraceError("Parse errors in {0}", modName.SourceFile);
                                foreach (var e in smod.ParseErrors)
                                {
                                    Trace.TraceError(e);
                                }
                            }
                            else
                            {
                                anySuccess           = true;
                                anyExtensionSuccess |= modName.IsNativeExtension;
                                mod.GetMemberNames(analyzer.ModuleContext).ToList();
                            }
                        }
                        else if (mod is AstPythonModule)
                        {
                            // pass
                        }
                        else
                        {
                            Trace.TraceError("imported {0} as type {1}", modName.ModuleName, mod.GetType().FullName);
                        }
                    }
                } finally {
                    _analysisLog = analyzer.GetLogContent(CultureInfo.InvariantCulture);
                }
            }
            Assert.IsTrue(anySuccess, "failed to import any modules at all");
            Assert.IsTrue(anyExtensionSuccess || !anyExtensionSeen, "failed to import all extension modules");
            Assert.IsFalse(anyParseError, "parse errors occurred");
        }
Esempio n. 10
0
 public SaveLoadResult(PythonAnalysis analyzer, string dir)
 {
     Analyzer = analyzer;
     _dir     = dir;
 }
Esempio n. 11
0
        private static void FullStdLibTest(PythonVersion v) {
            v.AssertInstalled();
            var modules = ModulePath.GetModulesInLib(v.PrefixPath).ToList();
            var paths = modules.Select(m => m.LibraryPath).Distinct().ToArray();

            bool anySuccess = false;

            using (var analyzer = new PythonAnalysis(v.Version)) {
                analyzer.SetSearchPaths(paths);

                foreach (var modName in modules) {
                    if (modName.IsCompiled || modName.IsNativeExtension) {
                        continue;
                    }
                    var mod = analyzer.Analyzer.Interpreter.ImportModule(modName.ModuleName);
                    if (mod == null) {
                        Trace.TraceWarning("failed to import {0} from {1}".FormatInvariant(modName.ModuleName, modName.SourceFile));
                    } else {
                        anySuccess = true;
                        mod.GetMemberNames(analyzer.ModuleContext).ToList();
                    }
                }
            }
            Assert.IsTrue(anySuccess, "failed to import any modules at all");
        }
Esempio n. 12
0
        public void AstValues() {
            using (var entry = new PythonAnalysis(PythonLanguageVersion.V35)) {
                entry.SetSearchPaths(TestData.GetPath(@"TestData\AstAnalysis"));
                entry.AddModule("test-module", "from Values import *");
                entry.WaitForAnalysis();

                entry.AssertHasAttr("",
                    "x", "y", "z", "pi", "l", "t", "d", "s",
                    "X", "Y", "Z", "PI", "L", "T", "D", "S"
                );

                entry.AssertIsInstance("x", BuiltinTypeId.Int);
                entry.AssertIsInstance("y", BuiltinTypeId.Str);
                entry.AssertIsInstance("z", BuiltinTypeId.Bytes);
                entry.AssertIsInstance("pi", BuiltinTypeId.Float);
                entry.AssertIsInstance("l", BuiltinTypeId.List);
                entry.AssertIsInstance("t", BuiltinTypeId.Tuple);
                entry.AssertIsInstance("d", BuiltinTypeId.Dict);
                entry.AssertIsInstance("s", BuiltinTypeId.Set);
                entry.AssertIsInstance("X", BuiltinTypeId.Int);
                entry.AssertIsInstance("Y", BuiltinTypeId.Str);
                entry.AssertIsInstance("Z", BuiltinTypeId.Bytes);
                entry.AssertIsInstance("PI", BuiltinTypeId.Float);
                entry.AssertIsInstance("L", BuiltinTypeId.List);
                entry.AssertIsInstance("T", BuiltinTypeId.Tuple);
                entry.AssertIsInstance("D", BuiltinTypeId.Dict);
                entry.AssertIsInstance("S", BuiltinTypeId.Set);
            }
        }
Esempio n. 13
0
        public void ImportFromSearchPath() {
            var analyzer = new PythonAnalysis(PythonLanguageVersion.V35);
            analyzer.AddModule("test-module", "from test_package import *");
            analyzer.WaitForAnalysis();
            AssertUtil.CheckCollection(analyzer.GetAllNames(), null, new[] { "package_method", "package_method_two", "test_package" });

            analyzer.SetSearchPaths(TestData.GetPath("TestData\\AddImport"));
            analyzer.ReanalyzeAll();

            AssertUtil.CheckCollection(analyzer.GetAllNames(), new[] { "package_method", "package_method_two" }, new[] { "test_package" });
        }
Esempio n. 14
0
        public void ImportPydFromSearchPath() {
            PythonTypeDatabase.ExtensionModuleLoader.AlwaysGenerateDb = true;
            try {
                var analyzer = new PythonAnalysis("Global|PythonCore|2.7-32");

                analyzer.AddModule("test-module", "from spam import *");
                analyzer.WaitForAnalysis();
                AssertUtil.CheckCollection(analyzer.GetAllNames(), null, new[] { "system", "spam" });

                analyzer.SetSearchPaths(TestData.GetPath("TestData"));
                analyzer.ReanalyzeAll(CancellationTokens.After60s);

                AssertUtil.CheckCollection(analyzer.GetAllNames(), new[] { "system" }, new[] { "spam" });
            } finally {
                PythonTypeDatabase.ExtensionModuleLoader.AlwaysGenerateDb = false;
            }
        }
Esempio n. 15
0
 public SaveLoadResult(PythonAnalysis analyzer, string dir) {
     Analyzer = analyzer;
     _dir = dir;
 }
Esempio n. 16
0
        private SaveLoadResult SaveLoad(PythonLanguageVersion version, params AnalysisModule[] modules) {
            IPythonProjectEntry[] entries = new IPythonProjectEntry[modules.Length];

            var fact = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(version.ToVersion());
            var interp = fact.CreateInterpreter();

            var dbFolder = TestData.GetTempPath(randomSubPath: true);
            Directory.CreateDirectory(dbFolder);

            var state = new PythonAnalysis(fact, interp, SharedDatabaseState.BuiltinName2x);
            state.CreateProjectOnDisk = true;
            for (int i = 0; i < modules.Length; i++) {
                state.AddModule(modules[i].ModuleName, modules[i].Code, modules[i].Filename);
            }

            state.WaitForAnalysis();

            new SaveAnalysis().Save(state.Analyzer, dbFolder);

            File.Copy(
                Path.Combine(PythonTypeDatabase.BaselineDatabasePath, "__builtin__.idb"),
                Path.Combine(dbFolder, "__builtin__.idb"),
                true
            );

            var loadFactory = InterpreterFactoryCreator.CreateAnalysisInterpreterFactory(
                version.ToVersion(),
                null,
                dbFolder
            );
            return new SaveLoadResult(CreateAnalyzer(loadFactory), state.CodeFolder);
        }