/// <summary> /// Returns the database for this factory. This database may be shared /// between callers and should be cloned before making modifications. /// /// This function never returns null. /// </summary> public PythonTypeDatabase GetCurrentDatabase() { if (_typeDb == null || _typeDb.DatabaseDirectory != DatabasePath) { _typeDb = MakeTypeDatabase(DatabasePath) ?? PythonTypeDatabase.CreateDefaultTypeDatabase(this); } return _typeDb; }
/// <summary> /// Returns the database for this factory, optionally excluding package /// analysis. This database may be shared between callers and should be /// cloned before making modifications. /// /// This function never returns null. /// </summary> public PythonTypeDatabase GetCurrentDatabase(bool includeSitePackages) { if (includeSitePackages) { return GetCurrentDatabase(); } if (_typeDbWithoutPackages == null || _typeDbWithoutPackages.DatabaseDirectory != DatabasePath) { _typeDbWithoutPackages = MakeTypeDatabase(DatabasePath, false) ?? PythonTypeDatabase.CreateDefaultTypeDatabase(this); } return _typeDbWithoutPackages; }
/// <summary> /// Returns a new database loaded from the specified path. If null is /// returned, <see cref="GetCurrentDatabase"/> will assume the default /// completion DB is intended. /// </summary> /// <remarks> /// This is intended for overriding in derived classes. To get a /// queryable database instance, use <see cref="GetCurrentDatabase"/> or /// <see cref="CreateInterpreter"/>. /// </remarks> public virtual PythonTypeDatabase MakeTypeDatabase(string databasePath, bool includeSitePackages = true) { if (!string.IsNullOrEmpty(databasePath) && !IsGenerating && (string.IsNullOrEmpty(Configuration.InterpreterPath) || PythonTypeDatabase.IsDatabaseVersionCurrent(databasePath))) { var paths = new List<string>(); paths.Add(databasePath); if (includeSitePackages) { paths.AddRange(PathUtils.EnumerateDirectories(databasePath, recurse: false)); } try { return new PythonTypeDatabase(this, paths); } catch (IOException) { } catch (UnauthorizedAccessException) { } } return PythonTypeDatabase.CreateDefaultTypeDatabase(this); }