An alternative implement of Imjad API | Imjad API 的开源替代

Overview

HibiAPI Logo

HibiAPI

Demo Version

Lint Test

Version GitHub last commit GitHub license GitHub stars GitHub forks GitHub issues Python version

An alternative implement of Imjad API.

Imjad API 的开源替代.


前言

  • 由于Imjad API这是什么?使用人数过多, 致使调用超出限制, 所以本人希望提供一个开源替代来供社区进行自由的部署和使用, 从而减轻一部分该API的使用压力

优势

开源

  • 本项目以Apache-2.0许可开源, 这意味着你可以在注明版权信息的情况下进行任意使用

高效

  • 使用Python的异步机制, 由FastAPI驱动, 带来高效的使用体验 虽然性能瓶颈压根不在这

稳定

  • 在代码中大量使用PEP-484引入的类型标记语法

  • 使用PyLance, Flake8MyPy对代码进行类型推断和纠错

  • 不直接使用第三方API库, 而是全部用更加适合Web应用的逻辑重写第三方API请求, 更加可控 疯狂造轮子

实现进度

Imjad原有API实现请求 (#1)

部署指南

点击此处查看

鸣谢

Comments
  • ⬆️ Bump httpx from 0.19.0 to 0.20.0

    ⬆️ Bump httpx from 0.19.0 to 0.20.0

    Bumps httpx from 0.19.0 to 0.20.0.

    Release notes

    Sourced from httpx's releases.

    Version 0.20.0

    0.20.0 (13th October, 2021)

    The 0.20.0 release adds an integrated command-line client, and also includes some design changes. The most notable of these is that redirect responses are no longer automatically followed, unless specifically requested.

    This design decision prioritises a more explicit approach to redirects, in order to avoid code that unintentionally issues multiple requests as a result of misconfigured URLs.

    For example, previously a client configured to send requests to http://api.github.com/ would end up sending every API request twice, as each request would be redirected to https://api.github.com/.

    If you do want auto-redirect behaviour, you can enable this either by configuring the client instance with Client(follow_redirects=True), or on a per-request basis, with .get(..., follow_redirects=True).

    This change is a classic trade-off between convenience and precision, with no "right" answer. See [discussion #1785](https://github.com/encode/httpx/discussions/1785) for more context.

    The other major design change is an update to the Transport API, which is the low-level interface against which requests are sent. Previously this interface used only primitive datastructures, like so...

    (status_code, headers, stream, extensions) = transport.handle_request(method, url, headers, stream, extensions)
    try
        ...
    finally:
        stream.close()
    

    Now the interface is much simpler...

    response = transport.handle_request(request)
    try
        ...
    finally:
        response.close()
    

    Changed

    • The allow_redirects flag is now follow_redirects and defaults to False.
    • The raise_for_status() method will now raise an exception for any responses except those with 2xx status codes. Previously only 4xx and 5xx status codes would result in an exception.
    • The low-level transport API changes to the much simpler response = transport.handle_request(request).
    • The client.send() method no longer accepts a timeout=... argument, but the client.build_request() does. This required by the signature change of the Transport API. The request timeout configuration is now stored on the request instance, as request.extensions['timeout'].

    Added

    • Added the httpx command-line client.
    • Response instances now include .is_informational, .is_success, .is_redirect, .is_client_error, and .is_server_error properties for checking 1xx, 2xx, 3xx, 4xx, and 5xx response types. Note that the behaviour of .is_redirect is slightly different in that it now returns True for all 3xx responses, in order to allow for a consistent set of properties onto the different HTTP status code types. The response.has_redirect_location location may be used to determine responses with properly formed URL redirects.

    Fixed

    • response.iter_bytes() no longer raises a ValueError when called on a response with no content. (Pull #1827)
    • The 'wsgi.error' configuration now defaults to sys.stderr, and is corrected to be a TextIO interface, not a BytesIO interface. Additionally, the WSGITransport now accepts a wsgi_error confguration. (Pull #1828)
    • Follow the WSGI spec by properly closing the iterable returned by the application. (Pull #1830)
    Changelog

    Sourced from httpx's changelog.

    0.20.0 (13th October, 2021)

    The 0.20.0 release adds an integrated command-line client, and also includes some design changes. The most notable of these is that redirect responses are no longer automatically followed, unless specifically requested.

    This design decision prioritises a more explicit approach to redirects, in order to avoid code that unintentionally issues multiple requests as a result of misconfigured URLs.

    For example, previously a client configured to send requests to http://api.github.com/ would end up sending every API request twice, as each request would be redirected to https://api.github.com/.

    If you do want auto-redirect behaviour, you can enable this either by configuring the client instance with Client(follow_redirects=True), or on a per-request basis, with .get(..., follow_redirects=True).

    This change is a classic trade-off between convenience and precision, with no "right" answer. See [discussion #1785](https://github.com/encode/httpx/discussions/1785) for more context.

    The other major design change is an update to the Transport API, which is the low-level interface against which requests are sent. Previously this interface used only primitive datastructures, like so...

    (status_code, headers, stream, extensions) = transport.handle_request(method, url, headers, stream, extensions)
    try
        ...
    finally:
        stream.close()
    

    Now the interface is much simpler...

    response = transport.handle_request(request)
    try
        ...
    finally:
        response.close()
    

    Changed

    • The allow_redirects flag is now follow_redirects and defaults to False.
    • The raise_for_status() method will now raise an exception for any responses except those with 2xx status codes. Previously only 4xx and 5xx status codes would result in an exception.
    • The low-level transport API changes to the much simpler response = transport.handle_request(request).

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 8
  • 按照Dockerfile文件制作容器后无法访问,链接被终止

    按照Dockerfile文件制作容器后无法访问,链接被终止

    你好,我是直接克隆该项目然后直接执行制作的镜像

    docker容器启动命令:

    docker run -d -p 0.0.0.0:8080:8080 hibiapi:lastet
    

    客户端访问: image

    服务端日志信息:

    2021-10-13 07:00:51.411 | WARNING  | uvicorn.protocols.http.httptools_impl:data_received:134 - Invalid HTTP request received.
    Traceback (most recent call last):
    
      File "<string>", line 1, in <module>
      File "/usr/local/lib/python3.8/multiprocessing/spawn.py", line 116, in spawn_main
        exitcode = _main(fd, parent_sentinel)
                   │     │   └ 3
                   │     └ 10
                   └ <function _main at 0x7f936fb1fb80>
      File "/usr/local/lib/python3.8/multiprocessing/spawn.py", line 129, in _main
        return self._bootstrap(parent_sentinel)
               │    │          └ 3
               │    └ <function BaseProcess._bootstrap at 0x7f936fcf61f0>
               └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
        self.run()
        │    └ <function BaseProcess.run at 0x7f936fcf3820>
        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/multiprocessing/process.py", line 108, in run
        self._target(*self._args, **self._kwargs)
        │    │        │    │        │    └ {'config': <uvicorn.config.Config object at 0x7f936fd9dd30>, 'target': <bound method Server.run of <uvicorn.server.Server obj...
        │    │        │    │        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
        │    │        │    └ ()
        │    │        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
        │    └ <function subprocess_started at 0x7f936ecddf70>
        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/subprocess.py", line 76, in subprocess_started
        target(sockets=sockets)
        │              └ [<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>]
        └ <bound method Server.run of <uvicorn.server.Server object at 0x7f936fd9dcd0>>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py", line 68, in run
        return asyncio.run(self.serve(sockets=sockets))
               │       │   │    │             └ [<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>]
               │       │   │    └ <function Server.serve at 0x7f936ecdd4c0>
               │       │   └ <uvicorn.server.Server object at 0x7f936fd9dcd0>
               │       └ <function run at 0x7f936fac6310>
               └ <module 'asyncio' from '/usr/local/lib/python3.8/asyncio/__init__.py'>
      File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
               │    │                  └ <coroutine object Server.serve at 0x7f936e14ddc0>
               │    └ <method 'run_until_complete' of 'uvloop.loop.Loop' objects>
               └ <uvloop.Loop running=True closed=False debug=False>
    > File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 131, in data_received
        self.parser.feed_data(data)
        │    │      │         └ b'\x16\x03\x01\x02\x00\x01\x00\x01\xfc\x03\x03\xa2\xd21\xdd\xf5\\Ai\xc4\xa8\xc1\xf9\n\xc9\xfaN\xe5\xe3\xf3\x13\xa3\x13\x17\\\...
        │    │      └ <method 'feed_data' of 'httptools.parser.parser.HttpParser' objects>
        │    └ <httptools.parser.parser.HttpRequestParser object at 0x7f936538ec70>
        └ <uvicorn.protocols.http.httptools_impl.HttpToolsProtocol object at 0x7f9364990ee0>
      File "httptools/parser/parser.pyx", line 212, in httptools.parser.parser.HttpParser.feed_data
    
    httptools.parser.errors.HttpParserInvalidMethodError: Invalid method encountered
    2021-10-13 07:00:51.419 | WARNING  | uvicorn.protocols.http.httptools_impl:data_received:134 - Invalid HTTP request received.
    Traceback (most recent call last):
    
      File "<string>", line 1, in <module>
      File "/usr/local/lib/python3.8/multiprocessing/spawn.py", line 116, in spawn_main
        exitcode = _main(fd, parent_sentinel)
                   │     │   └ 3
                   │     └ 10
                   └ <function _main at 0x7f936fb1fb80>
      File "/usr/local/lib/python3.8/multiprocessing/spawn.py", line 129, in _main
        return self._bootstrap(parent_sentinel)
               │    │          └ 3
               │    └ <function BaseProcess._bootstrap at 0x7f936fcf61f0>
               └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
        self.run()
        │    └ <function BaseProcess.run at 0x7f936fcf3820>
        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/multiprocessing/process.py", line 108, in run
        self._target(*self._args, **self._kwargs)
        │    │        │    │        │    └ {'config': <uvicorn.config.Config object at 0x7f936fd9dd30>, 'target': <bound method Server.run of <uvicorn.server.Server obj...
        │    │        │    │        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
        │    │        │    └ ()
        │    │        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
        │    └ <function subprocess_started at 0x7f936ecddf70>
        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/subprocess.py", line 76, in subprocess_started
        target(sockets=sockets)
        │              └ [<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>]
        └ <bound method Server.run of <uvicorn.server.Server object at 0x7f936fd9dcd0>>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py", line 68, in run
        return asyncio.run(self.serve(sockets=sockets))
               │       │   │    │             └ [<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>]
               │       │   │    └ <function Server.serve at 0x7f936ecdd4c0>
               │       │   └ <uvicorn.server.Server object at 0x7f936fd9dcd0>
               │       └ <function run at 0x7f936fac6310>
               └ <module 'asyncio' from '/usr/local/lib/python3.8/asyncio/__init__.py'>
      File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
               │    │                  └ <coroutine object Server.serve at 0x7f936e14ddc0>
               │    └ <method 'run_until_complete' of 'uvloop.loop.Loop' objects>
               └ <uvloop.Loop running=True closed=False debug=False>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py", line 107, in handler
        await handle_http(
              └ <function handle_http at 0x7f936ecdd040>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/_handlers/http.py", line 83, in handle_http
        protocol.data_received(data)
        │        │             └ bytearray(b'\x16\x03\x01\x02\x00\x01\x00\x01\xfc\x03\x03\x8c\xf3M\x9d)\xa4\\|gY\xf3\xe8\xe1\xe1`\xc1u4\xffb\x84\xb5\xe5\xb5\x...
        │        └ <function HttpToolsProtocol.data_received at 0x7f936d0ee0d0>
        └ <uvicorn.protocols.http.httptools_impl.HttpToolsProtocol object at 0x7f9364990940>
    > File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 131, in data_received
        self.parser.feed_data(data)
        │    │      │         └ bytearray(b'\x16\x03\x01\x02\x00\x01\x00\x01\xfc\x03\x03\x8c\xf3M\x9d)\xa4\\|gY\xf3\xe8\xe1\xe1`\xc1u4\xffb\x84\xb5\xe5\xb5\x...
        │    │      └ <method 'feed_data' of 'httptools.parser.parser.HttpParser' objects>
        │    └ <httptools.parser.parser.HttpRequestParser object at 0x7f936538eb80>
        └ <uvicorn.protocols.http.httptools_impl.HttpToolsProtocol object at 0x7f9364990940>
      File "httptools/parser/parser.pyx", line 212, in httptools.parser.parser.HttpParser.feed_data
    
    httptools.parser.errors.HttpParserInvalidMethodError: Invalid method encountered
    2021-10-13 07:00:51.490 | WARNING  | uvicorn.protocols.http.httptools_impl:data_received:134 - Invalid HTTP request received.
    Traceback (most recent call last):
    
      File "<string>", line 1, in <module>
      File "/usr/local/lib/python3.8/multiprocessing/spawn.py", line 116, in spawn_main
        exitcode = _main(fd, parent_sentinel)
                   │     │   └ 3
                   │     └ 10
                   └ <function _main at 0x7f936fb1fb80>
      File "/usr/local/lib/python3.8/multiprocessing/spawn.py", line 129, in _main
        return self._bootstrap(parent_sentinel)
               │    │          └ 3
               │    └ <function BaseProcess._bootstrap at 0x7f936fcf61f0>
               └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
        self.run()
        │    └ <function BaseProcess.run at 0x7f936fcf3820>
        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/multiprocessing/process.py", line 108, in run
        self._target(*self._args, **self._kwargs)
        │    │        │    │        │    └ {'config': <uvicorn.config.Config object at 0x7f936fd9dd30>, 'target': <bound method Server.run of <uvicorn.server.Server obj...
        │    │        │    │        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
        │    │        │    └ ()
        │    │        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
        │    └ <function subprocess_started at 0x7f936ecddf70>
        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/subprocess.py", line 76, in subprocess_started
        target(sockets=sockets)
        │              └ [<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>]
        └ <bound method Server.run of <uvicorn.server.Server object at 0x7f936fd9dcd0>>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py", line 68, in run
        return asyncio.run(self.serve(sockets=sockets))
               │       │   │    │             └ [<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>]
               │       │   │    └ <function Server.serve at 0x7f936ecdd4c0>
               │       │   └ <uvicorn.server.Server object at 0x7f936fd9dcd0>
               │       └ <function run at 0x7f936fac6310>
               └ <module 'asyncio' from '/usr/local/lib/python3.8/asyncio/__init__.py'>
      File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
               │    │                  └ <coroutine object Server.serve at 0x7f936e14ddc0>
               │    └ <method 'run_until_complete' of 'uvloop.loop.Loop' objects>
               └ <uvloop.Loop running=True closed=False debug=False>
    > File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 131, in data_received
        self.parser.feed_data(data)
        │    │      │         └ b"\x16\x03\x01\x02\x00\x01\x00\x01\xfc\x03\x03&\xd4|\x8b\x80\x9d\xef\x9a\xc5\x9af\xf5:\xaf\xc2\xab\xd9e\xbdJ\xa7\xdd`c^M\xda\...
        │    │      └ <method 'feed_data' of 'httptools.parser.parser.HttpParser' objects>
        │    └ <httptools.parser.parser.HttpRequestParser object at 0x7f93649a2040>
        └ <uvicorn.protocols.http.httptools_impl.HttpToolsProtocol object at 0x7f93649a0340>
      File "httptools/parser/parser.pyx", line 212, in httptools.parser.parser.HttpParser.feed_data
    
    httptools.parser.errors.HttpParserInvalidMethodError: Invalid method encountered
    2021-10-13 07:00:51.747 | WARNING  | uvicorn.protocols.http.httptools_impl:data_received:134 - Invalid HTTP request received.
    Traceback (most recent call last):
    
      File "<string>", line 1, in <module>
      File "/usr/local/lib/python3.8/multiprocessing/spawn.py", line 116, in spawn_main
        exitcode = _main(fd, parent_sentinel)
                   │     │   └ 3
                   │     └ 10
                   └ <function _main at 0x7f936fb1fb80>
      File "/usr/local/lib/python3.8/multiprocessing/spawn.py", line 129, in _main
        return self._bootstrap(parent_sentinel)
               │    │          └ 3
               │    └ <function BaseProcess._bootstrap at 0x7f936fcf61f0>
               └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
        self.run()
        │    └ <function BaseProcess.run at 0x7f936fcf3820>
        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/multiprocessing/process.py", line 108, in run
        self._target(*self._args, **self._kwargs)
        │    │        │    │        │    └ {'config': <uvicorn.config.Config object at 0x7f936fd9dd30>, 'target': <bound method Server.run of <uvicorn.server.Server obj...
        │    │        │    │        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
        │    │        │    └ ()
        │    │        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
        │    └ <function subprocess_started at 0x7f936ecddf70>
        └ <SpawnProcess name='SpawnProcess-1' parent=7 started>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/subprocess.py", line 76, in subprocess_started
        target(sockets=sockets)
        │              └ [<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>]
        └ <bound method Server.run of <uvicorn.server.Server object at 0x7f936fd9dcd0>>
      File "/usr/local/lib/python3.8/site-packages/uvicorn/server.py", line 68, in run
        return asyncio.run(self.serve(sockets=sockets))
               │       │   │    │             └ [<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 8080)>]
               │       │   │    └ <function Server.serve at 0x7f936ecdd4c0>
               │       │   └ <uvicorn.server.Server object at 0x7f936fd9dcd0>
               │       └ <function run at 0x7f936fac6310>
               └ <module 'asyncio' from '/usr/local/lib/python3.8/asyncio/__init__.py'>
      File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
               │    │                  └ <coroutine object Server.serve at 0x7f936e14ddc0>
               │    └ <method 'run_until_complete' of 'uvloop.loop.Loop' objects>
               └ <uvloop.Loop running=True closed=False debug=False>
    > File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 131, in data_received
        self.parser.feed_data(data)
        │    │      │         └ b'\x16\x03\x01\x02\x00\x01\x00\x01\xfc\x03\x03\xc63\x87Y\x9c\xafV\x1a\t\xa3\x11\x84\xc9\x0e\xd2k\x03\xd1\x9d\x89\x1bIw\x04\x1...
        │    │      └ <method 'feed_data' of 'httptools.parser.parser.HttpParser' objects>
        │    └ <httptools.parser.parser.HttpRequestParser object at 0x7f936538eb80>
        └ <uvicorn.protocols.http.httptools_impl.HttpToolsProtocol object at 0x7f9364990ca0>
      File "httptools/parser/parser.pyx", line 212, in httptools.parser.parser.HttpParser.feed_data
    
    httptools.parser.errors.HttpParserInvalidMethodError: Invalid method encountered
    

    请问是编译的时候有问题么

    question 
    opened by yuukiyuuna 6
  • Reduce high memory usage

    Reduce high memory usage

    Is it normal for the python script to use a lot of memory cause it currently uses about 1gb ram. Is there anyway to reduce it?

    ps aux | grep python | awk '{sum=sum+$6}; END {print sum/1024 " MB"}'
    1034.71 MB
    
    ps aux  | grep python
    root       307  0.0  0.2  31852  5980 ?        Ss   Aug03   0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
    root       465  0.0  0.2 110588  6404 ?        Ssl  Aug03   0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
    root       570  1.0 41.2 1954168 1051908 ?     Ssl  Aug03  32:23 python3 /var/www/api.adoreanime.com/htdocs/HibiAPI/main.py
    root     43690  0.0  0.0   9032   664 pts/0    S+   06:36   0:00 grep --color=auto python
    
    enhancement 
    opened by Ruriko 4
  • 使用pip安装hibiapi时无限创建configs

    使用pip安装hibiapi时无限创建configs

    如题,安装hibiapi成功后启动api,

    [root@vultrguest configs]# hibiapi
    Traceback (most recent call last):
      File "/usr/local/bin/hibiapi", line 5, in <module>
        from hibiapi.__main__ import main
      File "/usr/local/lib/python3.8/site-packages/hibiapi/__main__.py", line 10, in <module>
        from .utils.config import CONFIG_DIR, DEBUG, Config
      File "/usr/local/lib/python3.8/site-packages/hibiapi/utils/config.py", line 36, in <module>
        assert _generate_default() <= 0, "Please complete config file!"
      File "/usr/local/lib/python3.8/site-packages/hibiapi/utils/config.py", line 27, in _generate_default
        default_path.read_text(encoding="utf-8"),
      File "/usr/lib64/python3.8/pathlib.py", line 1235, in read_text
        with self.open(mode='r', encoding=encoding, errors=errors) as f:
      File "/usr/lib64/python3.8/pathlib.py", line 1221, in open
        return io.open(self, mode, buffering, encoding, errors, newline,
    IsADirectoryError: [Errno 21] Is a directory: '/usr/local/lib/python3.8/site-packages/hibiapi/configs/configs'
    

    且,每次输入hibiapi后似乎都会创建一个新的conifg,然后无限错误,疑似bug?

    [root@vultrguest configs]# ls
    bilibili.yml  general.yml  pixiv.yml   sauce.yml
    configs       netease.yml  qrcode.yml  tieba.yml
    [root@vultrguest configs]# tree configs/
    configs/
    |-- configs
    |   `-- general.yml
    `-- general.yml
    
    1 directory, 2 files
    [root@vultrguest configs]# 
    

    该问题产生的条件为进入conifgs文件夹,启动hibiapi,报错,再次进入冒出来的新configs,启动hibiapi,configs继续套娃且问题一致,以及general.yml都会叠一次。

    documentation 
    opened by Orisland 4
  • ⬆️ Bump pytest-cov from 3.0.0 to 4.0.0

    ⬆️ Bump pytest-cov from 3.0.0 to 4.0.0

    Bumps pytest-cov from 3.0.0 to 4.0.0.

    Changelog

    Sourced from pytest-cov's changelog.

    4.0.0 (2022-09-28)

    Note that this release drops support for multiprocessing.

    • --cov-fail-under no longer causes pytest --collect-only to fail Contributed by Zac Hatfield-Dodds in [#511](https://github.com/pytest-dev/pytest-cov/issues/511) <https://github.com/pytest-dev/pytest-cov/pull/511>_.

    • Dropped support for multiprocessing (mostly because issue 82408 <https://github.com/python/cpython/issues/82408>_). This feature was mostly working but very broken in certain scenarios and made the test suite very flaky and slow.

      There is builtin multiprocessing support in coverage and you can migrate to that. All you need is this in your .coveragerc::

      [run] concurrency = multiprocessing parallel = true sigterm = true

    • Fixed deprecation in setup.py by trying to import setuptools before distutils. Contributed by Ben Greiner in [#545](https://github.com/pytest-dev/pytest-cov/issues/545) <https://github.com/pytest-dev/pytest-cov/pull/545>_.

    • Removed undesirable new lines that were displayed while reporting was disabled. Contributed by Delgan in [#540](https://github.com/pytest-dev/pytest-cov/issues/540) <https://github.com/pytest-dev/pytest-cov/pull/540>_.

    • Documentation fixes. Contributed by Andre Brisco in [#543](https://github.com/pytest-dev/pytest-cov/issues/543) <https://github.com/pytest-dev/pytest-cov/pull/543>_ and Colin O'Dell in [#525](https://github.com/pytest-dev/pytest-cov/issues/525) <https://github.com/pytest-dev/pytest-cov/pull/525>_.

    • Added support for LCOV output format via --cov-report=lcov. Only works with coverage 6.3+. Contributed by Christian Fetzer in [#536](https://github.com/pytest-dev/pytest-cov/issues/536) <https://github.com/pytest-dev/pytest-cov/issues/536>_.

    • Modernized pytest hook implementation. Contributed by Bruno Oliveira in [#549](https://github.com/pytest-dev/pytest-cov/issues/549) <https://github.com/pytest-dev/pytest-cov/pull/549>_ and Ronny Pfannschmidt in [#550](https://github.com/pytest-dev/pytest-cov/issues/550) <https://github.com/pytest-dev/pytest-cov/pull/550>_.

    Commits
    • 28db055 Bump version: 3.0.0 → 4.0.0
    • 57e9354 Really update the changelog.
    • 56b810b Update chagelog.
    • f7fced5 Add support for LCOV output
    • 1211d31 Fix flake8 error
    • b077753 Use modern approach to specify hook options
    • 00713b3 removed incorrect docs on data_file.
    • b3dda36 Improve workflow with a collecting status check. (#548)
    • 218419f Prevent undesirable new lines to be displayed when report is disabled
    • 60b73ec migrate build command from distutils to setuptools
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 3
  • Error occurred at the OAuth process

    Error occurred at the OAuth process

    I get this error when I view pixiv api {"error":{"user_message":"","message":"Error occurred at the OAuth process. Please check your Access Token to fix this. Error Message: invalid_grant","reason":"","user_message_details":{}}} To fix this error I just reboot the server and it works again. I want to avoid rebooting all the time so how can I fix this?

    here the error log: https://pastebin.com/raw/cPQjgtij I can't paste log here due to maximum character limit

    bug 
    opened by Ruriko 3
  • KeyError when visiting api

    KeyError when visiting api

    I install the script on my new server but when I try to visit the site I get this error: {"url": "http://xxx.xxx.xxx.xxx:8080/", "time": "2022-02-14T10:03:28.581632", "code": 500, "detail": "KeyError", "trace": "77CA06DB9746841B", "headers": {}}

    I also tried deploying on heroku and I get that same error. How to fix this error for my server?

    opened by Ruriko 3
  • 接口请求:Pixiv 首页推荐作品接口

    接口请求:Pixiv 首页推荐作品接口

    opened by monsterxcn 3
  • 🏷️ 修复类型注解

    🏷️ 修复类型注解

    Retry 是一个装饰器,如果它(Retry)接受位置参数(Callable),则返回被包装的函数(Callable);如果它接受关键字参数,则返回 RetryT 协议类型,它实现了 Callback 协议。RetryT 的签名大致理解为和 Retry 一样。如果它(RetryT)接受位置参数,则返回被包装的函数,如果接受关键字参数,则返回 RetryT 。也就是说,和 partial 对应,如果只调用关键字参数,则在类型上是幂等的。

    带 bound 的泛型标红了,奇怪,最简单的话还是直接用 Callable,如下:

    def Retry(
        function: Optional[Callable] = None,
        *,
        retries: int = 3,
        delay: float = 0.1,
        exceptions: Optional[Tuple[Type[Exception], ...]] = None,
    ) -> Union[Callable, Callable[[Callable], Callable]]:
    

    甚至

    ) -> Callable:
    

    参考: https://stackoverflow.com/questions/66663571/proper-type-hint-for-functools-partial https://www.python.org/dev/peps/pep-0484/#function-method-overloading https://www.python.org/dev/peps/pep-0544/#callback-protocols

    另一个点就是函数形参变量重新赋值的话类型也需要和签名匹配, function = TimeIt(function) 标红了。

    opened by jiangzhuochi 3
  • Bump fastapi from 0.63.0 to 0.65.2

    Bump fastapi from 0.63.0 to 0.65.2

    Bumps fastapi from 0.63.0 to 0.65.2.

    Release notes

    Sourced from fastapi's releases.

    0.65.2

    Security fixes

    This change fixes a CSRF security vulnerability when using cookies for authentication in path operations with JSON payloads sent by browsers.

    In versions lower than 0.65.2, FastAPI would try to read the request payload as JSON even if the content-type header sent was not set to application/json or a compatible JSON media type (e.g. application/geo+json).

    So, a request with a content type of text/plain containing JSON data would be accepted and the JSON data would be extracted.

    But requests with content type text/plain are exempt from CORS preflights, for being considered Simple requests. So, the browser would execute them right away including cookies, and the text content could be a JSON string that would be parsed and accepted by the FastAPI application.

    See CVE-2021-32677 for more details.

    Thanks to Dima Boger for the security report! 🙇🔒

    Internal

    0.65.1

    Security fixes

    0.65.0

    Breaking Changes - Upgrade

    • ⬆️ Upgrade Starlette to 0.14.2, including internal UJSONResponse migrated from Starlette. This includes several bug fixes and features from Starlette. PR #2335 by @​hanneskuettner.

    Translations

    Internal

    0.64.0

    Features

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • Bump fastapi from 0.63.0 to 0.65.1

    Bump fastapi from 0.63.0 to 0.65.1

    Bumps fastapi from 0.63.0 to 0.65.1.

    Release notes

    Sourced from fastapi's releases.

    0.65.1

    Security fixes

    0.65.0

    Breaking Changes - Upgrade

    • ⬆️ Upgrade Starlette to 0.14.2, including internal UJSONResponse migrated from Starlette. This includes several bug fixes and features from Starlette. PR #2335 by @​hanneskuettner.

    Translations

    Internal

    0.64.0

    Features

    Fixes

    Docs

    • 📝 Add link to article in Russian "FastAPI: знакомимся с фреймворком". PR #2564 by @​trkohler.
    • 📝 Add external link to blog post "Authenticate Your FastAPI App with Auth0". PR #2172 by @​dompatmore.
    • 📝 Fix broken link to article: Machine learning model serving in Python using FastAPI and Streamlit. PR #2557 by @​davidefiocco.
    • 📝 Add FastAPI Medium Article: Deploy a dockerized FastAPI application to AWS. PR #2515 by @​vjanz.
    • ✏ Fix typo in Tutorial - Handling Errors. PR #2486 by @​johnthagen.
    • ✏ Fix typo in Security OAuth2 scopes. PR #2407 by @​jugmac00.
    • ✏ Fix typo/clarify docs for SQL (Relational) Databases. PR #2393 by @​kangni.
    • 📝 Add external link to "FastAPI for Flask Users". PR #2280 by @​amitness.

    Translations

    • 🌐 Fix Chinese translation of Tutorial - Query Parameters, remove obsolete content. PR #3051 by @​louis70109.
    • 🌐 Add French translation for Tutorial - Background Tasks. PR #3098 by @​Smlep.
    • 🌐 Fix Korean translation for docs/ko/docs/index.md. PR #3159 by @​SueNaEunYang.

    ... (truncated)

    Commits
    • 43df5d0 🔖 Release FastAPI version 0.65.1
    • eaa49eb 📝 Update release notes
    • a629339 📌 Upgrade pydantic pin, to handle security vulnerability CVE-2021-29510 (#3213)
    • b890bd1 🔖 Release version 0.65.0
    • 3819a11 📝 Update release notes
    • 4aed041 ⬆️ Upgrade Starlette to 0.14.2, including internal UJSONResponse migrated fr...
    • 04ac466 📝 Update release notes
    • d75126a 👷 Add GitHub Action cache to speed up CI installs (#3204)
    • c654e83 📝 Update release notes
    • 7c9d016 ⬆️ Upgrade setup-python GitHub Action to v2 (#3203)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • ⬆️ Bump sentry-sdk from 1.10.1 to 1.12.1

    ⬆️ Bump sentry-sdk from 1.10.1 to 1.12.1

    Bumps sentry-sdk from 1.10.1 to 1.12.1.

    Release notes

    Sourced from sentry-sdk's releases.

    1.12.1

    Various fixes & improvements

    1.12.0

    Basic OTel support

    This adds support to automatically integrate OpenTelemetry performance tracing with Sentry.

    See the documentation on how to set it up: https://docs.sentry.io/platforms/python/performance/instrumentation/opentelemetry/

    Give it a try and let us know if you have any feedback or problems with using it.

    By: @​antonpirker (#1772, #1766, #1765)

    Various fixes & improvements

    1.11.1

    Various fixes & improvements

    1.11.0

    Various fixes & improvements

    ... (truncated)

    Changelog

    Sourced from sentry-sdk's changelog.

    1.12.1

    Various fixes & improvements

    1.12.0

    Basic OTel support

    This adds support to automatically integrate OpenTelemetry performance tracing with Sentry.

    See the documentation on how to set it up: https://docs.sentry.io/platforms/python/performance/instrumentation/opentelemetry/

    Give it a try and let us know if you have any feedback or problems with using it.

    By: @​antonpirker (#1772, #1766, #1765)

    Various fixes & improvements

    1.11.1

    Various fixes & improvements

    1.11.0

    Various fixes & improvements

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • ⬆️ Bump certifi from 2022.9.24 to 2022.12.7

    ⬆️ Bump certifi from 2022.9.24 to 2022.12.7

    Bumps certifi from 2022.9.24 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies python 
    opened by dependabot[bot] 1
  • ⬆️ Bump pytest-xdist from 3.0.2 to 3.1.0

    ⬆️ Bump pytest-xdist from 3.0.2 to 3.1.0

    Bumps pytest-xdist from 3.0.2 to 3.1.0.

    Changelog

    Sourced from pytest-xdist's changelog.

    pytest-xdist 3.1.0 (2022-12-01)

    Features

    • [#789](https://github.com/pytest-dev/pytest-xdist/issues/789) <https://github.com/pytest-dev/pytest-xdist/issues/789>_: Users can now set a default distribution mode in their configuration file:

      .. code-block:: ini

      [pytest]
      addopts = --dist loadscope
      
    • [#842](https://github.com/pytest-dev/pytest-xdist/issues/842) <https://github.com/pytest-dev/pytest-xdist/issues/842>_: Python 3.11 is now officially supported.

    Removals

    • [#842](https://github.com/pytest-dev/pytest-xdist/issues/842) <https://github.com/pytest-dev/pytest-xdist/issues/842>_: Python 3.6 is no longer supported.
    Commits
    • 92a76bb Release 3.1.0
    • 6226965 Merge pull request #851 from nicoddemus/789-default-dist-mode
    • 7a0bc4c Let users configure dist mode in the configuration file
    • c6bcd20 [pre-commit.ci] pre-commit autoupdate (#849)
    • 99c80c3 Fix typo psutils -> psutil (#848)
    • e14895a [pre-commit.ci] pre-commit autoupdate (#846)
    • bb27210 Merge pull request #844 from pytest-dev/pre-commit-ci-update-config
    • 4a33933 Use ternary operator to remove mypy error
    • 41620d2 [pre-commit.ci] pre-commit autoupdate
    • 6b6f133 Merge pull request #842 from nicoddemus/drop-py36-add-py311
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • ⬆️ Bump pycryptodomex from 3.15.0 to 3.16.0

    ⬆️ Bump pycryptodomex from 3.15.0 to 3.16.0

    Bumps pycryptodomex from 3.15.0 to 3.16.0.

    Release notes

    Sourced from pycryptodomex's releases.

    v3.16.0 - Ravensburg

    New features

    • Build wheels for musl Linux. Thanks to Ben Raz.

    Resolved issues

    • GH#639: ARC4 now also works with 'keys' as short as 8 bits.
    • GH#669: fix segfaults when running in a manylinux2010 i686 image.

    v3.16.0 - Ravensburg (pycryptodomex)

    New features

    • Build wheels for musl Linux. Thanks to Ben Raz.

    Resolved issues

    • GH#639: ARC4 now also works with 'keys' as short as 8 bits.
    • GH#669: fix segfaults when running in a manylinux2010 i686 image.
    Changelog

    Sourced from pycryptodomex's changelog.

    3.16.0 (26 November 2022) ++++++++++++++++++++++++++

    New features

    • Build wheels for musl Linux. Thanks to Ben Raz.

    Resolved issues

    • GH#639: ARC4 now also works with 'keys' as short as 8 bits.
    • GH#669: fix segfaults when running in a manylinux2010 i686 image.
    Commits
    • f54108b Bump version
    • 3d065d6 Remove manylinux1 wheels only on Linux
    • 60898fe Build wheel for PyPy3.7, drop PyPy3.6
    • 428fd89 Delete manylinux1 wheels
    • 80d6640 Use -mstackrealign for 32-bits systems and SSE2
    • 32f64d5 Use most recent versions of python, ubuntu, upload-artifact
    • dcab3e7 Refactor wheel build process
    • 7e59254 Merge branch 'rc4_shorter_keys'
    • dfcc12b Bump version
    • ac3eab0 Allow RC4 keys to be as small as 8 bits
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • ⬆️ Bump httpx from 0.23.0 to 0.23.1

    ⬆️ Bump httpx from 0.23.0 to 0.23.1

    Bumps httpx from 0.23.0 to 0.23.1.

    Release notes

    Sourced from httpx's releases.

    Version 0.23.1

    0.23.1

    Added

    Fixed

    • Don't drop empty query parameters. (#2354)

    Removed

    • Drop .read/.aread from SyncByteStream/AsyncByteStream (#2407)
    • Drop RawURL. (#2241)
    Changelog

    Sourced from httpx's changelog.

    0.23.1

    Added

    Fixed

    • Don't drop empty query parameters. (#2354)

    Removed

    • Drop .read/.aread from SyncByteStream/AsyncByteStream. (#2407)
    • Drop RawURL. (#2241)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • 有谁知道贴吧post detail返回的json里可能包含几种content吗

    有谁知道贴吧post detail返回的json里可能包含几种content吗

    最近在写爬虫,关于贴吧api的post detail返回的json里面,post_list/{0}/content/{0}/type的值对应app里的内容类型,自己试出这些: 0,文本 1,链接 2,黄豆表情 3,图片 4,楼中楼回复对象用户名 5,视频(短视频贴包含视频文件uri,老贴一般只有一个到56之类网站的外链) 9,号码 除此之外还有哪些种类?中间678还没见过

    question 
    opened by donmor 7
Owner
Mix Technology
A personal developer organization founded by @mnixry
Mix Technology
Beyonic API Python official client library simplified examples using Flask, Django and Fast API.

Beyonic API Python Examples. The beyonic APIs Doc Reference: https://apidocs.beyonic.com/ To start using the Beyonic API Python API, you need to start

Harun Mbaabu Mwenda 46 Sep 1, 2022
Practice-python is a simple Fast api project for dealing with modern rest api technologies.

Practice Python Practice-python is a simple Fast api project for dealing with modern rest api technologies. Deployment with docker Go to the project r

null 0 Sep 19, 2022
MS Graph API authentication example with Fast API

MS Graph API authentication example with Fast API What it is & does This is a simple python service/webapp, using FastAPI with server side rendering,

Andrew Hart 4 Aug 11, 2022
api versioning for fastapi web applications

fastapi-versioning api versioning for fastapi web applications Installation pip install fastapi-versioning Examples from fastapi import FastAPI from f

Dean Way 472 Jan 2, 2023
api versioning for fastapi web applications

fastapi-versioning api versioning for fastapi web applications Installation pip install fastapi-versioning Examples from fastapi import FastAPI from f

Dean Way 127 Feb 17, 2021
Cookiecutter API for creating Custom Skills for Azure Search using Python and Docker

cookiecutter-spacy-fastapi Python cookiecutter API for quick deployments of spaCy models with FastAPI Azure Search The API interface is compatible wit

Microsoft 379 Jan 3, 2023
High-performance Async REST API, in Python. FastAPI + GINO + Arq + Uvicorn (w/ Redis and PostgreSQL).

fastapi-gino-arq-uvicorn High-performance Async REST API, in Python. FastAPI + GINO + Arq + Uvicorn (powered by Redis & PostgreSQL). Contents Get Star

Leo Sussan 351 Jan 4, 2023
Turns your Python functions into microservices with web API, interactive GUI, and more.

Instantly turn your Python functions into production-ready microservices. Deploy and access your services via HTTP API or interactive UI. Seamlessly export your services into portable, shareable, and executable files or Docker images.

Machine Learning Tooling 2.8k Jan 4, 2023
Restful Api developed with Flask using Prometheus and Grafana for monitoring and containerization with Docker :rocket:

Hephaestus ?? In Greek mythology, Hephaestus was either the son of Zeus and Hera or he was Hera's parthenogenous child. ... As a smithing god, Hephaes

Yasser Tahiri 16 Oct 7, 2022
Boilerplate code for quick docker implementation of REST API with JWT Authentication using FastAPI, PostgreSQL and PgAdmin ⭐

FRDP Boilerplate code for quick docker implementation of REST API with JWT Authentication using FastAPI, PostgreSQL and PgAdmin ⛏ . Getting Started Fe

BnademOverflow 53 Dec 29, 2022
A comprehensive CRUD API generator for SQLALchemy.

FastAPI Quick CRUD Introduction Advantage Constraint Getting started Installation Usage Design Path Parameter Query Parameter Request Body Upsert Intr

null 192 Jan 6, 2023
Fast, simple API for Apple firmwares.

Loyal Fast, Simple API for fetching Apple Firmwares. The API server is closed due to some reasons. Wait for v2 releases. Features Fetching Signed IPSW

null 11 Oct 28, 2022
API for Submarino store

submarino-api API for the submarino e-commerce documentation read the documentation in: https://submarino-api.herokuapp.com/docs or in https://submari

Miguel 1 Oct 14, 2021
LuSyringe is a documentation injection tool for your classes when using Fast API

LuSyringe LuSyringe is a documentation injection tool for your classes when using Fast API Benefits The main benefit is being able to separate your bu

Enzo Ferrari 2 Sep 6, 2021
API Simples com python utilizando a biblioteca FastApi

api-fastapi-python API Simples com python utilizando a biblioteca FastApi Para rodar esse script são necessárias duas bibliotecas: Fastapi: Comando de

Leonardo Grava 0 Apr 29, 2022
REST API with FastAPI and JSON file.

FastAPI RESTAPI with a JSON py 3.10 First, to install all dependencies, in ./src/: python -m pip install -r requirements.txt Second, into the ./src/

Luis Quiñones Requelme 1 Dec 15, 2021
REST API with FastAPI and PostgreSQL

REST API with FastAPI and PostgreSQL To have the same data in db: create table CLIENT_DATA (id SERIAL PRIMARY KEY, fullname VARCHAR(50) NOT NULL,email

Luis Quiñones Requelme 1 Nov 11, 2021
Simple FastAPI Example : Blog API using FastAPI : Beginner Friendly

fastapi_blog FastAPI : Simple Blog API with CRUD operation Steps to run the project: git clone https://github.com/mrAvi07/fastapi_blog.git cd fastapi-

Avinash Alanjkar 1 Oct 8, 2022
Complete Fundamental to Expert Codes of FastAPI for creating API's

FastAPI FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3 based on standard Python type hints. The key featu

Pranav Anand 1 Nov 28, 2021