mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 20:34:44 +00:00
48 lines
1.8 KiB
Rust
48 lines
1.8 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use erg_common::vis::Visibility;
|
|
|
|
use erg_type::constructors::{builtin_mono, module_from_path, mono, or, param_t, proc};
|
|
use erg_type::Type;
|
|
use Type::*;
|
|
|
|
use crate::context::Context;
|
|
use crate::mod_cache::SharedModuleCache;
|
|
use crate::varinfo::Mutability;
|
|
use Mutability::*;
|
|
use Visibility::*;
|
|
|
|
impl Context {
|
|
pub(crate) fn init_py_urllib_mod() -> Self {
|
|
let mut urllib = Context::builtin_module("urllib", 4);
|
|
urllib.py_mod_cache = Some(SharedModuleCache::new());
|
|
let mut request_class = Context::builtin_mono_class("Request", 5);
|
|
request_class.register_builtin_impl("data", builtin_mono("Bytes"), Immutable, Public);
|
|
urllib.register_builtin_type(mono("urllib.request", "Request"), request_class, Const);
|
|
urllib.register_builtin_impl("request", module_from_path("request"), Immutable, Public);
|
|
let mut request = Context::builtin_module("urllib.request", 15);
|
|
let t = proc(
|
|
vec![param_t("url", or(Str, mono("urllib.request", "Request")))],
|
|
None,
|
|
vec![
|
|
param_t("data", or(builtin_mono("Bytes"), NoneType)),
|
|
param_t("timeout", or(Nat, NoneType)),
|
|
],
|
|
mono("http.client", "HTTPResponse"),
|
|
);
|
|
request.register_builtin_impl("urlopen", t, Immutable, Public);
|
|
urllib.register_builtin_impl("parse", module_from_path("parse"), Immutable, Public);
|
|
let parse = Context::builtin_module("urllib.parse", 15);
|
|
urllib
|
|
.py_mod_cache
|
|
.as_ref()
|
|
.unwrap()
|
|
.register(PathBuf::from("request"), None, request);
|
|
urllib
|
|
.py_mod_cache
|
|
.as_ref()
|
|
.unwrap()
|
|
.register(PathBuf::from("parse"), None, parse);
|
|
urllib
|
|
}
|
|
}
|