Name | pythonic-spring JSON |
Version |
0.0.1.4
JSON |
| download |
home_page | |
Summary | A python-made framework which is like Spring in Java. |
upload_time | 2024-01-12 03:19:28 |
maintainer | |
docs_url | None |
author | Tianhao Zhang |
requires_python | >=3.7 |
license | MIT |
keywords |
spring
pythonic
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# pythonic-spring
用python实现spring特性, 已集成fastapi, 可以像springboot那样统一管理类的生成和调用, 相比较原先python通过在类声明外面整实例的情况, 防止了写代码时循环调用的风险, 也可以为java中比较常见的多态和继承在python中的实战化做基底
## 当前最新版本 0.0.1.3:
两个装饰器:
- Service: 装饰class, 根据spring.json自动生成bean, 并通过BeanFactory注册
- Autowired: 装饰__init__方法, 根据bean_modules和bean_ids自动注入注册的bean到类中
SpringApplication:构建即使用, 支持输入通配扫描代码并延迟import, 提供了bean_id和type两种找bean的方式
spring.json:扫描并反序列, 供BeanFactory读取
## 使用方法
### 安装pip包
pip install pythonic-spring
### 创建实例
from pythonicspring import SpringApplication
app = SpringApplication()
### 声明需要bean化的类, 使用类装饰器:Service
### 声明类内需要引用的bean, 在__init__方法上使用装饰器:Autowired
from pythonicspring import Service
from pythonicspring import Autowired
@Service
class ClassA:
class_b: ClassB = None
class_c: ClassC = None
@Autowired(bean_modules={"class_b": ClassB}, bean_ids={"class_c": "ClassCCC"})
def __init__(self):
pass
def foo(self):
result = class_b.spam()
pass
## 一个例子:
test/testApp.py
Raw data
{
"_id": null,
"home_page": "",
"name": "pythonic-spring",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "spring pythonic",
"author": "Tianhao Zhang",
"author_email": "genji9071@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/b7/07/7133c7373f8c4bddf82a7d68923c6e3c1ae2105a3435824a6289a8e3ac75/pythonic-spring-0.0.1.4.tar.gz",
"platform": null,
"description": "# pythonic-spring\r\n\r\n\u7528python\u5b9e\u73b0spring\u7279\u6027, \u5df2\u96c6\u6210fastapi, \u53ef\u4ee5\u50cfspringboot\u90a3\u6837\u7edf\u4e00\u7ba1\u7406\u7c7b\u7684\u751f\u6210\u548c\u8c03\u7528, \u76f8\u6bd4\u8f83\u539f\u5148python\u901a\u8fc7\u5728\u7c7b\u58f0\u660e\u5916\u9762\u6574\u5b9e\u4f8b\u7684\u60c5\u51b5, \u9632\u6b62\u4e86\u5199\u4ee3\u7801\u65f6\u5faa\u73af\u8c03\u7528\u7684\u98ce\u9669, \u4e5f\u53ef\u4ee5\u4e3ajava\u4e2d\u6bd4\u8f83\u5e38\u89c1\u7684\u591a\u6001\u548c\u7ee7\u627f\u5728python\u4e2d\u7684\u5b9e\u6218\u5316\u505a\u57fa\u5e95\r\n\r\n## \u5f53\u524d\u6700\u65b0\u7248\u672c 0.0.1.3:\r\n\r\n\u4e24\u4e2a\u88c5\u9970\u5668:\r\n\r\n- Service: \u88c5\u9970class, \u6839\u636espring.json\u81ea\u52a8\u751f\u6210bean, \u5e76\u901a\u8fc7BeanFactory\u6ce8\u518c\r\n- Autowired: \u88c5\u9970__init__\u65b9\u6cd5, \u6839\u636ebean_modules\u548cbean_ids\u81ea\u52a8\u6ce8\u5165\u6ce8\u518c\u7684bean\u5230\u7c7b\u4e2d\r\n\r\nSpringApplication:\u6784\u5efa\u5373\u4f7f\u7528, \u652f\u6301\u8f93\u5165\u901a\u914d\u626b\u63cf\u4ee3\u7801\u5e76\u5ef6\u8fdfimport, \u63d0\u4f9b\u4e86bean_id\u548ctype\u4e24\u79cd\u627ebean\u7684\u65b9\u5f0f\r\n\r\nspring.json:\u626b\u63cf\u5e76\u53cd\u5e8f\u5217, \u4f9bBeanFactory\u8bfb\u53d6\r\n\r\n## \u4f7f\u7528\u65b9\u6cd5\r\n\r\n### \u5b89\u88c5pip\u5305 \r\n\r\n pip install pythonic-spring\r\n\r\n### \u521b\u5efa\u5b9e\u4f8b\r\n\r\n from pythonicspring import SpringApplication\r\n app = SpringApplication()\r\n\r\n### \u58f0\u660e\u9700\u8981bean\u5316\u7684\u7c7b, \u4f7f\u7528\u7c7b\u88c5\u9970\u5668:Service\r\n\r\n### \u58f0\u660e\u7c7b\u5185\u9700\u8981\u5f15\u7528\u7684bean, \u5728__init__\u65b9\u6cd5\u4e0a\u4f7f\u7528\u88c5\u9970\u5668:Autowired\r\n\r\n from pythonicspring import Service\r\n from pythonicspring import Autowired\r\n @Service\r\n class ClassA:\r\n \r\n class_b: ClassB = None\r\n class_c: ClassC = None\r\n \r\n @Autowired(bean_modules={\"class_b\": ClassB}, bean_ids={\"class_c\": \"ClassCCC\"})\r\n def __init__(self):\r\n pass\r\n \r\n def foo(self):\r\n result = class_b.spam()\r\n pass\r\n\r\n## \u4e00\u4e2a\u4f8b\u5b50:\r\n\r\ntest/testApp.py\r\n\r\n\r\n\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A python-made framework which is like Spring in Java.",
"version": "0.0.1.4",
"project_urls": {
"Source": "https://github.com/genji9071/pythonic-spring/",
"Tracker": "https://github.com/genji9071/pythonic-spring/issues"
},
"split_keywords": [
"spring",
"pythonic"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c76053073c91a3ae16aa053a910b2e953bb7ed0bd88bc5095dfc42724cdaa914",
"md5": "4f9972ba199be003262dc267c6370fd1",
"sha256": "3ff443f3ddbe7a2fa791d3ebaf8bc3e88cbc9ae930a8d0809294e8671cca137b"
},
"downloads": -1,
"filename": "pythonic_spring-0.0.1.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4f9972ba199be003262dc267c6370fd1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 12252,
"upload_time": "2024-01-12T03:19:26",
"upload_time_iso_8601": "2024-01-12T03:19:26.235974Z",
"url": "https://files.pythonhosted.org/packages/c7/60/53073c91a3ae16aa053a910b2e953bb7ed0bd88bc5095dfc42724cdaa914/pythonic_spring-0.0.1.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b7077133c7373f8c4bddf82a7d68923c6e3c1ae2105a3435824a6289a8e3ac75",
"md5": "1fd68afe8091682a77fabfef13438490",
"sha256": "c5122c74918342288981259f159a68db2d7f66f81a50a234c1be55851798ec2b"
},
"downloads": -1,
"filename": "pythonic-spring-0.0.1.4.tar.gz",
"has_sig": false,
"md5_digest": "1fd68afe8091682a77fabfef13438490",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 8438,
"upload_time": "2024-01-12T03:19:28",
"upload_time_iso_8601": "2024-01-12T03:19:28.080863Z",
"url": "https://files.pythonhosted.org/packages/b7/07/7133c7373f8c4bddf82a7d68923c6e3c1ae2105a3435824a6289a8e3ac75/pythonic-spring-0.0.1.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-12 03:19:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "genji9071",
"github_project": "pythonic-spring",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "pythonic-spring"
}