Example #1
0
        protected static async Task <bool> DetectMissingPackagesAsync(IPackageManager packageManager, string reqTxtPath)
        {
            try {
                return(await PipRequirementsUtils.DetectMissingPackagesAsync(
                           packageManager.Factory.Configuration.InterpreterPath,
                           reqTxtPath
                           ));
            } catch (IOException) {
            } catch (OperationCanceledException) {
            }

            return(false);
        }
Example #2
0
        private async Task DetectReqPkgMissingAsync(PythonVersion pythonInterpreter)
        {
            string virtualEnvPath     = TestData.GetTempPath();
            string interpreterExePath = Path.Combine(virtualEnvPath, "Scripts", "python.exe");
            string reqTextPath        = Path.Combine(virtualEnvPath, "requirements.txt");
            var    installPackages    = new[] { "cookies >= 2.0", "Bottle==0.8.2" };

            pythonInterpreter.CreateVirtualEnv(virtualEnvPath, installPackages);

            // Test cases for packages not missing
            bool isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath);

            Assert.IsFalse(isPackageMissing, "Expected no missing packages because requirements.txt does not exist");

            File.WriteAllText(reqTextPath, String.Empty);
            isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath);

            Assert.IsFalse(isPackageMissing, "Expected no missing packages because requirements.txt is empty");
            File.Delete(reqTextPath);

            File.WriteAllLines(reqTextPath, installPackages);
            File.AppendAllLines(reqTextPath,
                                new string[] {
                "    ",
                "$InvalidLineOfText   ",
                "#MissingPackageName",
                " git+https://myvcs.com/some_dependency@",
                "coo kies",
                "cookies >  = 100 ",
                "cookies >= 1.0 <= 2.0 flask == 2.0"
            });
            isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath);

            Assert.IsFalse(isPackageMissing, "Expected no missing packages because all packages are installed and invalid lines should be ignored");
            File.Delete(reqTextPath);

            File.WriteAllLines(reqTextPath, installPackages, encoding: new UTF8Encoding(true));
            isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath);

            Assert.IsFalse(isPackageMissing, "Expected no missing packages because all packages are installed and UTF-8 BOM signature should be ignored");
            File.Delete(reqTextPath);

            // Test cases for packages missing
            File.WriteAllLines(reqTextPath,
                               new string[] { "   MissingPackageName   " });
            isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath);

            Assert.IsTrue(isPackageMissing, "Expected missing packages because \"MissingPackageName\" it is not installed");
            File.Delete(reqTextPath);

            File.WriteAllLines(reqTextPath,
                               new string[] { "Cookies<=1.0" });
            isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath);

            Assert.IsTrue(isPackageMissing, "Expected missing packages because \"cookies\" is incorrect version");
            File.Delete(reqTextPath);

            File.WriteAllLines(reqTextPath,
                               new string[] { "Cookies>=1.0", "Cookies>=100.0" });
            isPackageMissing = await PipRequirementsUtils.DetectMissingPackagesAsync(interpreterExePath, reqTextPath);

            Assert.IsTrue(isPackageMissing, "Expected missing package because \"cookies\" has a valid and invalid package version");
            File.Delete(reqTextPath);
        }