# BANY
A collection of scripts to...
1) Convert text in a PDF into YNAB transactions
2) Split a series of transactions between people
3) Solve the constrained partitioning problem for investing
# Setup
```bash
pyenv local 3.11.1
pipx install bany --python $(which python)
bany --help
```
# Commands
## `bany extract`
Create YNAB transactions from a PDF
### Examples
- Run the extract command to parse a PDF and upload transactions to YNAB
```bash
bany extract pdf --inp /path/to/pdf --config config.yaml
bany extract pdf --inp /path/to/pdf --config config.yaml --upload
```
### `config.yaml`
- Some examples can be found in the `./cfg` directory
- Define rules to match patterns in the text of a PDF
- Define the transactions to create from these matches
```yaml
# Regular Expressions defined for date like values
dates:
Force Date:
value: |-
2023-01-01
Check Date:
regex: |-
Check\s+Date\s+(?P<DATE>{MONTHS}\s+\d+,?\s+\d\d\d\d)
# Regular Expressions defined for money like values
amounts:
401K:
group: EARNINGS
inflow: true
regex: |-
401K\s+
(?P<HOURS>{NUMBER})\s+
(?P<MONEY>{AMOUNT})\s+
(?P<TOTAL>{AMOUNT})
Salary:
group: EARNINGS
inflow: true
regex: |-
REGULAR\s+
(?P<RATES>{NUMBER})\s+
(?P<HOURS>{NUMBER})\s+
(?P<MONEY>{AMOUNT})\s+
(?P<TOTAL>{AMOUNT})
TOTAL-EARNINGS:
group: EARNINGS
inflow: true
total: true
regex: |-
Gross\s+Earnings\s+
(?P<HOURS>{NUMBER})\s+
(?P<MONEY>{AMOUNT})\s+
(?P<TOTAL>{AMOUNT})
# Transactions to push to a YNAB budget (these may reference the matches defined above)
transactions:
- budget: 2023
account: 'Checking'
category: 'Internal Master Category: Inflow: Ready to Assign'
payee: Company
color: red
amount: Salary
date: Check Date
- budget: 2023
account: 'Company'
category: 'Investment: Fidelity'
payee: 'Transfer : Fidelity : Syapse'
memo: 2023
color: yellow
amount: 401K
date: Check Date
```
## `bany split`
This is a script to help split transactions between multiple people.
### Examples
This script opens an interactive loop.
```bash
bany split
```
#### Run a series of commands
You can run a series of commands defined in a text file (see example in `./cfg` directory.
```text
split -a 12.79 -p Costco -C Food -d Dad=1 Adam=0 Doug=0 -c Adam=1
split -a 7.49 -p Costco -C Food -d Dad=1 Adam=0 Doug=0 -c Adam=1
summarize
```
```bash
bany > @ costco.txt
```
#### Show the possible commands
```bash
bany > help
Documented commands (use 'help -v' for verbose/'help <topic>' for details):
My Category
===========
clear delete show split summarize tax tip
Uncategorized
=============
help history quit set shortcuts
```
#### Split some transactions between some people
```bash
bany > split --amount 10.00 --payee GroceryStore --category Food --debit Alice=2/5 Bob=3/5 --credit Bob=1
group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta
0 0 $10.00 0 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00
bany > split --amount 15.75 --payee Restaurant --category Dinner --debit Alice=1/2 Bob=1/2 --credit Alice=1
group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta
0 0 $10.00 0 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00
1 1 $15.75 0 Restaurant Dinner (Alice, Bob) (Alice) 787 787 0.5 0.5 $7.87 $7.88 Alice -$0.01
```
#### Add taxes and tips for the previous transaction
```bash
bany > tip --amount 5.00 --category Tips
group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta
0 0 $10.00 0.00000 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00
1 1 $15.75 0.00000 Restaurant Dinner (Alice, Bob) (Alice) 787 787 0.5 0.5 $7.87 $7.88 Alice -$0.01
2 1 $5.00 0.31746 Restaurant Tips (Alice, Bob) (Alice) 250 250 0.5 0.5 $2.50 $2.50 - $0.00
```
```bash
bany > tax --rate 0.07 --payee SalesTax
group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta
0 0 $10.00 0.00000 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00
1 1 $15.75 0.00000 Restaurant Dinner (Alice, Bob) (Alice) 787 787 0.5 0.5 $7.87 $7.88 Alice -$0.01
2 1 $5.00 0.31746 Restaurant Tips (Alice, Bob) (Alice) 250 250 0.5 0.5 $2.50 $2.50 - $0.00
3 1 $1.10 0.07000 SalesTax Dinner (Alice, Bob) (Alice) 55 55 0.5 0.5 $0.55 $0.55 - $0.00
```
#### Display the current transactions
```bash
bany > show
group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta
0 0 $10.00 0.00000 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00
1 1 $15.75 0.00000 Restaurant Dinner (Alice, Bob) (Alice) 787 787 0.5 0.5 $7.87 $7.88 Alice -$0.01
2 1 $5.00 0.31746 Restaurant Tips (Alice, Bob) (Alice) 250 250 0.5 0.5 $2.50 $2.50 - $0.00
3 1 $1.10 0.07000 SalesTax Dinner (Alice, Bob) (Alice) 55 55 0.5 0.5 $0.55 $0.55 - $0.00
```
#### Aggregate by categories and people
```bash
bany > summarize
amount category payee Alice.$ Bob.$
0 $10.00 Food GroceryStore $4.00 $6.00
1 $15.75 Dinner Restaurant $7.87 $7.88
2 $5.00 Tips Restaurant $2.50 $2.50
3 $1.10 Dinner SalesTax $0.55 $0.55
```
## `bany solve`
This is a script to solve a math problem.
- I have a few investment funds and want them each to have a certain percent of my savings.
- I need to know which funds to put the money in to reach my desired allocation.
> We have a histogram and want to morph it into a new shape
1) Given a set of labeled buckets with known item counts...
2) Given a new amount of items to place into the buckets...
3) Given a desired distribution of items for the buckets...
How should we place the new items into the buckets?
### Examples
```bash
# The problem will be solved in an unconstrained way by default
# Values can be added or removed from existing bins
bany solve unconstrained --config allocate.yaml
# The problem can be solved in a constrained way as well
# Values can only be added to bins
bany solve constrained --config allocate.yaml
# A Monte Carlo based solver also exists, which is non-deterministic
# Values can be added in fixed sizes
bany solve montecarlo --config allocate.yaml --stepsize 25
```
#### Input Distribution
```bash
TOTAL level=[0] current_value=[ 6,000.00] optimal_ratio=[1.000] amount_to_add=[ 8,000.00]
├─VIGAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.220] amount_to_add=[ 0.00]
├─VVIAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.280] amount_to_add=[ 0.00]
├─VMGMX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.100] amount_to_add=[ 0.00]
├─VMVAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.150] amount_to_add=[ 0.00]
├─VSGAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.100] amount_to_add=[ 0.00]
└─VSIAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.150] amount_to_add=[ 0.00]
```
#### Output Distribution
```bash
TOTAL level=[0] results_value=[14,000.00] results_ratio=[1.000] amount_to_add=[ 0.00]
├─VIGAX level=[1] results_value=[ 3,080.00] results_ratio=[0.220] amount_to_add=[ 2,080.00]
├─VVIAX level=[1] results_value=[ 3,920.00] results_ratio=[0.280] amount_to_add=[ 2,920.00]
├─VMGMX level=[1] results_value=[ 1,400.00] results_ratio=[0.100] amount_to_add=[ 400.00]
├─VMVAX level=[1] results_value=[ 2,100.00] results_ratio=[0.150] amount_to_add=[ 1,100.00]
├─VSGAX level=[1] results_value=[ 1,400.00] results_ratio=[0.100] amount_to_add=[ 400.00]
└─VSIAX level=[1] results_value=[ 2,100.00] results_ratio=[0.150] amount_to_add=[ 1,100.00]
```
### `config.yaml`
The input is a hierarchy of bins with current values and desired ratios.
##### yaml
The input can be given as a YAML file.
```yaml
- { label: 'TOTAL', optimal_ratio: 100, current_value: 6000, amount_to_add: 8000, children: [
'VIGAX', 'VVIAX', 'VMGMX', 'VMVAX', 'VSGAX', 'VSIAX'] }
- { label: 'VIGAX', optimal_ratio: 22, current_value: 1000, amount_to_add: 0, children: [] }
- { label: 'VVIAX', optimal_ratio: 28, current_value: 1000, amount_to_add: 0, children: [] }
- { label: 'VMGMX', optimal_ratio: 10, current_value: 1000, amount_to_add: 0, children: [] }
- { label: 'VMVAX', optimal_ratio: 15, current_value: 1000, amount_to_add: 0, children: [] }
- { label: 'VSGAX', optimal_ratio: 10, current_value: 1000, amount_to_add: 0, children: [] }
- { label: 'VSIAX', optimal_ratio: 15, current_value: 1000, amount_to_add: 0, children: [] }
```
You can use regular expressions when specifying the children of a category.
```yaml
- { label: 'TOTAL', optimal_ratio: 100, current_value: 6000, amount_to_add: 8000, children: ['regex::.*'] }
...
```
##### csv
The input can be given as a CSV file.
```csv
label optimal_ratio current_value amount_to_add children
0 TOTAL 100.0 6000.0 8000.0 VIGAX;VVIAX;VMGMX;VMVAX;VSGAX;VSIAX
1 VIGAX 22.0 1000.0 0.0
2 VVIAX 28.0 1000.0 0.0
3 VMGMX 10.0 1000.0 0.0
4 VMVAX 15.0 1000.0 0.0
5 VSGAX 10.0 1000.0 0.0
6 VSIAX 15.0 1000.0 0.0
```
Raw data
{
"_id": null,
"home_page": "https://github.com/AdamGagorik/bany",
"name": "bany",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.12,>=3.11",
"maintainer_email": null,
"keywords": "YNAB, finance, budgeting",
"author": "Adam Gagorik",
"author_email": "adam.gagorik@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/95/1a/e1761709b5de6f7564d7ed93dfc6a20ecaf9d0371cdcd9b04cdfab4096bd/bany-1.4.6.tar.gz",
"platform": null,
"description": "# BANY\n\nA collection of scripts to...\n\n1) Convert text in a PDF into YNAB transactions\n2) Split a series of transactions between people\n3) Solve the constrained partitioning problem for investing\n\n# Setup\n\n```bash\npyenv local 3.11.1\npipx install bany --python $(which python)\nbany --help\n```\n\n# Commands\n\n## `bany extract`\n\nCreate YNAB transactions from a PDF\n\n### Examples\n\n- Run the extract command to parse a PDF and upload transactions to YNAB\n\n```bash\nbany extract pdf --inp /path/to/pdf --config config.yaml\nbany extract pdf --inp /path/to/pdf --config config.yaml --upload\n```\n\n### `config.yaml`\n\n- Some examples can be found in the `./cfg` directory\n- Define rules to match patterns in the text of a PDF\n- Define the transactions to create from these matches\n\n```yaml\n# Regular Expressions defined for date like values\ndates:\n Force Date:\n value: |-\n 2023-01-01\n\n Check Date:\n regex: |-\n Check\\s+Date\\s+(?P<DATE>{MONTHS}\\s+\\d+,?\\s+\\d\\d\\d\\d)\n\n# Regular Expressions defined for money like values\namounts:\n 401K:\n group: EARNINGS\n inflow: true\n regex: |-\n 401K\\s+\n (?P<HOURS>{NUMBER})\\s+\n (?P<MONEY>{AMOUNT})\\s+\n (?P<TOTAL>{AMOUNT})\n\n Salary:\n group: EARNINGS\n inflow: true\n regex: |-\n REGULAR\\s+\n (?P<RATES>{NUMBER})\\s+\n (?P<HOURS>{NUMBER})\\s+\n (?P<MONEY>{AMOUNT})\\s+\n (?P<TOTAL>{AMOUNT})\n\n TOTAL-EARNINGS:\n group: EARNINGS\n inflow: true\n total: true\n regex: |-\n Gross\\s+Earnings\\s+\n (?P<HOURS>{NUMBER})\\s+\n (?P<MONEY>{AMOUNT})\\s+\n (?P<TOTAL>{AMOUNT})\n\n# Transactions to push to a YNAB budget (these may reference the matches defined above)\ntransactions:\n- budget: 2023\n account: 'Checking'\n category: 'Internal Master Category: Inflow: Ready to Assign'\n payee: Company\n color: red\n amount: Salary\n date: Check Date\n\n- budget: 2023\n account: 'Company'\n category: 'Investment: Fidelity'\n payee: 'Transfer : Fidelity : Syapse'\n memo: 2023\n color: yellow\n amount: 401K\n date: Check Date\n\n```\n\n## `bany split`\n\nThis is a script to help split transactions between multiple people.\n\n### Examples\n\nThis script opens an interactive loop.\n\n```bash\nbany split\n```\n\n#### Run a series of commands\n\nYou can run a series of commands defined in a text file (see example in `./cfg` directory.\n\n```text\nsplit -a 12.79 -p Costco -C Food -d Dad=1 Adam=0 Doug=0 -c Adam=1\nsplit -a 7.49 -p Costco -C Food -d Dad=1 Adam=0 Doug=0 -c Adam=1\nsummarize\n```\n\n```bash\nbany > @ costco.txt\n```\n\n#### Show the possible commands\n\n```bash\nbany > help\n\nDocumented commands (use 'help -v' for verbose/'help <topic>' for details):\n\nMy Category\n===========\nclear delete show split summarize tax tip\n\nUncategorized\n=============\nhelp history quit set shortcuts\n```\n\n#### Split some transactions between some people\n\n```bash\nbany > split --amount 10.00 --payee GroceryStore --category Food --debit Alice=2/5 Bob=3/5 --credit Bob=1\n\n group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta\n0 0 $10.00 0 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00\n\nbany > split --amount 15.75 --payee Restaurant --category Dinner --debit Alice=1/2 Bob=1/2 --credit Alice=1\n\n group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta\n0 0 $10.00 0 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00\n1 1 $15.75 0 Restaurant Dinner (Alice, Bob) (Alice) 787 787 0.5 0.5 $7.87 $7.88 Alice -$0.01\n```\n\n#### Add taxes and tips for the previous transaction\n\n```bash\nbany > tip --amount 5.00 --category Tips\n\n group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta\n0 0 $10.00 0.00000 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00\n1 1 $15.75 0.00000 Restaurant Dinner (Alice, Bob) (Alice) 787 787 0.5 0.5 $7.87 $7.88 Alice -$0.01\n2 1 $5.00 0.31746 Restaurant Tips (Alice, Bob) (Alice) 250 250 0.5 0.5 $2.50 $2.50 - $0.00\n```\n\n```bash\nbany > tax --rate 0.07 --payee SalesTax\n\n group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta\n0 0 $10.00 0.00000 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00\n1 1 $15.75 0.00000 Restaurant Dinner (Alice, Bob) (Alice) 787 787 0.5 0.5 $7.87 $7.88 Alice -$0.01\n2 1 $5.00 0.31746 Restaurant Tips (Alice, Bob) (Alice) 250 250 0.5 0.5 $2.50 $2.50 - $0.00\n3 1 $1.10 0.07000 SalesTax Dinner (Alice, Bob) (Alice) 55 55 0.5 0.5 $0.55 $0.55 - $0.00\n```\n\n#### Display the current transactions\n\n```bash\nbany > show\n\n group amount rate payee category debtors creditors Alice Bob Alice.w Bob.w Alice.$ Bob.$ Who Delta\n0 0 $10.00 0.00000 GroceryStore Food (Alice, Bob) (Bob) 400 600 0.4 0.6 $4.00 $6.00 - $0.00\n1 1 $15.75 0.00000 Restaurant Dinner (Alice, Bob) (Alice) 787 787 0.5 0.5 $7.87 $7.88 Alice -$0.01\n2 1 $5.00 0.31746 Restaurant Tips (Alice, Bob) (Alice) 250 250 0.5 0.5 $2.50 $2.50 - $0.00\n3 1 $1.10 0.07000 SalesTax Dinner (Alice, Bob) (Alice) 55 55 0.5 0.5 $0.55 $0.55 - $0.00\n```\n\n#### Aggregate by categories and people\n\n```bash\nbany > summarize\n\n amount category payee Alice.$ Bob.$\n0 $10.00 Food GroceryStore $4.00 $6.00\n1 $15.75 Dinner Restaurant $7.87 $7.88\n2 $5.00 Tips Restaurant $2.50 $2.50\n3 $1.10 Dinner SalesTax $0.55 $0.55\n```\n\n## `bany solve`\n\nThis is a script to solve a math problem.\n\n- I have a few investment funds and want them each to have a certain percent of my savings.\n- I need to know which funds to put the money in to reach my desired allocation.\n\n> We have a histogram and want to morph it into a new shape\n\n 1) Given a set of labeled buckets with known item counts...\n 2) Given a new amount of items to place into the buckets...\n 3) Given a desired distribution of items for the buckets...\n\nHow should we place the new items into the buckets?\n\n### Examples\n\n```bash\n# The problem will be solved in an unconstrained way by default\n# Values can be added or removed from existing bins\nbany solve unconstrained --config allocate.yaml\n\n# The problem can be solved in a constrained way as well\n# Values can only be added to bins\nbany solve constrained --config allocate.yaml\n\n# A Monte Carlo based solver also exists, which is non-deterministic\n# Values can be added in fixed sizes\nbany solve montecarlo --config allocate.yaml --stepsize 25\n```\n\n#### Input Distribution\n\n```bash\nTOTAL level=[0] current_value=[ 6,000.00] optimal_ratio=[1.000] amount_to_add=[ 8,000.00]\n \u251c\u2500VIGAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.220] amount_to_add=[ 0.00]\n \u251c\u2500VVIAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.280] amount_to_add=[ 0.00]\n \u251c\u2500VMGMX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.100] amount_to_add=[ 0.00]\n \u251c\u2500VMVAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.150] amount_to_add=[ 0.00]\n \u251c\u2500VSGAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.100] amount_to_add=[ 0.00]\n \u2514\u2500VSIAX level=[1] current_value=[ 1,000.00] optimal_ratio=[0.150] amount_to_add=[ 0.00]\n```\n\n#### Output Distribution\n\n```bash\nTOTAL level=[0] results_value=[14,000.00] results_ratio=[1.000] amount_to_add=[ 0.00]\n \u251c\u2500VIGAX level=[1] results_value=[ 3,080.00] results_ratio=[0.220] amount_to_add=[ 2,080.00]\n \u251c\u2500VVIAX level=[1] results_value=[ 3,920.00] results_ratio=[0.280] amount_to_add=[ 2,920.00]\n \u251c\u2500VMGMX level=[1] results_value=[ 1,400.00] results_ratio=[0.100] amount_to_add=[ 400.00]\n \u251c\u2500VMVAX level=[1] results_value=[ 2,100.00] results_ratio=[0.150] amount_to_add=[ 1,100.00]\n \u251c\u2500VSGAX level=[1] results_value=[ 1,400.00] results_ratio=[0.100] amount_to_add=[ 400.00]\n \u2514\u2500VSIAX level=[1] results_value=[ 2,100.00] results_ratio=[0.150] amount_to_add=[ 1,100.00]\n```\n\n### `config.yaml`\n\nThe input is a hierarchy of bins with current values and desired ratios.\n\n##### yaml\n\nThe input can be given as a YAML file.\n\n```yaml\n- { label: 'TOTAL', optimal_ratio: 100, current_value: 6000, amount_to_add: 8000, children: [\n 'VIGAX', 'VVIAX', 'VMGMX', 'VMVAX', 'VSGAX', 'VSIAX'] }\n- { label: 'VIGAX', optimal_ratio: 22, current_value: 1000, amount_to_add: 0, children: [] }\n- { label: 'VVIAX', optimal_ratio: 28, current_value: 1000, amount_to_add: 0, children: [] }\n- { label: 'VMGMX', optimal_ratio: 10, current_value: 1000, amount_to_add: 0, children: [] }\n- { label: 'VMVAX', optimal_ratio: 15, current_value: 1000, amount_to_add: 0, children: [] }\n- { label: 'VSGAX', optimal_ratio: 10, current_value: 1000, amount_to_add: 0, children: [] }\n- { label: 'VSIAX', optimal_ratio: 15, current_value: 1000, amount_to_add: 0, children: [] }\n```\n\nYou can use regular expressions when specifying the children of a category.\n\n```yaml\n- { label: 'TOTAL', optimal_ratio: 100, current_value: 6000, amount_to_add: 8000, children: ['regex::.*'] }\n...\n```\n\n##### csv\n\nThe input can be given as a CSV file.\n\n```csv\n label optimal_ratio current_value amount_to_add children\n0 TOTAL 100.0 6000.0 8000.0 VIGAX;VVIAX;VMGMX;VMVAX;VSGAX;VSIAX\n1 VIGAX 22.0 1000.0 0.0\n2 VVIAX 28.0 1000.0 0.0\n3 VMGMX 10.0 1000.0 0.0\n4 VMVAX 15.0 1000.0 0.0\n5 VSGAX 10.0 1000.0 0.0\n6 VSIAX 15.0 1000.0 0.0\n```\n",
"bugtrack_url": null,
"license": "WTFPL",
"summary": "A collection of scripts for personal finance",
"version": "1.4.6",
"project_urls": {
"Homepage": "https://github.com/AdamGagorik/bany",
"Repository": "https://github.com/AdamGagorik/bany"
},
"split_keywords": [
"ynab",
" finance",
" budgeting"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "325927fa77097eba5a210a95fa49bce6e5fa4ee5eebdb48cbd6a6912eeef2d8f",
"md5": "88d58b250bce2b91786a653a107059cc",
"sha256": "39680128b36a1f471392ee6a054873e46a1e80dee3000cf8570e115533989880"
},
"downloads": -1,
"filename": "bany-1.4.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "88d58b250bce2b91786a653a107059cc",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.12,>=3.11",
"size": 41211,
"upload_time": "2024-08-04T00:11:38",
"upload_time_iso_8601": "2024-08-04T00:11:38.178403Z",
"url": "https://files.pythonhosted.org/packages/32/59/27fa77097eba5a210a95fa49bce6e5fa4ee5eebdb48cbd6a6912eeef2d8f/bany-1.4.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "951ae1761709b5de6f7564d7ed93dfc6a20ecaf9d0371cdcd9b04cdfab4096bd",
"md5": "255295a0bf448e7369fa7d35ebd845d3",
"sha256": "9df6dde3e4263a637960fc53cb6c38dfba800e296de9a437d783fb4dbfa1d663"
},
"downloads": -1,
"filename": "bany-1.4.6.tar.gz",
"has_sig": false,
"md5_digest": "255295a0bf448e7369fa7d35ebd845d3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.12,>=3.11",
"size": 32971,
"upload_time": "2024-08-04T00:11:39",
"upload_time_iso_8601": "2024-08-04T00:11:39.439434Z",
"url": "https://files.pythonhosted.org/packages/95/1a/e1761709b5de6f7564d7ed93dfc6a20ecaf9d0371cdcd9b04cdfab4096bd/bany-1.4.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-04 00:11:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "AdamGagorik",
"github_project": "bany",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "bany"
}