{ "info": { "author": "Ken Kundert", "author_email": "networth@nurdletech.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Utilities" ], "description": "Networth: Summarize Your Net Worth\n==================================\n\n| Version: 0.3.0\n| Released: 2019-04-20\n|\n\n*Networth* works with `Avendesora `_ to \ngenerate a summary of your networth. *Networth* reads *estimated_value* fields \nfrom *Avendesora* accounts and summarizes the result. It is often used with, \nand shares fields with, `PostMortem `_.\n\nPlease report all bugs and suggestions to networth@nurdletech.com\n\nGetting Started\n---------------\n\nYou download and install *Networth* with::\n\n pip3 install --user networth\n\nOnce installed, you will need at least two configuration files. The \nconfiguration files are Python code. The first file contains settings that are \nshared between all profiles. It is ~/.config/networth/config. The remaining \nfiles are specific to profiles. You would generally have one profile for \nyourself, but you might also have profiles for organizations or people that you \nare monitoring.\n\nIn general, any setting may be in either the config file or the profile file. \nHowever, the following two settings should in the config file:\n\n**default_profile**\n\nA string that contains the name of the profile to use if the one is not \nexplicitly specified on the command line. The name specified in this setting \nmust also be one of the names specified in *profile_names*.\n\n**profile_names**\n\nA list the contains the names of the known profiles. For every name given there \nshould be a profile file in the settings directory. Thus, if *me* is one of the \nprofile names, then there should be a file ~/.config/networth/me.prof that \ncontains the settings associated to the *me* profile.\n\nIn addition, the following settings are available:\n\n**avendesora_fieldname**\n\nThe name of the *Avendesora* account field that contains the networth \ninformation.\n\n**value_updated_subfieldname**\n\nThe name of the subfield of *estimated_value* that contains the date the \nvalue was last updated. Typically *updated*.\n\n**max_account_value_age**\n\nNumber of days. Values that are older than this are called out as being \nstale.\n\n**date_formats**\n\nA string that contains the allowed date formats separated by white space. \nAny spaces is a specific format is replaced by an underscore so that it is \nnot confused as more than one format. For example a format of 'MMMM YYYY' \nwould be represented as 'MMMM_YYYY'. The formats allowed are those supported \nby Arrow.\n\nMay also be a list of strings, where each represents a valid date format. \n\nBy default the following formats are accepted: 'MMMM YYYY', 'MMM YYYY', \n'YYYY-M-D', and 'YYMMDD'. So the following dates would be accepted: 'January \n2019', 'Jan 2019', '2019-1-1' and '190101'.\n\n**asset_color**\n\nThe color to used for positive values. May be black, white, blue, cyan, \ngreen, red, magenta, or yellow. The default is green.\n\n**debt_color**\n\nThe color to used for negative values. May be black, white, blue, cyan, \ngreen, red, magenta, or yellow. The default is red.\n\n**screen_width**\n\nAn integer that contains the width of the screen.\n\n**aliases**\n\nA dictionary that is used to map an account name to something that is easier \nto read.\n\n**coins**\n\nA list of crytpocurrency tokens that should be available for use.\n\n**coin_prices_filename**\n\nName of the file used as the cryptocurrency price cache.\n\n**securities**\n\nA list of security symbols that should be available for use.\n\n**security_prices_filename**\n\nName of the file used as the security price cache.\n\n**max_price_age**\n\nMaximum age in seconds of the price caches. If the prices are older than \nthis, the cache is flushed and the prices are updated.\n\n\nExample Configuration Files\n---------------------------\n\nHere is an example *config* file::\n\n default_profile='me'\n profile_names = 'me parents'.split()\n\n # account value settings\n avendesora_fieldname = 'estimated_value'\n value_updated_subfieldname = 'updated'\n max_account_value_age = 120 # days\n date_formats = 'MMMM YYYY'\n\n # bar settings\n screen_width = 110\n\nHere is a example profile file::\n\n # account aliases\n aliases = dict(\n quickenloans = 'mortgage',\n wellsfargo = 'wells fargo',\n )\n\n # available symbols\n coins = 'USD BTC ETH BCH ZEC EOS'.split()\n securities = 'GOOG AMZN'.split()\n\n\nEstimated Values\n----------------\n\nNext, you need to add *estimated_value* fields to your *Avendesora* accounts, \nthe value of which is a dictionary. It may contain a *updated* subfield that \ngives the date the value was last updated. In addition, it may contain \nsubfields for various asset classes or coins or securities. The values may \neither be real numbers or strings that contain quantities (values plus units). \nHere are some examples::\n\n class ChaseBank(Account):\n ...\n estimated_value = dict(updated='December 2018', cash=2181.16+5121.79)\n\n class QuickenLoans(Account):\n ...\n estimated_value = dict(updated='October 2018', real_estate='-$294,058')\n\n class Vanguard(Account):\n ...\n estimated_value = dict(updated='November 2018', retirement='$74,327')\n\n class UnitedAirlines(Account):\n ...\n estimated_value = dict(updated='July 2018', miles='7,384_miles')\n\n class Kraken(Account):\n ...\n estimated_value = dict(updated='August 2018', ETH=2, BTC=4, cash=24.52)\n\n class TD_Ameritrade(Account):\n ...\n estimated_value = dict(updated='January 2019', GOOG=10, AMZN=5, cash=327.53)\n\nThe value of securities are given is number of shares. The value given for \ncryptocurrencies is number of tokens. All other values are assumed to be in \ndollars if the units are not given. If the units are given and they are not \ndollars (such as miles for frequent flier programs), then those values are \nsummarized but not included in your total networth.\n\nSpecifying the *updated* date is optional. If specified, then *networth* will \nindicate the values as stale if they exceed *max_account_value_age*.\n\nIt is also specify information about a loan, and *networth* will compute its \ncurrent balance. This is done by giving the principal on a particular date, the \ndate for the given principal, the monthly payments, the interest rate, and \noptionally, the share. The rate and the share can be given in percent, meaning \nthat an rate of 4% can either be specified as 4% or as 0.04. Similarly a share \nhalf share can be indicated as 50% or 0.5. For example::\n\n class QuickenLoans(Account):\n ...\n estimated_value = dict(\n real_estate = '''\n principal=-$294,058\n date=09/04/2013\n payment=$1,500.00\n rate=4.375%\n share=50%\n '''\n )\n\nthe key=value pairs can be separated by any white space, but there must be no\nwhite space surrounding the = sign. For mortgages that you owe, the principal \nshould be negative. You can also use this feature to describe an automatic \nsavings plan into an interest bearing account. In this case the principal would \nbe your starting balance and the payment would be your monthly investment \namount. In this case the starting balance would be positive.\n\n\nUsage\n-----\n\nWhen running the command, you may specify a profile. If you do not, you get the \ndefault profile. For example::\n\n > networth me\n By Account:\n betterment: $22k equities=$9k, cash=$3k, retirement=$9k\n chase: $7k cash\n southwest: $0 miles=78kmiles\n coindesk: $15.3k cryptocurrency\n\n By Type:\n cryptocurrency: $15.3k (35.3%) \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n cash: $10k (23.1%) \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n equities: $9k (20.8%) \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n retirement: $9k (20.8%) \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n\n TOTAL: $43.3k (assets = $43.3k, debt = $0)\n\nIn this run, the values associated with the various asset classes (ex. equities, \ncash, retirement, etc.) are taken as is. As such, you must be diligent about \nkeeping these values up to date, which is a manual operation. You might consider \nupdating your *estimated values* every 3-6 months. However the current prices \nfor your configured securities and cryptocurrencies are downloaded and \nmultiplied by the given number of shares or tokens to get the up-to-date values \nof your equities and cryptocurrency holdings. Thus you only need update them \nafter a transaction. Finally, mortgage balances are also kept up to date. You \nonly need update mortgages if you decide to change the payment amount in order \nto pay off the loan faster.\n\n\nReleases\n--------\n**Latest Development Version**:\n | Version: 0.3.0\n | Released: 2019-04-20\n\n**0.3 (2019-04-20)**:\n - Allow arbitrary date format in mortgages\n - Improve error reporting\n - Change the sign of the principal in mortgages\n\n**0.1 (2019-03-23)**:\n - Initial release\n - Add mortgage balance calculations\n\n**0.0 (2019-01-31)**:\n - Initial version", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/kenkundert/networth/tarball/master", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kenkundert/networth", "keywords": "networth", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "networth", "package_url": "https://pypi.org/project/networth/", "platform": "", "project_url": "https://pypi.org/project/networth/", "project_urls": { "Download": "https://github.com/kenkundert/networth/tarball/master", "Homepage": "https://github.com/kenkundert/networth" }, "release_url": "https://pypi.org/project/networth/0.3.0/", "requires_dist": null, "requires_python": ">=3.6", "summary": "Summarize net worth", "version": "0.3.0" }, "last_serial": 5168991, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a158b79d3290bb5831277c5e1f71fc53", "sha256": "0441af49ed789b16856c9822bdd1f8e5b11655abd82137738d0f393ed8298a61" }, "downloads": -1, "filename": "networth-0.1.0.tar.gz", "has_sig": false, "md5_digest": "a158b79d3290bb5831277c5e1f71fc53", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 10571, "upload_time": "2019-03-23T18:43:16", "url": "https://files.pythonhosted.org/packages/80/8c/6e178d4275ff502a8a5ef2dd755762fb883fb58f996ef3dfab210f549c4e/networth-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "deebd387ff593e8a92a14107a5fb4056", "sha256": "6cb24bd3919b839fc8edcb88f4ded2bc30d3a6b842ed685e2d6fac1c836e9515" }, "downloads": -1, "filename": "networth-0.2.0.tar.gz", "has_sig": false, "md5_digest": "deebd387ff593e8a92a14107a5fb4056", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11406, "upload_time": "2019-03-24T00:00:45", "url": "https://files.pythonhosted.org/packages/e5/78/b75fbdb416c384c412584f1fe0e6c42ad2401be3ae2c887777129c09e6f0/networth-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "d7e2c8ec31a7e20824d884aab41a5d09", "sha256": "03837e5e05574d85d5dbb46965ff5f644ce7d301c1c8e1e373fc5cc63897267c" }, "downloads": -1, "filename": "networth-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d7e2c8ec31a7e20824d884aab41a5d09", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11536, "upload_time": "2019-04-21T04:00:48", "url": "https://files.pythonhosted.org/packages/85/2d/7e0c2138a2b206e3de984c2ab12c4eee8b8e06fe9030b9bfd94abe732fc3/networth-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d7e2c8ec31a7e20824d884aab41a5d09", "sha256": "03837e5e05574d85d5dbb46965ff5f644ce7d301c1c8e1e373fc5cc63897267c" }, "downloads": -1, "filename": "networth-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d7e2c8ec31a7e20824d884aab41a5d09", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11536, "upload_time": "2019-04-21T04:00:48", "url": "https://files.pythonhosted.org/packages/85/2d/7e0c2138a2b206e3de984c2ab12c4eee8b8e06fe9030b9bfd94abe732fc3/networth-0.3.0.tar.gz" } ] }