# marzpy
A Python library that helps you easily use [Marzban](https://github.com/Gozargah/Marzban)'s API panel
>[!IMPORTANT]
>**Status:** Working on new update 🔥
## installation
```shell
pip install marzpy --upgrade
```
requirements : ```aiohttp```
# How To Use
```python
from marzpy import Marzban
import asyncio
async def main():
panel = Marzban("username","password","https://example.com")
token = await panel.get_token()
#await panel.anyfunction(token)
asyncio.run(main())
```
# Features
- Admin
- [get token](#get-token)
- [get admin](#get-current-admin)
- [create admin](#create-admin)
- [modify admin](#modify-admin)
- [remove admin](#remove-admin)
- [get all admins](#get-all-admins)
- Subscription
- [user subscription](#user-subscription)
- [user subscription info](#user-subscription-info)
- System
- [get system stats](#get-system-stats)
- [get inbounds](#get-inbounds)
- [get hosts](#get-hosts)
- [modify hosts](#modify-hosts)
- Core
- [get core stats](#get-core-stats)
- [restart core](#restart-core)
- [get core config](#get-core-config)
- [modify core config](#modify-core-config)
- User
- [add user](#add-user)
- [get user](#get-user)
- [modify user](#modify-user)
- [remove user](#remove-user)
- [reset user data usage](#reset-user-data-usage)
- [reset all users data usage](#reset-all-users-data-usage)
- [get all users](#get-all-users)
- [get user usage](#get-user-usage)
- User Template
- [get all user templates](#get-all-user-templates)
- [add user template](#add-user-template)
- [get user template](#get-user-template)
- [modify user template](#modify-user-template)
- [remove user template](#remove-user-template)
- Node
- [add node](#add-node)
- [get node](#get-node)
- [modify node](#modify-node)
- [remove node](#remove-node)
- [get all nodes](#get-all-nodes)
- [reconenct node](#reconenct-node)
- [get all nodes usage](#get-node-usage)
## Thanks To
- [ErfanTech](https://github.com/ErfanTech) :laughing:
# Contributors
<a href="https://github.com/mewhrzad/marzpy/graphs/contributors">
<img src="https://contrib.rocks/image?repo=mewhrzad/marzpy"/>
</a>
# Examples
### Get Token
```python
from marzpy import Marzban
panel = Marzban("username","password","https://example.com")
mytoken = await panel.get_token()
```
### Get Current admin
```python
admin = await panel.get_current_admin(token=mytoken)
print(admin) #output: {'username': 'admin', 'is_sudo': True}
```
### Create Admin
```python
info = {'username':'test','password':'pasword','is_sudo':False}
rsault = await panel.create_admin(token=mytoken,data=info)
print(result) #output: success
```
### Modify Admin
```python
target_admin = "test"
info = {'password':'newpassword','is_sudo':False}
result = await panel.change_admin_password(username=target_admin,token=mytoken,data=info)
print(result) #output: success
```
### Remove Admin
```python
target_admin = "test"
result = await panel.delete_admin(username=target_admin,token=mytoken)
print(result) #output: success
```
### Get All Admins
```python
result = await panel.get_all_admins(token=mytoken)
print(result)
#output: [{'username': 'test', 'is_sudo': True}, {'username': 'test1', 'is_sudo': False}]
```
### User Subscription
```python
subscription_url = "https://sub.yourdomain.com/sub/eyJhbGciOiJIUzI8NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJNbWRDcmFaeSIsImFjY2VzcyI8InN1YnNjcmlwdGlvbiIsImlhdCI1MTY5NDk1NTkxMH0.o75ML5835SPXpVPKXcvEIUxMTwSy-4XGS9NIdWOAmXY"
result = await panel.get_subscription(subscription_url)
print(result) #output: Configs
```
### User Subscription info
```python
subscription_url = "https://sub.yourdomain.com/sub/eyJhbGciOiJIUzI8NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJNbWRDcmFaeSIsImFjY2VzcyI8InN1YnNjcmlwdGlvbiIsImlhdCI1MTY5NDk1NTkxMH0.o75ML5835SPXpVPKXcvEIUxMTwSy-4XGS9NIdWOAmXY"
result = await panel.get_subscription_info(subscription_url)
print(result) #output: User information (usage,links,inbounds,....)
```
### Get System Stats
```python
result = await panel.get_system_stats(token=mytoken)
print(result) #output: system stats Memory & CPU usage ...
```
### Get Inbounds
```python
result = await panel.get_inbounds(token=mytoken)
print(result) #output: list of inbounds
```
### Get Hosts
```python
result = await panel.get_hosts(token=mytoken)
print(result) #output: list of hosts
```
### Modify Hosts
```python
hosts = {
"VMess TCP": [
{
"remark": "somename",
"address": "someaddress",
"port": 0,
"sni": "somesni",
"host": "somehost",
"security": "inbound_default",
"alpn": "",
"fingerprint": ""
}
]
}
# **Backup first**
result = await panel.modify_hosts(token=mytoken,data=hosts)
print(result) #output: hosts
```
### Get Core Stats
```python
result = await panel.get_xray_core(token=mytoken)
print(result)
#output: {'version': '1.8.1', 'started': True, 'logs_websocket': '/api/core/logs'}
```
### Restart Core
```python
result = await panel.restart_xray_core(token=mytoken)
print(result)
#output: success
```
### Get Core Config
```python
result = await panel.get_xray_config(token=mytoken)
print(result) #output: your xray core config
```
### Modify Core Config
```python
new_config={"your config"}
result = await panel.modify_xray_config(token=mytoken,config=new_config)
print(result) #output: success
```
### Add User
```python
from marzpy.api.user import User
user = User(
username="Mewhrzad",
proxies={
"vmess": {"id": "35e7e39c-7d5c-1f4b-8b71-508e4f37ff53"},
"vless": {"id": "35e7e39c-7d5c-1f4b-8b71-508e4f37ff53"},
},
inbounds={"vmess": ["VMess TCP"], "vless": ["VLESS TCP REALITY"]},
expire=0,
data_limit=0,
data_limit_reset_strategy="no_reset",
status="active"
)
result = await panel.add_user(user=user, token=token) #return new User object
print(result.username) #-> Mewhrzad, #user.proxies, #user.inbounds, #user.expire, #user.data_limit, #userdata_limit_reset_strategy, #user.status, #user.used_traffic, #user.lifetime_used_traffic, #user.created_at, #user.links, #user.subscription_url, #user.excluded_inbounds
```
### Get User
```python
result = await panel.get_user("Mewhrzad",token=mytoken) #return User object
print(result.subscription_url)
```
### Modify User
```python
new_user = User(
username="test",
proxies={
"vmess": {"id": "35e4e39c-7d5c-4f4b-8b71-558e4f37ff53"},
"vless": {"id": "35e4e39c-7d5c-4f4b-8b71-558e4f37ff53"},
},
inbounds={"vmess": ["VMess TCP"], "vless": ["VLESS TCP REALITY"]},
expire=0,
data_limit=0,
data_limit_reset_strategy="no_reset",
status="active",
)
result = await panel.modify_user("Mewhrzad", token=mytoken, user=new_user)
print(result.subscription_url) #output: modified user object
```
### Remove User
```python
result = await panel.delete_user("test", token=mytoken)
print(result) #output: success
```
### Reset User Data Usage
```python
result = await panel.reset_user_traffic("test", token=mytoken)
print(result) #output: success
```
### Reset All Users Data Usage
```python
result = await panel.reset_all_users_traffic(token=mytoken)
print(result) #output: success
```
### Get All Users
```python
result = await panel.get_all_users(token=mytoken) #return list of users
for user in result:
print(user.username)
```
### Get User Usage
```python
result = await panel.get_user_usage("mewhrzad",token=mytoken)
print(result)
#output: [{'node_id': None, 'node_name': 'MTN', 'used_traffic': 0},
#{'node_id': 1, 'node_name': 'MCI', 'used_traffic': 0}]
```
### Get All User Templates
```python
result = await panel.get_all_templates(token=mytoken) #return template list object
for template in result:
print(template.name)
```
### Add User Template
```python
from marzpy.api.template import Template
temp = Template(
name="new_template",
inbounds={"vmess": ["VMESS TCP"], "vless": ["VLESS TCP REALITY"]},
data_limit=0,
expire_duration=0,
username_prefix=None,
username_suffix=None,
)
result = await panel.add_template(token=mytoken, template=temp) # return new Template object
print(result.name) #output: new_template
```
### Get User Template
```python
template_id = 11
result = await panel.get_template_by_id(token=mytoken, id=template_id) # return Template object
print(result.name) #output: new_template
```
### Modify User Template
```python
from marzpy.api.template import Template
temp = Template(
name="new_template2",
inbounds={"vmess": ["VMESS TCP"], "vless": ["VLESS TCP REALITY"]},
data_limit=0,
expire_duration=0,
username_prefix=None,
username_suffix=None,
)
result = await panel.modify_template_by_id(
id=1, token=mytoken, template=temp) # return Modified Template object
print(result.name) #output: new_template2
```
### Remove User Template
```python
result = await panel.delete_template_by_id(id=1, token=mytoken)
print(result) #output: success
```
### Add Node
```python
from marzpy.api.node import Node
my_node = Node(
name="somename",
address="test.example.com",
port=62050,
api_port=62051,
certificate="your_cert",
id=4,
xray_version="1.8.1",
status="connected",
message="string",
)
result = await panel.add_node(token=mytoken, node=my_node) # return new Node object
print(result.address)
```
### Get Node
```python
result = await panel.get_node_by_id(id=1, token=mytoken) # return exist Node object
print(result.address) #output: address of node 1
```
### Modify Node
```python
from marzpy.api.node import Node
my_node = Node(
name="somename",
address="test.example.com",
port=62050,
api_port=62051,
certificate="your_cert",
id=4,
xray_version="1.8.1",
status="connected",
message="string",
)
result = await panel.modify_node_by_id(id=1, token=mytoken,node=my_node) # return modified Node object
print(result.address) #output:test.example.com
```
### Remove Node
```python
result = await panel.delete_node(id=1, token=mytoken)
print(result) #output: success
```
### Get All Nodes
```python
result = await panel.get_all_nodes(token=mytoken) # return List of Node object
for node in result:
print(node.address)
```
### Reconenct Node
```python
result = await panel.reconnect_node(id=1,token=mytoken)
print(result) #output: success
```
### Get Node Usage
```python
result = await panel.get_nodes_usage(token=mytoken)
for node in result:
print(node)
#output:{'node_id': 1, 'node_name': 'N1', 'uplink': 1000000000000, 'downlink': 1000000000000}
# {'node_id': 2, 'node_name': 'N2', 'uplink': 1000000000000, 'downlink': 1000000000000}
```
Raw data
{
"_id": null,
"home_page": "https://github.com/vsskx/marzpy",
"name": "marzpy-fork",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "marzpy, Marzban, Gozargah, Marzban python, Marzban API",
"author": "Mewhrzad",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/66/09/fa686caaa6c7f7d354514efc35f7ed3dfbfba38d2b6401ec7eb603cb95f8/marzpy_fork-0.0.7.tar.gz",
"platform": null,
"description": "# marzpy\nA Python library that helps you easily use [Marzban](https://github.com/Gozargah/Marzban)'s API panel\n>[!IMPORTANT]\n>**Status:** Working on new update \ud83d\udd25\n## installation\n```shell\npip install marzpy --upgrade\n```\nrequirements : ```aiohttp```\n# How To Use\n```python\nfrom marzpy import Marzban\nimport asyncio\n \nasync def main():\n panel = Marzban(\"username\",\"password\",\"https://example.com\")\n token = await panel.get_token()\n #await panel.anyfunction(token)\n\nasyncio.run(main())\n\n```\n# Features\n\n- Admin\n - [get token](#get-token)\n - [get admin](#get-current-admin)\n - [create admin](#create-admin)\n - [modify admin](#modify-admin)\n - [remove admin](#remove-admin)\n - [get all admins](#get-all-admins)\n- Subscription\n - [user subscription](#user-subscription)\n - [user subscription info](#user-subscription-info)\n- System\n - [get system stats](#get-system-stats)\n - [get inbounds](#get-inbounds)\n - [get hosts](#get-hosts)\n - [modify hosts](#modify-hosts)\n- Core\n - [get core stats](#get-core-stats)\n - [restart core](#restart-core)\n - [get core config](#get-core-config)\n - [modify core config](#modify-core-config)\n- User\n - [add user](#add-user)\n - [get user](#get-user)\n - [modify user](#modify-user)\n - [remove user](#remove-user)\n - [reset user data usage](#reset-user-data-usage)\n - [reset all users data usage](#reset-all-users-data-usage)\n - [get all users](#get-all-users)\n - [get user usage](#get-user-usage)\n- User Template\n - [get all user templates](#get-all-user-templates)\n - [add user template](#add-user-template)\n - [get user template](#get-user-template)\n - [modify user template](#modify-user-template)\n - [remove user template](#remove-user-template)\n- Node\n - [add node](#add-node)\n - [get node](#get-node)\n - [modify node](#modify-node)\n - [remove node](#remove-node)\n - [get all nodes](#get-all-nodes)\n - [reconenct node](#reconenct-node)\n - [get all nodes usage](#get-node-usage)\n\n## Thanks To \n- [ErfanTech](https://github.com/ErfanTech) :laughing:\n\n# Contributors\n<a href=\"https://github.com/mewhrzad/marzpy/graphs/contributors\">\n <img src=\"https://contrib.rocks/image?repo=mewhrzad/marzpy\"/>\n</a>\n\n# Examples\n### Get Token\n```python\n\nfrom marzpy import Marzban\n\npanel = Marzban(\"username\",\"password\",\"https://example.com\")\n\nmytoken = await panel.get_token()\n\n```\n### Get Current admin\n```python\nadmin = await panel.get_current_admin(token=mytoken)\nprint(admin) #output: {'username': 'admin', 'is_sudo': True}\n```\n### Create Admin\n```python\ninfo = {'username':'test','password':'pasword','is_sudo':False}\nrsault = await panel.create_admin(token=mytoken,data=info)\nprint(result) #output: success\n```\n### Modify Admin\n```python\ntarget_admin = \"test\"\ninfo = {'password':'newpassword','is_sudo':False}\nresult = await panel.change_admin_password(username=target_admin,token=mytoken,data=info)\nprint(result) #output: success\n```\n### Remove Admin\n```python\ntarget_admin = \"test\"\nresult = await panel.delete_admin(username=target_admin,token=mytoken)\nprint(result) #output: success\n```\n### Get All Admins\n```python\nresult = await panel.get_all_admins(token=mytoken)\nprint(result) \n#output: [{'username': 'test', 'is_sudo': True}, {'username': 'test1', 'is_sudo': False}]\n```\n### User Subscription\n```python\nsubscription_url = \"https://sub.yourdomain.com/sub/eyJhbGciOiJIUzI8NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJNbWRDcmFaeSIsImFjY2VzcyI8InN1YnNjcmlwdGlvbiIsImlhdCI1MTY5NDk1NTkxMH0.o75ML5835SPXpVPKXcvEIUxMTwSy-4XGS9NIdWOAmXY\"\nresult = await panel.get_subscription(subscription_url)\nprint(result) #output: Configs\n```\n### User Subscription info\n```python\nsubscription_url = \"https://sub.yourdomain.com/sub/eyJhbGciOiJIUzI8NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJNbWRDcmFaeSIsImFjY2VzcyI8InN1YnNjcmlwdGlvbiIsImlhdCI1MTY5NDk1NTkxMH0.o75ML5835SPXpVPKXcvEIUxMTwSy-4XGS9NIdWOAmXY\"\nresult = await panel.get_subscription_info(subscription_url)\nprint(result) #output: User information (usage,links,inbounds,....)\n```\n### Get System Stats\n```python\nresult = await panel.get_system_stats(token=mytoken)\nprint(result) #output: system stats Memory & CPU usage ...\n```\n### Get Inbounds\n```python\nresult = await panel.get_inbounds(token=mytoken)\nprint(result) #output: list of inbounds\n```\n### Get Hosts\n```python\nresult = await panel.get_hosts(token=mytoken)\nprint(result) #output: list of hosts\n```\n### Modify Hosts\n```python\nhosts = {\n \"VMess TCP\": [\n {\n \"remark\": \"somename\",\n \"address\": \"someaddress\",\n \"port\": 0,\n \"sni\": \"somesni\",\n \"host\": \"somehost\",\n \"security\": \"inbound_default\",\n \"alpn\": \"\",\n \"fingerprint\": \"\"\n }\n ]\n}\n# **Backup first**\nresult = await panel.modify_hosts(token=mytoken,data=hosts)\nprint(result) #output: hosts\n```\n### Get Core Stats\n```python\nresult = await panel.get_xray_core(token=mytoken)\nprint(result)\n #output: {'version': '1.8.1', 'started': True, 'logs_websocket': '/api/core/logs'}\n```\n### Restart Core\n```python\nresult = await panel.restart_xray_core(token=mytoken)\nprint(result)\n #output: success\n```\n### Get Core Config\n```python\nresult = await panel.get_xray_config(token=mytoken)\nprint(result) #output: your xray core config\n```\n### Modify Core Config\n```python\nnew_config={\"your config\"}\nresult = await panel.modify_xray_config(token=mytoken,config=new_config)\nprint(result) #output: success\n```\n### Add User\n```python\nfrom marzpy.api.user import User\n\nuser = User(\n username=\"Mewhrzad\",\n proxies={\n \"vmess\": {\"id\": \"35e7e39c-7d5c-1f4b-8b71-508e4f37ff53\"},\n \"vless\": {\"id\": \"35e7e39c-7d5c-1f4b-8b71-508e4f37ff53\"},\n },\n inbounds={\"vmess\": [\"VMess TCP\"], \"vless\": [\"VLESS TCP REALITY\"]},\n expire=0,\n data_limit=0,\n data_limit_reset_strategy=\"no_reset\",\n status=\"active\"\n)\nresult = await panel.add_user(user=user, token=token) #return new User object\n\nprint(result.username) #-> Mewhrzad, #user.proxies, #user.inbounds, #user.expire, #user.data_limit, #userdata_limit_reset_strategy, #user.status, #user.used_traffic, #user.lifetime_used_traffic, #user.created_at, #user.links, #user.subscription_url, #user.excluded_inbounds\n```\n### Get User\n```python\nresult = await panel.get_user(\"Mewhrzad\",token=mytoken) #return User object\nprint(result.subscription_url)\n```\n### Modify User\n```python\nnew_user = User(\n username=\"test\",\n proxies={\n \"vmess\": {\"id\": \"35e4e39c-7d5c-4f4b-8b71-558e4f37ff53\"},\n \"vless\": {\"id\": \"35e4e39c-7d5c-4f4b-8b71-558e4f37ff53\"},\n },\n inbounds={\"vmess\": [\"VMess TCP\"], \"vless\": [\"VLESS TCP REALITY\"]},\n expire=0,\n data_limit=0,\n data_limit_reset_strategy=\"no_reset\",\n status=\"active\",\n)\nresult = await panel.modify_user(\"Mewhrzad\", token=mytoken, user=new_user)\nprint(result.subscription_url) #output: modified user object\n```\n### Remove User\n```python\nresult = await panel.delete_user(\"test\", token=mytoken)\nprint(result) #output: success\n```\n### Reset User Data Usage\n```python\nresult = await panel.reset_user_traffic(\"test\", token=mytoken)\nprint(result) #output: success\n```\n### Reset All Users Data Usage\n```python\nresult = await panel.reset_all_users_traffic(token=mytoken)\nprint(result) #output: success\n```\n### Get All Users\n```python\nresult = await panel.get_all_users(token=mytoken) #return list of users\nfor user in result:\n print(user.username) \n```\n### Get User Usage\n```python\nresult = await panel.get_user_usage(\"mewhrzad\",token=mytoken)\nprint(result) \n#output: [{'node_id': None, 'node_name': 'MTN', 'used_traffic': 0}, \n#{'node_id': 1, 'node_name': 'MCI', 'used_traffic': 0}]\n```\n### Get All User Templates\n```python\nresult = await panel.get_all_templates(token=mytoken) #return template list object\nfor template in result:\n print(template.name)\n```\n### Add User Template\n```python\nfrom marzpy.api.template import Template\n\ntemp = Template(\n name=\"new_template\",\n inbounds={\"vmess\": [\"VMESS TCP\"], \"vless\": [\"VLESS TCP REALITY\"]},\n data_limit=0,\n expire_duration=0,\n username_prefix=None,\n username_suffix=None,\n)\nresult = await panel.add_template(token=mytoken, template=temp) # return new Template object\nprint(result.name) #output: new_template\n```\n### Get User Template\n```python\ntemplate_id = 11\nresult = await panel.get_template_by_id(token=mytoken, id=template_id) # return Template object\nprint(result.name) #output: new_template\n```\n### Modify User Template\n```python\nfrom marzpy.api.template import Template\n\ntemp = Template(\n name=\"new_template2\",\n inbounds={\"vmess\": [\"VMESS TCP\"], \"vless\": [\"VLESS TCP REALITY\"]},\n data_limit=0,\n expire_duration=0,\n username_prefix=None,\n username_suffix=None,\n)\nresult = await panel.modify_template_by_id(\n id=1, token=mytoken, template=temp) # return Modified Template object\nprint(result.name) #output: new_template2\n```\n### Remove User Template\n```python\nresult = await panel.delete_template_by_id(id=1, token=mytoken)\nprint(result) #output: success\n```\n### Add Node\n```python\nfrom marzpy.api.node import Node\n\nmy_node = Node(\n name=\"somename\",\n address=\"test.example.com\",\n port=62050,\n api_port=62051,\n certificate=\"your_cert\",\n id=4,\n xray_version=\"1.8.1\",\n status=\"connected\",\n message=\"string\",\n)\n\nresult = await panel.add_node(token=mytoken, node=my_node) # return new Node object\nprint(result.address)\n```\n### Get Node\n```python\nresult = await panel.get_node_by_id(id=1, token=mytoken) # return exist Node object\nprint(result.address) #output: address of node 1\n```\n### Modify Node\n```python\nfrom marzpy.api.node import Node\n\nmy_node = Node(\n name=\"somename\",\n address=\"test.example.com\",\n port=62050,\n api_port=62051,\n certificate=\"your_cert\",\n id=4,\n xray_version=\"1.8.1\",\n status=\"connected\",\n message=\"string\",\n)\n\nresult = await panel.modify_node_by_id(id=1, token=mytoken,node=my_node) # return modified Node object\nprint(result.address) #output:test.example.com\n```\n### Remove Node\n```python\nresult = await panel.delete_node(id=1, token=mytoken)\nprint(result) #output: success\n```\n### Get All Nodes\n```python\nresult = await panel.get_all_nodes(token=mytoken) # return List of Node object\nfor node in result:\n print(node.address)\n```\n### Reconenct Node\n```python\nresult = await panel.reconnect_node(id=1,token=mytoken)\nprint(result) #output: success\n```\n### Get Node Usage\n```python\nresult = await panel.get_nodes_usage(token=mytoken)\nfor node in result:\n print(node)\n#output:{'node_id': 1, 'node_name': 'N1', 'uplink': 1000000000000, 'downlink': 1000000000000}\n# {'node_id': 2, 'node_name': 'N2', 'uplink': 1000000000000, 'downlink': 1000000000000}\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "A fork of the original Marzpy library to manage Marzban panel",
"version": "0.0.7",
"project_urls": {
"Homepage": "https://github.com/vsskx/marzpy"
},
"split_keywords": [
"marzpy",
" marzban",
" gozargah",
" marzban python",
" marzban api"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "021bc768d0c83d95c77c40c135a9e0e12f33b7fdbb0df090a7c162ac0d0769ab",
"md5": "2d3fa4f816035417a30d0f88e2644028",
"sha256": "9ee799a1fa473687b235b26b49250075f784311a4090807a8d1bb9b7a125a0e3"
},
"downloads": -1,
"filename": "marzpy_fork-0.0.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2d3fa4f816035417a30d0f88e2644028",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 11823,
"upload_time": "2024-09-08T14:04:36",
"upload_time_iso_8601": "2024-09-08T14:04:36.480891Z",
"url": "https://files.pythonhosted.org/packages/02/1b/c768d0c83d95c77c40c135a9e0e12f33b7fdbb0df090a7c162ac0d0769ab/marzpy_fork-0.0.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6609fa686caaa6c7f7d354514efc35f7ed3dfbfba38d2b6401ec7eb603cb95f8",
"md5": "7f6c44b0f7b280bd22aed1ec78cd3212",
"sha256": "59c7ed0fd00b0be38c38e63363ac2499f230343650f068c0a546b138b49c77bc"
},
"downloads": -1,
"filename": "marzpy_fork-0.0.7.tar.gz",
"has_sig": false,
"md5_digest": "7f6c44b0f7b280bd22aed1ec78cd3212",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 11374,
"upload_time": "2024-09-08T14:04:37",
"upload_time_iso_8601": "2024-09-08T14:04:37.769599Z",
"url": "https://files.pythonhosted.org/packages/66/09/fa686caaa6c7f7d354514efc35f7ed3dfbfba38d2b6401ec7eb603cb95f8/marzpy_fork-0.0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-08 14:04:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "vsskx",
"github_project": "marzpy",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "marzpy-fork"
}