mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
remove requests
This commit is contained in:
parent
891ce80fb4
commit
3c64f59fd3
@ -9,7 +9,7 @@ pipeline = [
|
|||||||
["config.h", "common.h", "memory.h", "vector.h", "str.h", "tuplelist.h", "namedict.h", "error.h", "lexer.h"],
|
["config.h", "common.h", "memory.h", "vector.h", "str.h", "tuplelist.h", "namedict.h", "error.h", "lexer.h"],
|
||||||
["obj.h", "dict.h", "codeobject.h", "frame.h"],
|
["obj.h", "dict.h", "codeobject.h", "frame.h"],
|
||||||
["gc.h", "vm.h", "ceval.h", "expr.h", "compiler.h", "repl.h"],
|
["gc.h", "vm.h", "ceval.h", "expr.h", "compiler.h", "repl.h"],
|
||||||
["_generated.h", "cffi.h", "iter.h", "base64.h", "random.h", "re.h", "linalg.h", "easing.h", "requests.h", "io.h"],
|
["_generated.h", "cffi.h", "iter.h", "base64.h", "random.h", "re.h", "linalg.h", "easing.h", "io.h"],
|
||||||
["export.h", "pocketpy.h"]
|
["export.h", "pocketpy.h"]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -73,9 +73,79 @@ class void_p:
|
|||||||
def set_base_offset(self, offset: str) -> None: ...
|
def set_base_offset(self, offset: str) -> None: ...
|
||||||
|
|
||||||
class struct:
|
class struct:
|
||||||
|
@overload
|
||||||
|
def __init__(self, size: int): ...
|
||||||
|
@overload
|
||||||
|
def __init__(self, p: 'void_p', size: int): ...
|
||||||
|
@overload
|
||||||
|
def __init__(self, s: str): ...
|
||||||
|
@overload
|
||||||
|
def __init__(self, b: bytes): ...
|
||||||
|
|
||||||
def addr(self) -> 'void_p': ...
|
def addr(self) -> 'void_p': ...
|
||||||
def copy(self) -> 'struct': ...
|
def copy(self) -> 'struct': ...
|
||||||
def size(self) -> int: ...
|
def size(self) -> int: ...
|
||||||
def __eq__(self, other: 'struct') -> bool: ...
|
def __eq__(self, other: 'struct') -> bool: ...
|
||||||
def __ne__(self, other: 'struct') -> bool: ...
|
def __ne__(self, other: 'struct') -> bool: ...
|
||||||
|
|
||||||
|
def to_string(self) -> str: ...
|
||||||
|
def to_bytes(self) -> bytes: ...
|
||||||
|
|
||||||
|
def read_char(self, offset=0) -> int: ...
|
||||||
|
def read_uchar(self, offset=0) -> int: ...
|
||||||
|
def read_short(self, offset=0) -> int: ...
|
||||||
|
def read_ushort(self, offset=0) -> int: ...
|
||||||
|
def read_int(self, offset=0) -> int: ...
|
||||||
|
def read_uint(self, offset=0) -> int: ...
|
||||||
|
def read_long(self, offset=0) -> int: ...
|
||||||
|
def read_ulong(self, offset=0) -> int: ...
|
||||||
|
def read_longlong(self, offset=0) -> int: ...
|
||||||
|
def read_ulonglong(self, offset=0) -> int: ...
|
||||||
|
def read_float(self, offset=0) -> float: ...
|
||||||
|
def read_double(self, offset=0) -> float: ...
|
||||||
|
def read_bool(self, offset=0) -> bool: ...
|
||||||
|
def read_void_p(self, offset=0) -> 'void_p': ...
|
||||||
|
|
||||||
|
def write_char(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_uchar(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_short(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_ushort(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_int(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_uint(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_long(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_ulong(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_longlong(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_ulonglong(self, value: int, offset=0) -> None: ...
|
||||||
|
def write_float(self, value: float, offset=0) -> None: ...
|
||||||
|
def write_double(self, value: float, offset=0) -> None: ...
|
||||||
|
def write_bool(self, value: bool, offset=0) -> None: ...
|
||||||
|
def write_void_p(self, value: 'void_p', offset=0) -> None: ...
|
||||||
|
|
||||||
|
char_ = refl("char")
|
||||||
|
uchar_ = refl("uchar")
|
||||||
|
short_ = refl("short")
|
||||||
|
ushort_ = refl("ushort")
|
||||||
|
int_ = refl("int")
|
||||||
|
uint_ = refl("uint")
|
||||||
|
long_ = refl("long")
|
||||||
|
ulong_ = refl("ulong")
|
||||||
|
longlong_ = refl("longlong")
|
||||||
|
ulonglong_ = refl("ulonglong")
|
||||||
|
float_ = refl("float")
|
||||||
|
double_ = refl("double")
|
||||||
|
bool_ = refl("bool")
|
||||||
|
|
||||||
|
char_p = void_p
|
||||||
|
uchar_p = void_p
|
||||||
|
short_p = void_p
|
||||||
|
ushort_p = void_p
|
||||||
|
int_p = void_p
|
||||||
|
uint_p = void_p
|
||||||
|
long_p = void_p
|
||||||
|
ulong_p = void_p
|
||||||
|
longlong_p = void_p
|
||||||
|
ulonglong_p = void_p
|
||||||
|
float_p = void_p
|
||||||
|
double_p = void_p
|
||||||
|
bool_p = void_p
|
||||||
```
|
```
|
@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
icon: package
|
|
||||||
label: requests
|
|
||||||
---
|
|
||||||
|
|
||||||
!!!
|
|
||||||
This module is experimental. To enable it, download `httplib.h` from [here](https://github.com/yhirose/cpp-httplib) and place it in the same directory as `pocketpy.h`. Also set `PK_MODULE_REQUESTS` to `1` in `config.h`.
|
|
||||||
|
|
||||||
SSL is not supported.
|
|
||||||
!!!
|
|
||||||
|
|
||||||
### `requests.get(url, headers=None) -> Response`
|
|
||||||
|
|
||||||
Send a GET request to `url` and return a `Response` object.
|
|
||||||
|
|
||||||
### `requests.post(url, data=None, headers=None) -> Response`
|
|
||||||
|
|
||||||
Send a POST request to `url` and return a `Response` object.
|
|
||||||
|
|
||||||
### `requests.put(url, data=None, headers=None) -> Response`
|
|
||||||
|
|
||||||
Send a PUT request to `url` and return a `Response` object.
|
|
||||||
|
|
||||||
### `requests.delete(url, headers=None) -> Response`
|
|
||||||
|
|
||||||
Send a DELETE request to `url` and return a `Response` object.
|
|
@ -1,40 +0,0 @@
|
|||||||
class Response:
|
|
||||||
def __init__(self, status_code, reason, content):
|
|
||||||
self.status_code = status_code
|
|
||||||
self.reason = reason
|
|
||||||
self.content = content
|
|
||||||
|
|
||||||
assert type(self.status_code) is int
|
|
||||||
assert type(self.reason) is str
|
|
||||||
assert type(self.content) is bytes
|
|
||||||
|
|
||||||
@property
|
|
||||||
def text(self):
|
|
||||||
return self.content.decode()
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
code = self.status_code
|
|
||||||
return f'<Response [{code}]>'
|
|
||||||
|
|
||||||
def _parse_h(headers):
|
|
||||||
if headers is None:
|
|
||||||
return []
|
|
||||||
if type(headers) is dict:
|
|
||||||
return list(headers.items())
|
|
||||||
raise ValueError('headers must be dict or None')
|
|
||||||
|
|
||||||
def get(url, headers=None):
|
|
||||||
headers = _parse_h(headers)
|
|
||||||
return _request('GET', url, headers, None)
|
|
||||||
|
|
||||||
def post(url, data: bytes, headers=None):
|
|
||||||
headers = _parse_h(headers)
|
|
||||||
return _request('POST', url, headers, data)
|
|
||||||
|
|
||||||
def put(url, data: bytes, headers=None):
|
|
||||||
headers = _parse_h(headers)
|
|
||||||
return _request('PUT', url, headers, data)
|
|
||||||
|
|
||||||
def delete(url, headers=None):
|
|
||||||
headers = _parse_h(headers)
|
|
||||||
return _request('DELETE', url, headers, None)
|
|
@ -91,6 +91,5 @@ namespace pkpy{
|
|||||||
#define PK_MODULE_BASE64 1
|
#define PK_MODULE_BASE64 1
|
||||||
#define PK_MODULE_LINALG 1
|
#define PK_MODULE_LINALG 1
|
||||||
#define PK_MODULE_EASING 1
|
#define PK_MODULE_EASING 1
|
||||||
#define PK_MODULE_REQUESTS 0
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -9,7 +9,6 @@
|
|||||||
#include "cffi.h"
|
#include "cffi.h"
|
||||||
#include "linalg.h"
|
#include "linalg.h"
|
||||||
#include "easing.h"
|
#include "easing.h"
|
||||||
#include "requests.h"
|
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "_generated.h"
|
#include "_generated.h"
|
||||||
#include "export.h"
|
#include "export.h"
|
||||||
@ -1506,7 +1505,6 @@ inline void VM::post_init(){
|
|||||||
if(enable_os){
|
if(enable_os){
|
||||||
add_module_io(this);
|
add_module_io(this);
|
||||||
add_module_os(this);
|
add_module_os(this);
|
||||||
add_module_requests(this);
|
|
||||||
_import_handler = _default_import_handler;
|
_import_handler = _default_import_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
102
src/requests.h
102
src/requests.h
@ -1,102 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
#if PK_MODULE_REQUESTS
|
|
||||||
#include "httplib.h"
|
|
||||||
#include "cffi.h"
|
|
||||||
#include "_generated.h"
|
|
||||||
|
|
||||||
namespace pkpy {
|
|
||||||
|
|
||||||
inline void add_module_requests(VM* vm){
|
|
||||||
static StrName m_requests("requests");
|
|
||||||
static StrName m_Response("Response");
|
|
||||||
PyObject* mod = vm->new_module(m_requests);
|
|
||||||
CodeObject_ code = vm->compile(kPythonLibs["requests"], "requests.py", EXEC_MODE);
|
|
||||||
vm->_exec(code, mod);
|
|
||||||
|
|
||||||
vm->bind_func<4>(mod, "_request", [](VM* vm, ArgsView args){
|
|
||||||
Str method = CAST(Str&, args[0]);
|
|
||||||
Str url = CAST(Str&, args[1]);
|
|
||||||
PyObject* headers = args[2]; // a dict object
|
|
||||||
PyObject* body = args[3]; // a bytes object
|
|
||||||
|
|
||||||
if(url.index("http://") != 0){
|
|
||||||
vm->ValueError("url must start with http://");
|
|
||||||
}
|
|
||||||
|
|
||||||
for(char c: url){
|
|
||||||
switch(c){
|
|
||||||
case '.':
|
|
||||||
case '-':
|
|
||||||
case '_':
|
|
||||||
case '~':
|
|
||||||
case ':':
|
|
||||||
case '/':
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if(!isalnum(c)){
|
|
||||||
vm->ValueError(fmt("invalid character in url: '", c, "'"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int slash = url.index("/", 7);
|
|
||||||
Str path = "/";
|
|
||||||
if(slash != -1){
|
|
||||||
path = url.substr(slash);
|
|
||||||
url = url.substr(0, slash);
|
|
||||||
if(path.empty()) path = "/";
|
|
||||||
}
|
|
||||||
|
|
||||||
httplib::Client client(url.str());
|
|
||||||
|
|
||||||
httplib::Headers h;
|
|
||||||
if(headers != vm->None){
|
|
||||||
List list = CAST(List&, headers);
|
|
||||||
for(auto& item : list){
|
|
||||||
Tuple t = CAST(Tuple&, item);
|
|
||||||
Str key = CAST(Str&, t[0]);
|
|
||||||
Str value = CAST(Str&, t[1]);
|
|
||||||
h.emplace(key.str(), value.str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto _to_resp = [=](const httplib::Result& res){
|
|
||||||
return vm->call(
|
|
||||||
vm->_modules[m_requests]->attr(m_Response),
|
|
||||||
VAR(res->status),
|
|
||||||
VAR(res->reason),
|
|
||||||
VAR(Bytes(res->body))
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
if(method == "GET"){
|
|
||||||
httplib::Result res = client.Get(path.str(), h);
|
|
||||||
return _to_resp(res);
|
|
||||||
}else if(method == "POST"){
|
|
||||||
Bytes b = CAST(Bytes&, body);
|
|
||||||
httplib::Result res = client.Post(path.str(), h, b.data(), b.size(), "application/octet-stream");
|
|
||||||
return _to_resp(res);
|
|
||||||
}else if(method == "PUT"){
|
|
||||||
Bytes b = CAST(Bytes&, body);
|
|
||||||
httplib::Result res = client.Put(path.str(), h, b.data(), b.size(), "application/octet-stream");
|
|
||||||
return _to_resp(res);
|
|
||||||
}else if(method == "DELETE"){
|
|
||||||
httplib::Result res = client.Delete(path.str(), h);
|
|
||||||
return _to_resp(res);
|
|
||||||
}else{
|
|
||||||
vm->ValueError("invalid method");
|
|
||||||
}
|
|
||||||
UNREACHABLE();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace pkpy
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
ADD_MODULE_PLACEHOLDER(requests)
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
x
Reference in New Issue
Block a user