示例#1
0
        public static async Task WarnIfAzureFunctionsWorkerInRequirementsTxt()
        {
            if (FileSystemHelpers.FileExists(Path.Join(Environment.CurrentDirectory, Constants.RequirementsTxt)))
            {
                List <PythonPackage> packages = await RequirementsTxtParser.ParseRequirementsTxtFile(Environment.CurrentDirectory);

                PythonPackage workerPackage = packages.FirstOrDefault(p => p.Name == "azure-functions-worker");
                if (workerPackage != null)
                {
                    ColoredConsole.WriteLine(WarningColor($"Please remove '{workerPackage.Name}{workerPackage.Specification}' from requirements.txt as it may conflict with the Azure Functions platform."));
                }
            }
        }
        public void ShouldReturnPackageWithSpecification(string content, string expectedName, string expectedSpec)
        {
            List <PythonPackage> result = RequirementsTxtParser.ParseRequirementsTxtContent("" +
                                                                                            content);

            Assert.Single(result);

            PythonPackage numpyPackage = result[0];

            Assert.Equal(expectedName, numpyPackage.Name);
            Assert.Equal(expectedSpec, numpyPackage.Specification);
            Assert.Empty(numpyPackage.EnvironmentMarkers);
            Assert.Empty(numpyPackage.DirectReference);
        }
        public void ShouldReturnPackageWithSpecAndEnvironmentMarker()
        {
            List <PythonPackage> result = RequirementsTxtParser.ParseRequirementsTxtContent("" +
                                                                                            "numpy>=3.5.1; python_version == '2.7'");

            Assert.Single(result);

            PythonPackage numpyPackage = result[0];

            Assert.Equal("numpy", numpyPackage.Name);
            Assert.Equal(">=3.5.1", numpyPackage.Specification);
            Assert.Equal("python_version == '2.7'", numpyPackage.EnvironmentMarkers);
            Assert.Empty(numpyPackage.DirectReference);
        }
        public void PackageSpecWithDirectReference()
        {
            List <PythonPackage> result = RequirementsTxtParser.ParseRequirementsTxtContent("" +
                                                                                            "numpy==3.5.2 @ https://direct.reference/numpy");

            Assert.Single(result);

            PythonPackage numpyPackage = result[0];

            Assert.Equal("numpy", numpyPackage.Name);
            Assert.Equal("==3.5.2", numpyPackage.Specification);
            Assert.Empty(numpyPackage.EnvironmentMarkers);
            Assert.Equal("https://direct.reference/numpy", numpyPackage.DirectReference);
        }
        private void AssignImportedVariables(IPythonModule module, DottedName moduleImportExpression, NameExpression asNameExpression)
        {
            // "import fob.oar as baz" is handled as
            // baz = import_module('fob.oar')
            if (asNameExpression != null)
            {
                Eval.DeclareVariable(asNameExpression.Name, module, asNameExpression);
                return;
            }

            // "import fob.oar" is handled as
            // import_module('fob.oar')
            // fob = import_module('fob')
            var importNames = moduleImportExpression.Names;

            PythonPackage pythonPackage = null;
            var           existingDepth = 0;

            var childPackage = Eval.GetInScope <PythonPackage>(importNames[0].Name);

            while (childPackage != null && existingDepth < importNames.Count - 1)
            {
                existingDepth++;
                pythonPackage = childPackage;
                childPackage  = pythonPackage.GetMember <PythonPackage>(importNames[existingDepth].Name);
            }

            var child = module;

            for (var i = importNames.Count - 2; i >= existingDepth; i--)
            {
                var childName  = importNames[i + 1].Name;
                var parentName = importNames[i].Name;
                var parent     = new PythonPackage(parentName, Eval.Services);
                parent.AddChildModule(childName, child);
                child = parent;
            }

            if (pythonPackage == null)
            {
                Eval.DeclareVariable(importNames[0].Name, child, importNames[0]);
            }
            else
            {
                pythonPackage.AddChildModule(importNames[existingDepth].Name, child);
            }
        }