private void AddAssembly(KeyValuePair <Assembly, TopNamespaceTracker> assembly) { _references.Add(assembly); ThreadPool.QueueUserWorkItem(state => { // start initializing assemblies on background thread for quick response. foreach (string key in assembly.Value.GetMemberNames()) { var value = PythonAssemblyOps.GetBoundMember(_codeContext, assembly.Key, key); } }); }
/// <summary> /// Gets a top-level list of all the available modules as a list of MemberResults. /// </summary> /// <returns></returns> public MemberResult[] GetModules() { var d = new Dictionary <string, HashSet <Namespace> >(); foreach (var keyValue in Modules) { var modName = keyValue.Key; var moduleRef = keyValue.Value; HashSet <Namespace> l; if (!d.TryGetValue(modName, out l)) { d[modName] = l = new HashSet <Namespace>(); } if (moduleRef != null && moduleRef.Module != null) { // The REPL shows up here with value=None l.Add(moduleRef.Module); } } foreach (var r in _references) { foreach (string key in r.Value.GetMemberNames()) { var value = PythonAssemblyOps.GetBoundMember(_codeContext, r.Key, key); HashSet <Namespace> l2; if (!d.TryGetValue(key, out l2)) { d[key] = l2 = new HashSet <Namespace>(); } l2.Add(GetNamespaceFromObjects(value)); } } var result = new MemberResult[d.Count]; int pos = 0; foreach (var kvp in d) { result[pos++] = new MemberResult(kvp.Key, kvp.Value); } return(result); }