{ "info": { "author": "Jeremy Maitin-Shepard", "author_email": "jeremy@jeremyms.com", "bugtrack_url": null, "classifiers": [], "description": "Beancount-import is a tool for semi-automatically importing financial data from\nexternal data sources into the [Beancount](http://furius.ca/beancount/)\nbookkeeping system, as well as merging and reconciling imported transactions with\neach other and with existing transactions.\n\n[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](LICENSE)\n[![Build Status](https://travis-ci.com/jbms/beancount-import.svg?branch=master)](https://travis-ci.com/jbms/beancount-import)\n[![Coverage Status](https://coveralls.io/repos/github/jbms/beancount-import/badge.svg?branch=master)](https://coveralls.io/github/jbms/beancount-import?branch=master)\n\n# Key features\n\n- Pluggable data source architecture, including existing support for OFX (cash,\n investment, and retirement accounts), Mint.com, Amazon.com, and Venmo.\n\n- Robustly associates imported transactions with the source data, to\n automatically avoid duplicates.\n\n- Automatically predicts unknown legs of imported transactions based on a\n learned classifier (currently decision tree-based).\n\n- Sophisticated transaction matching/merging system that can semi-automatically\n combine and reconcile both manually entered and imported transactions from\n independent sources.\n\n- Easy-to-use, powerful web-based user interface.\n\n# Basic operation\n\nFrom the data source modules, beancount-import obtains a list of *pending*\nimported transactions. (Balance and price entries may also be provided.)\nDepending on the external data source, pending transactions may fully specify\nall of the Beancount accounts (e.g. an investment transaction from an OFX source\nwhere shares of a stock are bought using cash in the same investment account),\nor may have some postings to unknown accounts, indicated by the special account\nname `Expenses:FIXME`. For example, pending transactions obtained from bank\naccount/credit card account data (e.g. using the Mint.com data source) always\nhave exactly two postings, one to the known Beancount account corresponding to\nthe bank account from which the data was obtained, and the other to an unknown\naccount.\n\nFor each pending transaction, beancount-import attempts to find matches to both\nexisting transactions and to other pending transactions, and computes a set of\ncandidate merged transactions. For each unknown account posting,\nBeancount-import predicts the account based on a learned classifier. Through a\nweb interface, the user can view the pending transactions, select the original\ntransaction or one of the merged candidates, and confirm or modify any predicted\naccounts. The web interface shows the lines in the journal that would be added\nor removed for each candidate. Once the user accepts a candidate, the candidate\nis inserted or merged into the Beancount journal, and the user is then presented\nwith the next pending entry.\n\nThe imported transactions include metadata fields on the transaction and on the\npostings that serve several purposes:\n - indicating to the data source module which entries in its external\n representation have already been imported and should not be imported again;\n - indicating which postings are *cleared*, meaning they have been confirmed by\n the authoritative source, which also constrains matching (a cleared posting\n can only match an uncleared posting);\n - providing necessary information for training the classifier used for\n predicting unknown accounts;\n - providing information to the user that may be helpful for identifying and\n understanding the transaction.\n\n# Installation\n\n1. Ensure you have activated a suitable Python 3 virtualenv if desired.\n\n2. To install the most recent published package from PyPi, simply type:\n\n ```shell\n pip install beancount-import\n ```\n\n Alternatively, to install from a clone of the repository, type:\n ```shell\n pip install .\n ```\n\n or for development:\n ```shell\n pip install -e .\n ```\n\n# Demo\n\nTo see Beancount-import in action on test data, refer to the instructions in the\n[examples](examples/) directory.\n\n# Data sources\n\nData sources are defined by implementing the Source interface defined by the\n[beancount_import.source](beancount_import/source/__init__.py) module.\n\nThe data sources provide a way to import and reconcile already-downloaded data.\nTo retrieve financial data automatically, you can use the\n[finance_dl](https://github.com/jbms/finance-dl) package. You can also use any\nother mechanism, including manually downloading the data from a financial\ninstitution's website, provided that it is in the format required by the data\nsource.\n\nThe currently supported set of data sources is:\n\n- [beancount_import.source.ofx](beancount_import/source/ofx.py): most versatile\n data source, supports checking, savings, credit card, investment, and\n retirement accounts.\n- [beancount_import.source.mint](beancount_import/source/mint.py): supports all\n cash account types supported by [Mint.com](https://www.mint.com).\n- [beancount_import.source.venmo](beancount_import/source/venmo.py)\n- [beancount_import.source.amazon](beancount_import/source/amazon.py): supports\n regular and digital order invoices.\n- [beancount_import.source.healthequity](beancount_import/source/healthequity.py):\n supports [HealthEquity.com](https://healthequity.com) HSA accounts, including\n both cash and investment transactions.\n- [beancount_import.source.google_purchases](beancount_import/source/google_purchases.py):\n imports purchases from that Google has [heuristically extracted from Gmail\n messages](https://myaccount.google.com/purchases).\n- [beancount_import.source.paypal](beancount_import/source/paypal.py):\n imports Paypal transactions.\n- [beancount_import.source.waveapps](beancount_import/source/waveapps.py):\n imports receipts from [Wave](https://waveapps.com), a free receipt-scanning\n website/mobile app.\n- [beancount_import.source.stockplanconnect](beancount_import/source/stockplanconnect.py):\n imports release/trade transactions from\n [Morgan Stanley StockPlan Connect](https://stockplanconnect.com).\n- [beancount_import.source.ultipro_google](beancount_import/source/ultipro_google.py):\n imports Google employee Ultipro payroll statements.\n\nRefer to the individual data source documentation for details on configuration.\n\n# Usage\n\nTo run Beancount-import, create a Python script that invokes the\n`beancount_import.webserver.main` function. Refer to the examples\n[fresh](examples/fresh/run.py) and\n[manually_entered](examples/manually_entered/run.py).\n\n## Errors\n\nAny errors either from Beancount itself or one of the data sources are shown in\nthe `Errors` tab. It is usually wise to manually resolve any errors, either\nusing the built-in editor or an external editor, before proceeding, as some\nerrors may result in incorrect behavior. Balance errors, however, are generally\nsafe to ignore.\n\n## Viewing candidates\n\nSelect the `Candidates` tab to view the current pending imported entry, along\nwith all proposed matches with existing and other pending transactions. The\noriginal unmatched entry is always listed last, and the proposal that\nincludes the most matched postings is listed first. The list with checkboxes at\nthe top indicates which existing or pending transactions are used in each\nproposed match; the current pending transaction is always listed first. If many\nincorrect matches were found, you can deselect the checkboxes to filter the\nmatches.\n\nYou can select one of the proposed entries by clicking on it, or using the\nup/down arrow keys. To accept a proposed entry as is, you can press Enter or\ndouble click it. This immediately modifies the journal to reflect the change,\nand also displays the relevant portion of the journal in the Journal tab, so\nthat you may easily make manual edits.\n\n## Specifying unknown accounts\n\nIf a proposed entry includes unknown accounts, they are highlighted with a\ndistinctive background color and labeled with a group number. The account shown\nis the one that was automatically predicted, or `Expenses:FIXME` if automatic\nprediction was not possible (e.g. because of lack of training data). There are\nseveral ways to correct any incorrectly-predicted accounts:\n - To change an individual account, you can Shift+click on it, type in the new\n account name, and then press Enter. If you press Escape while typing in the\n account name, the account will be left unchanged. A fuzzy matching algorithm\n is used for autocompletion: if you type \"ex:co\", for example, it will match\n any accounts for which there is a subsequence of 2 components, where the\n first starts (case-insensitively) with \"ex\" and the second starts with \"co\",\n such as an `Expenses:Drinks:Coffee` account.\n - To change all accounts within a proposed entry that share the same group\n number, you can click on one of the accounts without holding shift, or press\n the digit key corresponding to the group number. Once you type in an account\n and press Enter, the specified account will be substituted for all postings\n in the group.\n - To change all accounts within a proposed entry, you can click the `Change\n account` button or press the `a` key. Once you type in an account and press\n Enter, the specified account will be substituted for all unknown accounts in\n the current entry.\n - If you wish to postpone specifying the correct account, you can click the\n `Fixme later` button or press the `f` key. This will substitute the original\n unknown account names for all unknown accounts in the current entry. If you\n then accept this entry, the transaction including these FIXME accounts will\n be added to your journal, and the next time you start Beancount-import the\n transaction will be treated as a pending entry.\n\n## Viewing associated source data\n\nData sources may indicate that additional source data is associated with\nparticular candidate entries, typically based on the metadata fields and/or\nlinks that are included in the transaction. For example, the\n`beancount_import.source.amazon` data source associates the order invoice HTML\npage with the transaction, and the `beancount_import.source.google_purchases`\ndata source associates the purchase details HTML page. Other possible source\ndata types include PDF statements and receipt images.\n\nYou can view any associated source data for the currently selected candidate by\nselecting the `Source data` tab.\n\n## Changing the narration, payee, links or tags\n\nTo modify the narration of an entry, you can click on it, click the `Narration`\nbutton, or press the `n` key. This actually lets you modify the payee, links,\nand tags as well. If you introduce a syntax error in the first line of\ntransaction, the text box will be highlighted in red and focus will remain until\nyou either correct it or press Escape, which will revert the first line of the\ntransaction back to its previous value.\n\n## Checking for uncleared postings\n\nThe `Uncleared` tab displays the list of postings to accounts for which there is\nan authoritative source and which have not been cleared. Normally, postings are\nmarked as cleared by adding the appropriate source-specific metadata fields that\nassociate it with the external data representation, such as an `ofx_fitid` field\nin the case of the OFX source.\n\nThis list may be useful for finding discrepancies that need manual correction.\nTypical causes of uncleared postings include:\n1. The source data for the posting has not yet been downloaded.\n2. The transaction is a duplicate of another transaction already in the journal,\n and needs to be manually merged/deleted.\n3. The posting is from before the earliest date for which source data was\n imported, and no earlier data is available. Such postings can be ignored by\n adding a `cleared_before: ` metadata field to the `open` directive for\n the account or one of its ancestor accounts.\n4. The source data is missing or cannot be imported, but the posting was\n manually verified. Such postings can be ignored by adding a `cleared: TRUE`\n metadata field to them.\n\n## Skipping and ignoring imported entries\n\nIf you are presented with a pending entry that you don't wish to import, you\nhave several options:\n\n1. You can skip past it by selecting a different transaction in the `Pending`\n tab, or can skip to the next pending entry by clicking on the button labeled\n `\u23e9` or pressing the `]` key. This skips it in the current session, but it\n remains as a pending entry and will be included again if you restart\n beancount-import.\n\n2. You can click on the button labeled `Fixme later` or press the `f` key to\n reset all unknown accounts, and then accept the candidate. This will add the\n transaction to your journal, but with the unknown accounts left as\n `Expenses:FIXME`. This is useful for transactions for which you don't know\n how to assign an account, or which you expect to match to another transaction\n that will be generated from data that hasn't yet been downloaded. Any\n transactions in the journal with `Expenses:FIXME` accounts will be included\n at the end of the list of pending entries the next time you start\n beancount-import.\n\n3. You can click on the button labeled `Ignore` or press the `i` key to add the\n selected candidate to the special \"ignored\" journal file. This is useful for\n transactions that are erroneous, such as actual duplicates. Entries that are\n ignored will not be presented again if you restart beancount-import.\n However, if you manually delete them from the \"ignored\" journal file, they\n will return as pending entries.\n\n## Usage with a reverse proxy\n\nIf you want to run Beancount-import with features like TLS or authentication,\nthen you can run it behind a reverse proxy that provides this functionality.\nFor instance, an NGINX location configuration like the following can route\ntraffic to a local instance of Beancount-import:\n\n```\nlocation /some/url/prefix/ {\n proxy_pass_header Server;\n proxy_set_header Host $http_host;\n proxy_redirect off;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Scheme $scheme;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection \"Upgrade\";\n proxy_pass http://localhost:8101/;\n}\n```\n\nReplace `/some/url/prefix/` with your desired URL path (retaining the trailing\nslash), or even just `/` to make Beancount-import available at the URL root.\n\n# Use with an existing Beancount journal\n\nIf you start using Beancount-import with an existing beancount journal\ncontaining transactions that are also referenced in the external data supplied\nto a data sources, the data source will not know to skip those transactions,\nbecause they will not have the requisite metadata indicating the association.\nTherefore, they will all be presented to you as new pending imported\ntransactions.\n\nHowever, the matching mechanism will very likely have determined the correct\nmatch to an existing transaction, which will be presented as the default option.\nAccepting these matches will simply have the effect of inserting the relevant\nmetadata into your journal so that the transactions are considered \"cleared\" and\nwon't be imported again next time you run Beancount-import. It should be a\nrelatively quick process to do this even for a large number of transactions.\n\n# Development\n\nFor development of this package, make sure to install Beancount-import using the\n`pip install -e .` command rather than the `pip install .` command. If you\npreviously ran the `pip install` command without the `-e` option, you can simply\nre-run the `pip install -e .` command.\n\n## Testing\n\nYou can run the tests using the `pytest` command.\n\nMany of the tests are \"golden\" tests, which work by creating a textual\nrepresentation of some state and comparing it with the contents of a particular\nfile in the [testdata/](testdata/) directory. If you change one of these tests\nor add a new one, you can have the tests automatically generate the output by\nsetting the environment variable `BEANCOUNT_IMPORT_GENERATE_GOLDEN_TESTDATA=1`,\ne.g.:\n\n```shell\nBEANCOUNT_IMPORT_GENERATE_GOLDEN_TESTDATA=1 pytest\n```\n\nMake sure to commit to at least stage any changes you've made to the relevant\n`testdata` files prior to running the tests with this environment variable set.\nThat way you can manually verify any changes between the existing output and the\nnew output using `git diff`.\n\n## Web frontend\n\nThe web frontend source code is in the [frontend/](frontend/) directory. Refer\nto the README.md file there for how to rebuild and run the frontend after making\nchanges.\n\n# Basic workflow\n\n## Simple expense transaction from Mint.com data source\n\nSuppose the user has purchased a coffee at Starbucks on 2016-08-09 using a\ncredit card, and has set up Mint.com to retrieve the transaction data for this\ncredit card.\n\nGiven the following CSV entry:\n\n```csv\n\"Date\",\"Description\",\"Original Description\",\"Amount\",\"Transaction Type\",\"Category\",\"Account Name\",\"Labels\",\"Notes\"\n\"8/10/2016\",\"Starbucks\",\"STARBUCKS STORE 12345\",\"2.45\",\"debit\",\"Coffee Shops\",\"My Credit Card\",\"\",\"\"\n```\n\nand the following open account directive:\n\n```\n1900-01-01 open Liabilities:Credit-Card USD\n mint_id: \"My Credit Card\"\n```\n\nthe Mint data source will generate the following pending transaction:\n\n```\n2016-08-10 * \"STARBUCKS STORE 12345\"\n Liabilities:Credit-Card -2.45 USD\n date: 2016-08-10\n source_desc: \"STARBUCKS STORE 12345\"\n Expenses:FIXME 2.45 USD\n```\n\nThe user might manually specify that the unknown account is `Expenses:Coffee`.\nThe web interface will then show the updated changeset:\n\n```\n+2016-08-10 * \"STARBUCKS STORE 12345\"\n+ Liabilities:Credit-Card -2.45 USD\n+ date: 2016-08-10\n+ source_desc: \"STARBUCKS STORE 12345\"\n+ Expenses:Coffee 2.45 USD\n```\n\nIf the `Expenses:Coffee` account does not already exist, Beancount-import will\nadditionally include an `open` directive in the changeset:\n\n```\n+2016-08-10 * \"STARBUCKS STORE 12345\"\n+ Liabilities:Credit-Card -2.45 USD\n+ date: 2016-08-10\n+ source_desc: \"STARBUCKS STORE 12345\"\n+ Expenses:Coffee 2.45 USD\n+ 2016-08-10 open Expenses:Coffee USD\n```\n\nOnce the user accepts this change, the changeset is applied to the journal. The\npresence of the `date` and `source_desc` metadata fields indicate to the Mint\ndata source that the `Liabilities:Credit-Card` posting is cleared. The\ncombination of the words in the `source_desc`, the *source* account of\n`Liabilities:Credit-Card`, and the *target* account of `Expenses:Coffee` serves\nas a training example for the classifier. A subsequent pending transaction with\na `source_desc` field containing the word `STARBUCKS` is likely to be\nautomatically classified as `Expenses:Coffee`. Note that while in this case the\nnarration matches the `source_desc` field, the narration has no effect on the\nautomatic prediction. The user must not delete or modify these metadata fields,\nbut additional metadata fields may be added.\n\nMint.com has its own heuristics for computing the `Description` and `Category`\nfields from the `Original Description` provided by the financial institution.\nHowever, these are ignored by the Mint data source as they are not stable (can\nchange if the data is re-downloaded) and not particularly reliable.\n\n## Match to a manually entered transaction\n\nConsidering the same transaction as shown in the previous example, suppose the\nuser has already manually entered the transaction prior to running the import:\n\n```\n2016-08-09 * \"Coffee\"\n Liabilities:Credit-Card -2.45 USD\n Expenses:Coffee\n```\n\nWhen running Beancount-import, the user will be presented with two candidates:\n\n```\n 2016-08-09 * \"Coffee\"\n Liabilities:Credit-Card -2.45 USD\n+ date: 2016-08-10\n+ source_desc: \"STARBUCKS STORE 12345\"\n Expenses:Coffee\n\n\n+2016-08-10 * \"STARBUCKS STORE 12345\"\n+ Liabilities:Credit-Card -2.45 USD\n+ date: 2016-08-10\n+ source_desc: \"STARBUCKS STORE 12345\"\n+ Expenses:FIXME 2.45 USD\n```\n\nThe user should select the first one; selecting the second one would yield a\nduplicate transaction (but which could later be diagnosed as an uncleared\ntransaction). The `Expenses:FIXME` account in the second candidate would in\ngeneral actually be some other, possibly incorrect, predicted account, but which\nis clearly indicated as an prediction that can be changed.\n\nAs is typically the case, the date on the manually entered transaction (likely\nthe date on which the transaction actually occurred) is not exactly the same as\nthe date provided by the bank. To handle this discrepancy, Beancount-import\nallows matches between postings that are up to 5 days apart. The `date`\nmetadata field allows the posting to be reliably matched to the corresponding\nentry in the CSV file, even though the overall transaction date differs.\n\nNote that even though this transaction was manually entered, once it is matched\nwith the pending transaction and the `source_desc` and `date` metadata fields\nare added, it functions as a training example exactly the same as in the\nprevious example.\n\n## Credit card payment transaction\n\nSuppose the user pays the balance of a credit card using a bank account, and\nMint.com is set up to retrieve the transactions from both the bank account and\nthe credit card.\n\nGiven the following CSV entries:\n\n```csv\n\"Date\",\"Description\",\"Original Description\",\"Amount\",\"Transaction Type\",\"Category\",\"Account Name\",\"Labels\",\"Notes\"\n\"11/27/2013\",\"Transfer from My Checking\",\"CR CARD PAYMENT ALEXANDRIA VA\",\"66.88\",\"credit\",\"Credit Card Payment\",\"My Credit Card\",\"\",\"\"\n\"12/02/2013\",\"National Federal Des\",\"NATIONAL FEDERAL DES:TRNSFR\",\"66.88\",\"debit\",\"Transfer\",\"My Checking\",\"\",\"\"\n```\n\nand the following open account directives:\n\n```\n1900-01-01 open Liabilities:Credit-Card USD\n mint_id: \"My Credit Card\"\n\n1900-01-01 open Assets:Checking USD\n mint_id: \"My Checking\"\n```\n\nthe Mint data source will generate 2 pending transactions, and for the first one\nwill present two candidates:\n\n```\n+2013-11-27 * \"CR CARD PAYMENT ALEXANDRIA VA\"\n+ Liabilities:Credit-Card 66.88 USD\n+ date: 2013-11-27\n+ source_desc: \"CR CARD PAYMENT ALEXANDRIA VA\"\n+ Assets:Checking -66.88 USD\n+ date: 2013-12-02\n+ source_desc: \"NATIONAL FEDERAL DES:TRNSFR\"\n\n\n+2013-11-27 * \"CR CARD PAYMENT ALEXANDRIA VA\"\n+ Liabilities:Credit-Card 66.88 USD\n+ date: 2013-11-27\n+ source_desc: \"CR CARD PAYMENT ALEXANDRIA VA\"\n+ Expenses:FIXME -66.88 USD\n```\n\nNote that the `Expenses:FIXME` account in the second transaction will actually\nbe whichever account was predicted automatically. If there have been prior\nsimilar transactions, it is likely to be correct predicted as `Assets:Checking`.\n\nThe user should accept the first candidate to import both transactions at once.\nIn that case, both postings are considered cleared, and the new transaction will\nresult in two training examples for automatic prediction, corresponding to each\nof the two combinations of `source_desc`, source account, and target account.\n\nHowever, if the user accepts the second candidate (perhaps because the\ntransaction hasn't yet been posted to the checking account and the pending\ntransaction derived from the checking account data is not yet available), and\neither leaves the account as `Expenses:FIXME`, manually specifies\n`Assets:Checking`, or relies on the automatic prediction to choose\n`Assets:Checking`, then when importing the transaction from the checking\naccount, the user will be presented with the following candidates and will have\nanother chance to accept the match:\n\n\n```\n 2013-11-27 * \"CR CARD PAYMENT ALEXANDRIA VA\"\n Liabilities:Credit-Card 66.88 USD\n date: 2013-11-27\n source_desc: \"CR CARD PAYMENT ALEXANDRIA VA\"\n Assets:Checking -66.88 USD\n+ date: 2013-12-02\n+ source_desc: \"NATIONAL FEDERAL DES:TRNSFR\"\n\n\n+2013-12-02 * \"NATIONAL FEDERAL DES:TRNSFR\"\n+ Assets:Checking -66.88 USD\n+ date: 2013-12-02\n+ source_desc: \"NATIONAL FEDERAL DES:TRNSFR\"\n+ Expenses:FIXME 66.88 USD\n```\n\nLicense\n==\n\nCopyright (C) 2014-2018 Jeremy Maitin-Shepard.\n\nDistributed under the GNU General Public License, Version 2.0 only.\nSee [LICENSE](LICENSE) file for details.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jbms/beancount-import", "keywords": "", "license": "GPLv2", "maintainer": "", "maintainer_email": "", "name": "beancount-import", "package_url": "https://pypi.org/project/beancount-import/", "platform": "", "project_url": "https://pypi.org/project/beancount-import/", "project_urls": { "Homepage": "https://github.com/jbms/beancount-import" }, "release_url": "https://pypi.org/project/beancount-import/1.3.1/", "requires_dist": null, "requires_python": ">=3.5", "summary": "Semi-automatic importing of external data into beancount.", "version": "1.3.1" }, "last_serial": 5862185, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "bd230fd7b29b11578799f12b614048ad", "sha256": "76b108c83e5559e43888d7f3b7ebf9a4cc149e5264bcac8849af56024381a105" }, "downloads": -1, "filename": "beancount-import-1.0.0.zip", "has_sig": false, "md5_digest": "bd230fd7b29b11578799f12b614048ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 207053, "upload_time": "2018-10-04T03:02:06", "url": "https://files.pythonhosted.org/packages/76/1a/35fd2fa9976562143cbfc64df4a100b06c45fb2bfaf3833d8e6cc1578c94/beancount-import-1.0.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "b2021a3478f19ba5f1f9fc0f9e829f9c", "sha256": "19e1ef43262354bb37b8e82998526d309f0e09999407804af6abfec735125b67" }, "downloads": -1, "filename": "beancount-import-1.0.1.zip", "has_sig": false, "md5_digest": "b2021a3478f19ba5f1f9fc0f9e829f9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 220306, "upload_time": "2018-10-04T03:27:11", "url": "https://files.pythonhosted.org/packages/66/aa/7748a5937c48625b7f0b4189a184227560bbe7cfb79df37ff6108d3c89e8/beancount-import-1.0.1.zip" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "81f40dd36b2b759cdcdff7044749fe53", "sha256": "91d2a390ff67b89e659f0e176e870aa9b22145b5fb7c969b20f4fb6613a6f84d" }, "downloads": -1, "filename": "beancount-import-1.0.2.zip", "has_sig": false, "md5_digest": "81f40dd36b2b759cdcdff7044749fe53", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 290248, "upload_time": "2018-10-04T23:23:30", "url": "https://files.pythonhosted.org/packages/93/97/bf7bacc7b88f8fd4fe91ce197f4d950e6ac43eb6293bd6bff8adb5c65afd/beancount-import-1.0.2.zip" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "1fc645fc5480fe748a7e5a768c0d973c", "sha256": "870057b2508d883834d8c3dc91525017021f752d5a903faa2f312f4b4fef9016" }, "downloads": -1, "filename": "beancount-import-1.0.3.zip", "has_sig": false, "md5_digest": "1fc645fc5480fe748a7e5a768c0d973c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 290447, "upload_time": "2018-10-05T01:05:58", "url": "https://files.pythonhosted.org/packages/b4/03/f39752d00a0136a034c3c1ed625e2f644740dedf586bac6818478dca3ba5/beancount-import-1.0.3.zip" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "64357410caa921af60c24b59054ed965", "sha256": "e5816695cbbd4b7a518e7824a83bf3980c769d3974e315b7f5ce82f5847c3be6" }, "downloads": -1, "filename": "beancount-import-1.0.4.zip", "has_sig": false, "md5_digest": "64357410caa921af60c24b59054ed965", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 291740, "upload_time": "2018-10-05T17:22:00", "url": "https://files.pythonhosted.org/packages/2f/a8/5e7e37540d89bd3077cb1c90c9d9d751ddb363a50605c129291f29801fa5/beancount-import-1.0.4.zip" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "7cdeedccaa35d7e2226f241524dcc24c", "sha256": "d6925500630937ae4f8dae89208ddfcb0218d1e4ddbab4ad37a7562ba61fcd46" }, "downloads": -1, "filename": "beancount-import-1.0.5.zip", "has_sig": false, "md5_digest": "7cdeedccaa35d7e2226f241524dcc24c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 291867, "upload_time": "2018-10-31T05:40:39", "url": "https://files.pythonhosted.org/packages/f8/0b/727d1739ee5f2cafd43a95934064807989cb72c3be90e1ea40c3a22658c7/beancount-import-1.0.5.zip" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "33fcbab982aa8b1293ce1bce1b55d901", "sha256": "7e2065fb3c1065e02a157f082f8b608735d15c997bc37122388925493e261375" }, "downloads": -1, "filename": "beancount-import-1.0.7.zip", "has_sig": false, "md5_digest": "33fcbab982aa8b1293ce1bce1b55d901", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 299526, "upload_time": "2018-12-19T05:57:36", "url": "https://files.pythonhosted.org/packages/77/ab/2755ba6642d9394b08e159ddc48f5fc970eed7950ff69edda590b45c6f44/beancount-import-1.0.7.zip" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "21f4ebddd1da1b056de3109483b9ad6f", "sha256": "b653a4ab22cdbcfaee01f008c02f6304bebb39604dbe2809a0d72f09ec9e3e0f" }, "downloads": -1, "filename": "beancount-import-1.0.8.zip", "has_sig": false, "md5_digest": "21f4ebddd1da1b056de3109483b9ad6f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 303727, "upload_time": "2019-01-20T21:46:19", "url": "https://files.pythonhosted.org/packages/87/f9/92773f662e0149c3102126c9ae013969bde9ffd7aab9669da67a1e1c9399/beancount-import-1.0.8.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "0bbf2263e505a0e4cebd36fc7f24d95d", "sha256": "f94d54f7d02cb82f7ab0a1a3086601ebd9a29db7c5b1b9c83328255b632c8701" }, "downloads": -1, "filename": "beancount-import-1.1.0.zip", "has_sig": false, "md5_digest": "0bbf2263e505a0e4cebd36fc7f24d95d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 319330, "upload_time": "2019-01-24T20:06:13", "url": "https://files.pythonhosted.org/packages/0e/0c/cb0f41a10b173fe217b0d4bcb8a26c939eb48152dada04c9d5df2312786e/beancount-import-1.1.0.zip" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "b48831908a5a5f9227f23b679af9bb70", "sha256": "ffb5386d3cba87a9f78878e5f75f97c454cca137e41d7ae847487dd181d15f34" }, "downloads": -1, "filename": "beancount-import-1.1.1.zip", "has_sig": false, "md5_digest": "b48831908a5a5f9227f23b679af9bb70", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 319500, "upload_time": "2019-03-03T17:23:03", "url": "https://files.pythonhosted.org/packages/ee/be/60f854d577d8142eb35e10ca52972fcd7c5379d283a850001cdc4ed5571f/beancount-import-1.1.1.zip" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "d8f27ab09b26b3f572a95b06574111c4", "sha256": "1613894bb25f2b399ca79e09935675a58feb3bf32324f04b1dad6e301607b243" }, "downloads": -1, "filename": "beancount-import-1.2.0.zip", "has_sig": false, "md5_digest": "d8f27ab09b26b3f572a95b06574111c4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 320311, "upload_time": "2019-03-19T03:24:12", "url": "https://files.pythonhosted.org/packages/41/83/1d6ab1280b658739fd2e432c47ce88e39c060075fde3d550118c1303297f/beancount-import-1.2.0.zip" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "8601464b70609518bb7c7a5203af2399", "sha256": "775826562ecce8b72715c76e925d9e6a6ab16afb8ee4d6313927d8591040fe25" }, "downloads": -1, "filename": "beancount-import-1.2.1.zip", "has_sig": false, "md5_digest": "8601464b70609518bb7c7a5203af2399", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 320313, "upload_time": "2019-03-19T04:05:45", "url": "https://files.pythonhosted.org/packages/09/ea/7f21d33858888b63e07fed1bc8fb901874d3a1e03bc2c08e3cec7c728ed3/beancount-import-1.2.1.zip" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "99b1fc0c6e9663418d3537957876b4b8", "sha256": "b4f8020d68e249933633365c620859079bcacef0b4e7a2b3c3c20eefbdf8cac5" }, "downloads": -1, "filename": "beancount-import-1.3.0.zip", "has_sig": false, "md5_digest": "99b1fc0c6e9663418d3537957876b4b8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 321899, "upload_time": "2019-03-27T04:12:04", "url": "https://files.pythonhosted.org/packages/c9/e6/a4329ffdce13fa2747ab2351db3091ae25c93eca0b6520b51329cab0b8ac/beancount-import-1.3.0.zip" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "2d094862b9039dfb0d47d921f6afaca8", "sha256": "73acafd8805426e9adc633056fdc6a839a97ebba9ee8753d016543c72737833e" }, "downloads": -1, "filename": "beancount-import-1.3.1.zip", "has_sig": false, "md5_digest": "2d094862b9039dfb0d47d921f6afaca8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 325142, "upload_time": "2019-09-20T13:01:51", "url": "https://files.pythonhosted.org/packages/fd/29/8050286208477919f876d62b7a30c4b18abe7ad60c65b93ebf5d2348f804/beancount-import-1.3.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2d094862b9039dfb0d47d921f6afaca8", "sha256": "73acafd8805426e9adc633056fdc6a839a97ebba9ee8753d016543c72737833e" }, "downloads": -1, "filename": "beancount-import-1.3.1.zip", "has_sig": false, "md5_digest": "2d094862b9039dfb0d47d921f6afaca8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 325142, "upload_time": "2019-09-20T13:01:51", "url": "https://files.pythonhosted.org/packages/fd/29/8050286208477919f876d62b7a30c4b18abe7ad60c65b93ebf5d2348f804/beancount-import-1.3.1.zip" } ] }