private ModulePath?FindModuleInSearchPath(IReadOnlyList <string> searchPaths, IReadOnlyDictionary <string, string> packages, string name)
        {
            if (searchPaths == null || searchPaths.Count == 0)
            {
                return(null);
            }

            var i        = name.IndexOf('.');
            var firstBit = i < 0 ? name : name.Remove(i);

            ModulePath          mp;
            Func <string, bool> isPackage = IsPackage;

            if (firstBit.EndsWithOrdinal("-stubs", ignoreCase: true))
            {
                isPackage = _fs.DirectoryExists;
            }

            var requireInitPy = ModulePath.PythonVersionRequiresInitPyFiles(Configuration.Version);

            if (packages != null && packages.TryGetValue(firstBit, out var searchPath) && !string.IsNullOrEmpty(searchPath))
            {
                if (ModulePath.FromBasePathAndName_NoThrow(searchPath, name, isPackage, null, requireInitPy, out mp, out _, out _, out _))
                {
                    return(mp);
                }
            }

            if (searchPaths.MaybeEnumerate()
                .Any(sp => ModulePath.FromBasePathAndName_NoThrow(sp, name, isPackage, null, requireInitPy, out mp, out _, out _, out _)))
            {
                return(mp);
            }
            return(null);
        }
示例#2
0
        private ModulePath?FindModuleInSearchPath(
            IEnumerable <PythonLibraryPath> searchPaths,
            IReadOnlyDictionary <string, string> packages,
            string name
            )
        {
            if (searchPaths == null || packages == null)
            {
                return(null);
            }

            int    i        = name.IndexOf('.');
            var    firstBit = i < 0 ? name : name.Remove(i);
            string searchPath;

            ModulePath mp;

            if (packages.TryGetValue(firstBit, out searchPath) && !string.IsNullOrEmpty(searchPath))
            {
                if (ModulePath.FromBasePathAndName_NoThrow(searchPath, name, out mp))
                {
                    return(mp);
                }
            }

            foreach (var sp in searchPaths.MaybeEnumerate())
            {
                if (ModulePath.FromBasePathAndName_NoThrow(sp.Path, name, out mp))
                {
                    return(mp);
                }
            }

            return(null);
        }
        protected virtual ModulePath?FindModuleInSearchPath(IReadOnlyList <string> searchPaths, IReadOnlyDictionary <string, string> packages, string name)
        {
            _log?.Log(TraceLevel.Verbose, "FindModule", name, "system", string.Join(", ", searchPaths));

            if (searchPaths == null)
            {
                return(null);
            }

            int    i        = name.IndexOf('.');
            var    firstBit = i < 0 ? name : name.Remove(i);
            string searchPath;

            ModulePath mp;

            if (packages != null && packages.TryGetValue(firstBit, out searchPath) && !string.IsNullOrEmpty(searchPath))
            {
                if (ModulePath.FromBasePathAndName_NoThrow(searchPath, name, out mp))
                {
                    return(mp);
                }
            }

            foreach (var sp in searchPaths.MaybeEnumerate())
            {
                if (ModulePath.FromBasePathAndName_NoThrow(sp, name, out mp))
                {
                    return(mp);
                }
            }

            return(null);
        }
示例#4
0
        private async Task <ModulePath?> FindModuleInUserSearchPathAsync(string name, CancellationToken cancel)
        {
            var searchPaths = _userSearchPaths;

            if (searchPaths == null || searchPaths.Count == 0)
            {
                return(null);
            }

            var packages = await GetUserSearchPathPackagesAsync(cancel);

            var    i        = name.IndexOf('.');
            var    firstBit = i < 0 ? name : name.Remove(i);
            string searchPath;

            ModulePath          mp;
            Func <string, bool> isPackage = _factory.IsPackage;

            if (firstBit.EndsWithOrdinal("-stubs", ignoreCase: true))
            {
                isPackage = Directory.Exists;
            }

            var requireInitPy = ModulePath.PythonVersionRequiresInitPyFiles(_factory.Configuration.Version);

            if (packages != null && packages.TryGetValue(firstBit, out searchPath) && !string.IsNullOrEmpty(searchPath))
            {
                if (ModulePath.FromBasePathAndName_NoThrow(searchPath, name, isPackage, null, requireInitPy, out mp, out _, out _, out _))
                {
                    ImportedFromUserSearchPath(name);
                    return(mp);
                }
            }

            foreach (var sp in searchPaths.MaybeEnumerate())
            {
                if (ModulePath.FromBasePathAndName_NoThrow(sp, name, isPackage, null, requireInitPy, out mp, out _, out _, out _))
                {
                    ImportedFromUserSearchPath(name);
                    return(mp);
                }
            }

            return(null);
        }
示例#5
0
        private ModulePath?FindModuleInSearchPath(IReadOnlyList <string> searchPaths, IReadOnlyDictionary <string, string> packages, string name)
        {
            if (searchPaths == null || searchPaths.Count == 0)
            {
                return(null);
            }

            _log?.Log(TraceLevel.Verbose, "FindModule", name, "system", string.Join(", ", searchPaths));

            int    i        = name.IndexOf('.');
            var    firstBit = i < 0 ? name : name.Remove(i);
            string searchPath;

            ModulePath          mp;
            Func <string, bool> isPackage = IsPackage;

            if (firstBit.EndsWithOrdinal("-stubs", ignoreCase: true))
            {
                isPackage = Directory.Exists;
            }

            var requireInitPy = ModulePath.PythonVersionRequiresInitPyFiles(_configuration.Version);

            if (packages != null && packages.TryGetValue(firstBit, out searchPath) && !string.IsNullOrEmpty(searchPath))
            {
                if (ModulePath.FromBasePathAndName_NoThrow(searchPath, name, isPackage, null, requireInitPy, out mp, out _, out _, out _))
                {
                    return(mp);
                }
            }

            foreach (var sp in searchPaths.MaybeEnumerate())
            {
                if (ModulePath.FromBasePathAndName_NoThrow(sp, name, isPackage, null, requireInitPy, out mp, out _, out _, out _))
                {
                    return(mp);
                }
            }

            return(null);
        }
示例#6
0
        private ModulePath?FindModuleInSearchPath(
            IEnumerable <string> searchPaths,
            IReadOnlyDictionary <string, string> packages,
            string name
            )
        {
            if (searchPaths == null)
            {
                return(null);
            }

            try {
                int    i        = name.IndexOf('.');
                var    firstBit = i < 0 ? name : name.Remove(i);
                string searchPath;

                ModulePath mp;

                if (packages != null && packages.TryGetValue(firstBit, out searchPath) && !string.IsNullOrEmpty(searchPath))
                {
                    if (ModulePath.FromBasePathAndName_NoThrow(searchPath, name, out mp))
                    {
                        return(mp);
                    }
                }

                foreach (var sp in searchPaths.MaybeEnumerate())
                {
                    if (ModulePath.FromBasePathAndName_NoThrow(sp, name, out mp))
                    {
                        return(mp);
                    }
                }
            } catch (Exception ex) {
                _log?.Log(TraceLevel.Error, "Exception", ex.ToString());
                _log?.Flush();
            }

            return(null);
        }
示例#7
0
        protected virtual async Task <ModulePath?> FindModuleInSearchPathAsync(string name)
        {
            var searchPaths = await GetSearchPathsAsync().ConfigureAwait(false);

            var packages = await GetImportableModulesAsync().ConfigureAwait(false);

            _log?.Log(TraceLevel.Verbose, "FindModule", name, "system", string.Join(", ", searchPaths));

            if (searchPaths == null)
            {
                return(null);
            }

            int    i        = name.IndexOf('.');
            var    firstBit = i < 0 ? name : name.Remove(i);
            string searchPath;

            ModulePath mp;

            if (packages != null && packages.TryGetValue(firstBit, out searchPath) && !string.IsNullOrEmpty(searchPath))
            {
                if (ModulePath.FromBasePathAndName_NoThrow(searchPath, name, out mp))
                {
                    return(mp);
                }
            }

            foreach (var sp in searchPaths.MaybeEnumerate())
            {
                if (ModulePath.FromBasePathAndName_NoThrow(sp, name, out mp))
                {
                    return(mp);
                }
            }

            return(null);
        }
示例#8
0
        private async Task <ModulePath?> FindModuleInUserSearchPathAsync(string name)
        {
            var searchPaths = _userSearchPaths;
            var packages    = await GetUserSearchPathPackagesAsync();

            if (searchPaths == null)
            {
                return(null);
            }

            int    i        = name.IndexOf('.');
            var    firstBit = i < 0 ? name : name.Remove(i);
            string searchPath;

            ModulePath mp;

            if (packages != null && packages.TryGetValue(firstBit, out searchPath) && !string.IsNullOrEmpty(searchPath))
            {
                if (ModulePath.FromBasePathAndName_NoThrow(searchPath, name, out mp))
                {
                    ImportedFromUserSearchPath(name);
                    return(mp);
                }
            }

            foreach (var sp in searchPaths.MaybeEnumerate())
            {
                if (ModulePath.FromBasePathAndName_NoThrow(sp, name, out mp))
                {
                    ImportedFromUserSearchPath(name);
                    return(mp);
                }
            }

            return(null);
        }