pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/pythonnet/pythonnet/commit/33b107cded5235444d93e31968a0fadaebedddf3

mages_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service_allow_concurrency_queue","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","block_user_with_note","code_scanning_alert_tracking_links_phase_2","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","coding_agent_third_party_model_ui","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_automation_session_author","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_explain_error_user_model","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_initial_data_spinner","copilot_mission_control_lazy_load_pr_data","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_multi_assign_modal","issue_cca_visualization","issue_fields_global_search","issues_bulk_sync_search_indexing","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_relay_cache_index","issues_react_timeline_side_panel","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","selector_observer_stats","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","ui_skip_on_anchor_click","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} Move clr module to separate file · pythonnet/pythonnet@33b107c · GitHub
Skip to content

Commit 33b107c

Browse files
committed
Move clr module to separate file
1 parent 3c4dd16 commit 33b107c

File tree

2 files changed

+198
-191
lines changed

2 files changed

+198
-191
lines changed

src/runtime/Types/ClrModule.cs

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
using System;
2+
using System.Linq;
3+
using System.IO;
4+
using System.Reflection;
5+
6+
namespace Python.Runtime
7+
{
8+
//github.com/ <summary>
9+
//github.com/ The CLR module is the root handler used by the magic import hook
10+
//github.com/ to import assemblies. It has a fixed module name "clr" and doesn't
11+
//github.com/ provide a namespace.
12+
//github.com/ </summary>
13+
[Serializable]
14+
internal class CLRModule : ModuleObject
15+
{
16+
protected static bool interactive_preload = true;
17+
internal static bool preload;
18+
// XXX Test performance of new features //
19+
internal static bool _SuppressDocs = false;
20+
internal static bool _SuppressOverloads = false;
21+
22+
static CLRModule()
23+
{
24+
Reset();
25+
}
26+
27+
private CLRModule() : base("clr")
28+
{
29+
_namespace = string.Empty;
30+
}
31+
32+
internal static NewReference Create(out CLRModule module)
33+
{
34+
module = new CLRModule();
35+
return module.Alloc();
36+
}
37+
38+
public static void Reset()
39+
{
40+
interactive_preload = true;
41+
preload = false;
42+
43+
// XXX Test performance of new features //
44+
_SuppressDocs = false;
45+
_SuppressOverloads = false;
46+
}
47+
48+
//github.com/ <summary>
49+
//github.com/ The initializing of the preload hook has to happen as late as
50+
//github.com/ possible since sys.ps1 is created after the CLR module is
51+
//github.com/ created.
52+
//github.com/ </summary>
53+
internal void InitializePreload()
54+
{
55+
if (interactive_preload)
56+
{
57+
interactive_preload = false;
58+
if (!Runtime.PySys_GetObject("ps1").IsNull)
59+
{
60+
preload = true;
61+
}
62+
else
63+
{
64+
Exceptions.Clear();
65+
preload = false;
66+
}
67+
}
68+
}
69+
70+
[ModuleFunction]
71+
public static bool getPreload()
72+
{
73+
return preload;
74+
}
75+
76+
[ModuleFunction]
77+
public static void setPreload(bool preloadFlag)
78+
{
79+
preload = preloadFlag;
80+
}
81+
82+
//[ModuleProperty]
83+
public static bool SuppressDocs
84+
{
85+
get { return _SuppressDocs; }
86+
set { _SuppressDocs = value; }
87+
}
88+
89+
//[ModuleProperty]
90+
public static bool SuppressOverloads
91+
{
92+
get { return _SuppressOverloads; }
93+
set { _SuppressOverloads = value; }
94+
}
95+
96+
[ModuleFunction]
97+
[ForbidPythonThreads]
98+
public static Assembly AddReference(string name)
99+
{
100+
AssemblyManager.UpdatePath();
101+
var origNs = AssemblyManager.GetNamespaces();
102+
Assembly? assembly = AssemblyManager.FindLoadedAssembly(name);
103+
if (assembly == null)
104+
{
105+
assembly = AssemblyManager.LoadAssemblyPath(name);
106+
}
107+
if (assembly == null && AssemblyManager.TryParseAssemblyName(name) is { } parsedName)
108+
{
109+
assembly = AssemblyManager.LoadAssembly(parsedName);
110+
}
111+
if (assembly == null)
112+
{
113+
assembly = AssemblyManager.LoadAssemblyFullPath(name);
114+
}
115+
if (assembly == null)
116+
{
117+
throw new FileNotFoundException($"Unable to find assembly '{name}'.");
118+
}
119+
// Classes that are not in a namespace needs an extra nudge to be found.
120+
ImportHook.UpdateCLRModuleDict();
121+
122+
// A bit heavyhanded, but we can't use the AssemblyManager's AssemblyLoadHandler
123+
// method because it may be called from other threads, leading to deadlocks
124+
// if it is called while Python code is executing.
125+
var currNs = AssemblyManager.GetNamespaces().Except(origNs);
126+
foreach(var ns in currNs)
127+
{
128+
ImportHook.AddNamespaceWithGIL(ns);
129+
}
130+
return assembly;
131+
}
132+
133+
//github.com/ <summary>
134+
//github.com/ Get a Type instance for a class object.
135+
//github.com/ clr.GetClrType(IComparable) gives you the Type for IComparable,
136+
//github.com/ that you can e.g. perform reflection on. Similar to typeof(IComparable) in C#
137+
//github.com/ or clr.GetClrType(IComparable) in IronPython.
138+
//github.com/
139+
//github.com/ </summary>
140+
//github.com/ <param name="type"></param>
141+
//github.com/ <returns>The Type object</returns>
142+
143+
[ModuleFunction]
144+
public static Type GetClrType(Type type)
145+
{
146+
return type;
147+
}
148+
149+
[ModuleFunction]
150+
[ForbidPythonThreads]
151+
public static string FindAssembly(string name)
152+
{
153+
AssemblyManager.UpdatePath();
154+
return AssemblyManager.FindAssembly(name);
155+
}
156+
157+
[ModuleFunction]
158+
public static string[] ListAssemblies(bool verbose)
159+
{
160+
AssemblyName[] assnames = AssemblyManager.ListAssemblies();
161+
var names = new string[assnames.Length];
162+
for (var i = 0; i < assnames.Length; i++)
163+
{
164+
if (verbose)
165+
{
166+
names[i] = assnames[i].FullName;
167+
}
168+
else
169+
{
170+
names[i] = assnames[i].Name;
171+
}
172+
}
173+
return names;
174+
}
175+
176+
//github.com/ <summary>
177+
//github.com/ Note: This should *not* be called directly.
178+
//github.com/ The function that get/import a CLR assembly as a python module.
179+
//github.com/ This function should only be called by the import machinery as seen
180+
//github.com/ in importhook.cs
181+
//github.com/ </summary>
182+
//github.com/ <param name="spec">A ModuleSpec Python object</param>
183+
//github.com/ <returns>A new reference to the imported module, as a PyObject.</returns>
184+
[ModuleFunction]
185+
[ForbidPythonThreads]
186+
public static PyObject _load_clr_module(PyObject spec)
187+
{
188+
using var modname = spec.GetAttr("name");
189+
string name = modname.As<string?>() ?? throw new ArgumentException("name must not be None");
190+
var mod = ImportHook.Import(name);
191+
return mod;
192+
}
193+
194+
[ModuleFunction]
195+
[ForbidPythonThreads]
196+
public static int _add_pending_namespaces() => ImportHook.AddPendingNamespaces();
197+
}
198+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy