Personal Finance Project
========================
.. image:: https://travis-ci.org/suminb/finance.svg?branch=develop
:target: https://travis-ci.org/suminb/finance
.. image:: https://coveralls.io/repos/github/suminb/finance/badge.svg?branch=develop
:target: https://coveralls.io/github/suminb/finance?branch=develop
.. image:: https://sonarcloud.io/api/project_badges/measure?project=finance&metric=alert_status
:target: https://sonarcloud.io/dashboard?id=finance
NOTE: 제가 주로 사용하는 에디터인 vim 에서 한글 타이핑이 불편하기 때문에 영어로
문서를 작성하는 것이 일반적이지만, 이 프로젝트의 경우 한국어를 사용하는 청중이
대부분인 관계로 문서를 한국어로 작성합니다.
.. figure:: https://github.com/suminb/finance/raw/develop/moving_average.png
:align: center
:alt: Moving Average
목표
----
이 프로젝트의 목적은 크게 네 가지입니다.
#. 거래 내역 관리, 포트폴리오 시각화 등 자산 현황 파악하기.
#. 종목 리서치에 필요한 기능 제공하기.
#. 미리 설정해놓은 조건을 만족할 경우 알람 보내기.
#. 자동으로 거래하기. (먼 미래의 이야기)
비전
----
`NDC 2016 - 프로그래머가 투자하는 법 <http://www.slideshare.net/suminb/how-programmers-invest>`_
현재 연구중인 주제
------------------
- Currency exchange rate tracking
- Asset rebalancing
- Dual models: Database, ``DataFrame``
잠시 뒤로 미루어둔 주제
-----------------------
- 총 자산 가치 추적
- 자산 가격 받아오기: 여러가지 데이터 소스로부터 금융 자산 가격 정보를
받아옵니다.
- 주식: `야후 파이낸스 <http://finance.yahoo.com>`_\ 에서 받아옵니다. 20분
지연된 정보이긴 하지만, 일 단위 가격을 받아오는 것이기 때문에 지연 시간은
중요하지 않습니다.
- 펀드: 금융투자협회(KOFIA)에 공시된 정보를 받아옵니다.
- `수익률 계산 <https://github.com/suminb/finance/wiki/%EC%88%98%EC%9D%B5%EB%A5%A0-%EA%B3%84%EC%82%B0>`_
- `전자공시데이터(DART) 가져오기 <https://github.com/suminb/finance/issues/1>`_
앞으로 할 일, 하지 않을 일
--------------------------
- 자동으로 데이터 받아오기: 주식, 펀드 가격 등 거래소에 공시되는 가격을
주기적으로 받아오는 무언가를 만들어야 합니다. 사용할 도구로는 AWS Lambda가
적당해보입니다.
- 달력을 다루는 도구 제공: 업무일(business days)은 국가와 지역마다 다를 수
있습니다. 시차도 존재합니다. 따라서 여러 지역 시장에 투자할 경우 날짜, 시간
정보를 효율적으로 다룰 수 있어야 합니다.
- 웹 인터페이스는 당분간 만들지 않을 예정입니다. 그대신 `주피터 노트북
<https://jupyter.org>`_\ 에서 쉽게 사용할 수 있는 함수들을 제공하는데 집중할
예정입니다.
(TODO: 내용 계속 채워넣기)
Daily Net Asset Values
**********************
매일 총 자산 가치(net asset value; NAV)를 합산하여 그래프로 보여줍니다. 이는
펀드의 단위 가격을 산정하는데 필수적인 데이터입니다.
(TODO: Prepare an illustration)
자산이 한가지 화폐 단위로 표기되는 경우에는 큰 어려움이 없습니다. 만약, 한국
주식만 보유하고 있다면 보유 종목의 총 가치와 원화 잔고를 합친 값이 총 자산
가치가 됩니다.
만약 다양한 화폐 단위로 표기되는 자산을 보유하고 있다면 가치 척도의 기준이 되는
화폐\ [1]_\ 를 정하고 그 화폐 기준으로 가치를 표기합니다. 예를 들어서, 한국
주식과 미국 주식을 보유하고 있고, 기준 화폐가 미국 달러(USD)라면 한국 주식
가격을 USD로 변환해서 합산해야 합니다.
.. [1] 코드에서는 ``base asset`` 이라는 이름으로 부르고 있지만, 더 적당한 용어가
있다면 그것으로 대체할 용의가 있습니다.
Usage
-----
(TODO: 사용법 계속 채워넣기)
Search For Listings On Naver Finance
************************************
.. code::
>>> from finance.ext.search import search_listings
>>> results = search_listings("naver", "KODEX")
>>> next(results)
Listing(069500, KODEX 200, https://finance.naver.com/item/main.nhn?code=069500)
>>> next(results)
Listing(091160, KODEX 반도체, https://finance.naver.com/item/main.nhn?code=091160)
>>> next(results)
Listing(091170, KODEX 은행, https://finance.naver.com/item/main.nhn?code=091170)
>>> # Or, we could make it as a list
>>> listings = list(results)
Fetch Company Profiles From Naver Finance
*****************************************
.. code::
>>> from finance.ext.profile import fetch_profile
>>> profile = fetch_profile("naver", "063170")
>>> profile.name
서울옥션
>>> profile.current_price
4300
>>> profile.eps
-494
>>> profile.bps
4290
Fetch Financial Statements From DART (전자공시)
***********************************************
.. code::
from finance.ext.dart import FinancialStatementRequest
fs = FinancialStatementRequest()
statements = fs.fetch(
"00788773", 2020, "11012", "OFS",
categorization_level1_key="fs_name",
categorization_level2_key="account_name")
statements["포괄손익계산서"]["당기순이익"].amount
balance_sheet = statements["재무상태표"]
debt_ratio = balance_sheet["부채총계"].amount / balance_sheet["자본총계"].amount
.. code::
from finance.ext.dart import get_listed_corporations, search_corporations
get_listed_corporations()
search_corporations("NAVER")
Fetch Financials With RapidAPI
******************************
.. code::
>>> from from finance.ext.rapidapi.yahoo import *
>>> financials = get_financials("NET")
>>> financials.market_cap
25674999808
>>> financials.most_recent_yearly_earnings
{'date': 2019, 'revenue': 287022000, 'earnings': -105828000}
>>> financials.most_recent_quarterly_earnings
{'date': '3Q2020', 'revenue': 114162000, 'earnings': -26468000}
>>> historical_data = get_historical_data("MSFT")
>>> historical_data.first_trade_date
datetime.datetime(1986, 3, 13, 14, 30)
>>> profile = get_profile("TSLA")
>>> profile.sector
'Consumer Cyclical'
Some Technical Details
----------------------
Create Tables
*************
.. code::
finance create_all
Insert Test Data
****************
.. code::
finance insert_test_data
Import Stock Values
*******************
.. code::
finance fetch_stock_values 009830.KS | finance import_stock_values 009830.KS
The ``fetch_stock_values`` command strictly fetches data from Google Finance
as CSV, and the ``import_stock_values`` imports the structured data into the
database.
PostgreSQL in Docker
********************
.. code::
docker run -d \
-p 5432:5432 -e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=qwerasdf \
-e POSTGRES_DB=finance \
-v $HOME/postgres:/var/lib/postgresql/data \
-t postgres:10
psycopg2 on Mac
***************
If you fail to build the ``psycopg2`` package on Mac OS X with an error
message saying the following,
.. code::
ld: library not found for -lssl
You may want to build ``pscycopg2`` as follows:
.. code::
env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
That's assuming you have ``openssl`` installed in your system. If you are
using ``brew`` you may install ``openssl`` as following:
.. code::
brew install openssl
SonarCloud with Travis CI
*************************
Set ``SONAR_TOKEN`` environment variable on Travis CI repository settings.
Refer `this document <https://docs.travis-ci.com/user/sonarcloud/>`_ for more
details. Then you will need to set up ``sonar-project.properties`` file as
described `here
<https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner>`_.
Raw data
{
"_id": null,
"home_page": "https://github.com/suminb/finance",
"name": "sb-finance",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Sumin Byeon",
"author_email": "suminb@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/90/60/d06ff94da9cd51d88237599954238f0c9d5ddb4af4c1b0d5feead7c0bd31/sb-finance-0.7.2.tar.gz",
"platform": null,
"description": "Personal Finance Project\n========================\n\n.. image:: https://travis-ci.org/suminb/finance.svg?branch=develop\n :target: https://travis-ci.org/suminb/finance\n\n.. image:: https://coveralls.io/repos/github/suminb/finance/badge.svg?branch=develop\n :target: https://coveralls.io/github/suminb/finance?branch=develop\n\n.. image:: https://sonarcloud.io/api/project_badges/measure?project=finance&metric=alert_status\n :target: https://sonarcloud.io/dashboard?id=finance\n\nNOTE: \uc81c\uac00 \uc8fc\ub85c \uc0ac\uc6a9\ud558\ub294 \uc5d0\ub514\ud130\uc778 vim \uc5d0\uc11c \ud55c\uae00 \ud0c0\uc774\ud551\uc774 \ubd88\ud3b8\ud558\uae30 \ub54c\ubb38\uc5d0 \uc601\uc5b4\ub85c\n\ubb38\uc11c\ub97c \uc791\uc131\ud558\ub294 \uac83\uc774 \uc77c\ubc18\uc801\uc774\uc9c0\ub9cc, \uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \uacbd\uc6b0 \ud55c\uad6d\uc5b4\ub97c \uc0ac\uc6a9\ud558\ub294 \uccad\uc911\uc774\n\ub300\ubd80\ubd84\uc778 \uad00\uacc4\ub85c \ubb38\uc11c\ub97c \ud55c\uad6d\uc5b4\ub85c \uc791\uc131\ud569\ub2c8\ub2e4.\n\n.. figure:: https://github.com/suminb/finance/raw/develop/moving_average.png\n :align: center\n :alt: Moving Average\n\n\ubaa9\ud45c\n----\n\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \ubaa9\uc801\uc740 \ud06c\uac8c \ub124 \uac00\uc9c0\uc785\ub2c8\ub2e4.\n\n#. \uac70\ub798 \ub0b4\uc5ed \uad00\ub9ac, \ud3ec\ud2b8\ud3f4\ub9ac\uc624 \uc2dc\uac01\ud654 \ub4f1 \uc790\uc0b0 \ud604\ud669 \ud30c\uc545\ud558\uae30.\n#. \uc885\ubaa9 \ub9ac\uc11c\uce58\uc5d0 \ud544\uc694\ud55c \uae30\ub2a5 \uc81c\uacf5\ud558\uae30.\n#. \ubbf8\ub9ac \uc124\uc815\ud574\ub193\uc740 \uc870\uac74\uc744 \ub9cc\uc871\ud560 \uacbd\uc6b0 \uc54c\ub78c \ubcf4\ub0b4\uae30.\n#. \uc790\ub3d9\uc73c\ub85c \uac70\ub798\ud558\uae30. (\uba3c \ubbf8\ub798\uc758 \uc774\uc57c\uae30)\n\n\n\ube44\uc804\n----\n`NDC 2016 - \ud504\ub85c\uadf8\ub798\uba38\uac00 \ud22c\uc790\ud558\ub294 \ubc95 <http://www.slideshare.net/suminb/how-programmers-invest>`_\n\n\ud604\uc7ac \uc5f0\uad6c\uc911\uc778 \uc8fc\uc81c\n------------------\n- Currency exchange rate tracking\n- Asset rebalancing\n- Dual models: Database, ``DataFrame``\n\n\uc7a0\uc2dc \ub4a4\ub85c \ubbf8\ub8e8\uc5b4\ub454 \uc8fc\uc81c\n-----------------------\n- \ucd1d \uc790\uc0b0 \uac00\uce58 \ucd94\uc801\n- \uc790\uc0b0 \uac00\uaca9 \ubc1b\uc544\uc624\uae30: \uc5ec\ub7ec\uac00\uc9c0 \ub370\uc774\ud130 \uc18c\uc2a4\ub85c\ubd80\ud130 \uae08\uc735 \uc790\uc0b0 \uac00\uaca9 \uc815\ubcf4\ub97c\n \ubc1b\uc544\uc635\ub2c8\ub2e4.\n\n - \uc8fc\uc2dd: `\uc57c\ud6c4 \ud30c\uc774\ub0b8\uc2a4 <http://finance.yahoo.com>`_\\ \uc5d0\uc11c \ubc1b\uc544\uc635\ub2c8\ub2e4. 20\ubd84\n \uc9c0\uc5f0\ub41c \uc815\ubcf4\uc774\uae34 \ud558\uc9c0\ub9cc, \uc77c \ub2e8\uc704 \uac00\uaca9\uc744 \ubc1b\uc544\uc624\ub294 \uac83\uc774\uae30 \ub54c\ubb38\uc5d0 \uc9c0\uc5f0 \uc2dc\uac04\uc740\n \uc911\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n - \ud380\ub4dc: \uae08\uc735\ud22c\uc790\ud611\ud68c(KOFIA)\uc5d0 \uacf5\uc2dc\ub41c \uc815\ubcf4\ub97c \ubc1b\uc544\uc635\ub2c8\ub2e4.\n\n- `\uc218\uc775\ub960 \uacc4\uc0b0 <https://github.com/suminb/finance/wiki/%EC%88%98%EC%9D%B5%EB%A5%A0-%EA%B3%84%EC%82%B0>`_\n- `\uc804\uc790\uacf5\uc2dc\ub370\uc774\ud130(DART) \uac00\uc838\uc624\uae30 <https://github.com/suminb/finance/issues/1>`_\n\n\uc55e\uc73c\ub85c \ud560 \uc77c, \ud558\uc9c0 \uc54a\uc744 \uc77c\n--------------------------\n- \uc790\ub3d9\uc73c\ub85c \ub370\uc774\ud130 \ubc1b\uc544\uc624\uae30: \uc8fc\uc2dd, \ud380\ub4dc \uac00\uaca9 \ub4f1 \uac70\ub798\uc18c\uc5d0 \uacf5\uc2dc\ub418\ub294 \uac00\uaca9\uc744\n \uc8fc\uae30\uc801\uc73c\ub85c \ubc1b\uc544\uc624\ub294 \ubb34\uc5b8\uac00\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc0ac\uc6a9\ud560 \ub3c4\uad6c\ub85c\ub294 AWS Lambda\uac00\n \uc801\ub2f9\ud574\ubcf4\uc785\ub2c8\ub2e4.\n- \ub2ec\ub825\uc744 \ub2e4\ub8e8\ub294 \ub3c4\uad6c \uc81c\uacf5: \uc5c5\ubb34\uc77c(business days)\uc740 \uad6d\uac00\uc640 \uc9c0\uc5ed\ub9c8\ub2e4 \ub2e4\ub97c \uc218\n \uc788\uc2b5\ub2c8\ub2e4. \uc2dc\ucc28\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc5ec\ub7ec \uc9c0\uc5ed \uc2dc\uc7a5\uc5d0 \ud22c\uc790\ud560 \uacbd\uc6b0 \ub0a0\uc9dc, \uc2dc\uac04\n \uc815\ubcf4\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \ub2e4\ub8f0 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n- \uc6f9 \uc778\ud130\ud398\uc774\uc2a4\ub294 \ub2f9\ubd84\uac04 \ub9cc\ub4e4\uc9c0 \uc54a\uc744 \uc608\uc815\uc785\ub2c8\ub2e4. \uadf8\ub300\uc2e0 `\uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\n <https://jupyter.org>`_\\ \uc5d0\uc11c \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud568\uc218\ub4e4\uc744 \uc81c\uacf5\ud558\ub294\ub370 \uc9d1\uc911\ud560\n \uc608\uc815\uc785\ub2c8\ub2e4.\n\n(TODO: \ub0b4\uc6a9 \uacc4\uc18d \ucc44\uc6cc\ub123\uae30)\n\nDaily Net Asset Values\n**********************\n\n\ub9e4\uc77c \ucd1d \uc790\uc0b0 \uac00\uce58(net asset value; NAV)\ub97c \ud569\uc0b0\ud558\uc5ec \uadf8\ub798\ud504\ub85c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. \uc774\ub294\n\ud380\ub4dc\uc758 \ub2e8\uc704 \uac00\uaca9\uc744 \uc0b0\uc815\ud558\ub294\ub370 \ud544\uc218\uc801\uc778 \ub370\uc774\ud130\uc785\ub2c8\ub2e4.\n\n(TODO: Prepare an illustration)\n\n\uc790\uc0b0\uc774 \ud55c\uac00\uc9c0 \ud654\ud3d0 \ub2e8\uc704\ub85c \ud45c\uae30\ub418\ub294 \uacbd\uc6b0\uc5d0\ub294 \ud070 \uc5b4\ub824\uc6c0\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d, \ud55c\uad6d\n\uc8fc\uc2dd\ub9cc \ubcf4\uc720\ud558\uace0 \uc788\ub2e4\uba74 \ubcf4\uc720 \uc885\ubaa9\uc758 \ucd1d \uac00\uce58\uc640 \uc6d0\ud654 \uc794\uace0\ub97c \ud569\uce5c \uac12\uc774 \ucd1d \uc790\uc0b0\n\uac00\uce58\uac00 \ub429\ub2c8\ub2e4.\n\n\ub9cc\uc57d \ub2e4\uc591\ud55c \ud654\ud3d0 \ub2e8\uc704\ub85c \ud45c\uae30\ub418\ub294 \uc790\uc0b0\uc744 \ubcf4\uc720\ud558\uace0 \uc788\ub2e4\uba74 \uac00\uce58 \ucc99\ub3c4\uc758 \uae30\uc900\uc774 \ub418\ub294\n\ud654\ud3d0\\ [1]_\\ \ub97c \uc815\ud558\uace0 \uadf8 \ud654\ud3d0 \uae30\uc900\uc73c\ub85c \uac00\uce58\ub97c \ud45c\uae30\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c, \ud55c\uad6d\n\uc8fc\uc2dd\uacfc \ubbf8\uad6d \uc8fc\uc2dd\uc744 \ubcf4\uc720\ud558\uace0 \uc788\uace0, \uae30\uc900 \ud654\ud3d0\uac00 \ubbf8\uad6d \ub2ec\ub7ec(USD)\ub77c\uba74 \ud55c\uad6d \uc8fc\uc2dd\n\uac00\uaca9\uc744 USD\ub85c \ubcc0\ud658\ud574\uc11c \ud569\uc0b0\ud574\uc57c \ud569\ub2c8\ub2e4.\n\n.. [1] \ucf54\ub4dc\uc5d0\uc11c\ub294 ``base asset`` \uc774\ub77c\ub294 \uc774\ub984\uc73c\ub85c \ubd80\ub974\uace0 \uc788\uc9c0\ub9cc, \ub354 \uc801\ub2f9\ud55c \uc6a9\uc5b4\uac00\n \uc788\ub2e4\uba74 \uadf8\uac83\uc73c\ub85c \ub300\uccb4\ud560 \uc6a9\uc758\uac00 \uc788\uc2b5\ub2c8\ub2e4.\n\nUsage\n-----\n\n(TODO: \uc0ac\uc6a9\ubc95 \uacc4\uc18d \ucc44\uc6cc\ub123\uae30)\n\nSearch For Listings On Naver Finance\n************************************\n\n.. code::\n\n >>> from finance.ext.search import search_listings\n >>> results = search_listings(\"naver\", \"KODEX\")\n >>> next(results)\n Listing(069500, KODEX 200, https://finance.naver.com/item/main.nhn?code=069500)\n >>> next(results)\n Listing(091160, KODEX \ubc18\ub3c4\uccb4, https://finance.naver.com/item/main.nhn?code=091160)\n >>> next(results)\n Listing(091170, KODEX \uc740\ud589, https://finance.naver.com/item/main.nhn?code=091170)\n >>> # Or, we could make it as a list\n >>> listings = list(results)\n\nFetch Company Profiles From Naver Finance\n*****************************************\n\n.. code::\n\n >>> from finance.ext.profile import fetch_profile\n >>> profile = fetch_profile(\"naver\", \"063170\")\n >>> profile.name\n \uc11c\uc6b8\uc625\uc158\n >>> profile.current_price\n 4300\n >>> profile.eps\n -494\n >>> profile.bps\n 4290\n\nFetch Financial Statements From DART (\uc804\uc790\uacf5\uc2dc)\n***********************************************\n\n.. code::\n\n from finance.ext.dart import FinancialStatementRequest\n\n fs = FinancialStatementRequest()\n statements = fs.fetch(\n \"00788773\", 2020, \"11012\", \"OFS\",\n categorization_level1_key=\"fs_name\",\n categorization_level2_key=\"account_name\")\n\n statements[\"\ud3ec\uad04\uc190\uc775\uacc4\uc0b0\uc11c\"][\"\ub2f9\uae30\uc21c\uc774\uc775\"].amount\n\n balance_sheet = statements[\"\uc7ac\ubb34\uc0c1\ud0dc\ud45c\"]\n debt_ratio = balance_sheet[\"\ubd80\ucc44\ucd1d\uacc4\"].amount / balance_sheet[\"\uc790\ubcf8\ucd1d\uacc4\"].amount\n\n.. code::\n\n from finance.ext.dart import get_listed_corporations, search_corporations\n\n get_listed_corporations()\n search_corporations(\"NAVER\")\n\nFetch Financials With RapidAPI\n******************************\n\n.. code::\n\n >>> from from finance.ext.rapidapi.yahoo import *\n\n >>> financials = get_financials(\"NET\")\n >>> financials.market_cap\n 25674999808\n\n >>> financials.most_recent_yearly_earnings\n {'date': 2019, 'revenue': 287022000, 'earnings': -105828000}\n\n >>> financials.most_recent_quarterly_earnings\n {'date': '3Q2020', 'revenue': 114162000, 'earnings': -26468000}\n\n >>> historical_data = get_historical_data(\"MSFT\")\n >>> historical_data.first_trade_date\n datetime.datetime(1986, 3, 13, 14, 30)\n\n >>> profile = get_profile(\"TSLA\")\n >>> profile.sector\n 'Consumer Cyclical'\n\nSome Technical Details\n----------------------\n\nCreate Tables\n*************\n\n.. code::\n\n finance create_all\n\nInsert Test Data\n****************\n\n.. code::\n\n finance insert_test_data\n\nImport Stock Values\n*******************\n\n.. code::\n\n finance fetch_stock_values 009830.KS | finance import_stock_values 009830.KS\n\nThe ``fetch_stock_values`` command strictly fetches data from Google Finance\nas CSV, and the ``import_stock_values`` imports the structured data into the\ndatabase.\n\nPostgreSQL in Docker\n********************\n\n.. code::\n\n docker run -d \\\n -p 5432:5432 -e POSTGRES_USER=postgres \\\n -e POSTGRES_PASSWORD=qwerasdf \\\n -e POSTGRES_DB=finance \\\n -v $HOME/postgres:/var/lib/postgresql/data \\\n -t postgres:10\n\npsycopg2 on Mac\n***************\n\nIf you fail to build the ``psycopg2`` package on Mac OS X with an error\nmessage saying the following,\n\n.. code::\n\n ld: library not found for -lssl\n\nYou may want to build ``pscycopg2`` as follows:\n\n.. code::\n\n env LDFLAGS=\"-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib\" pip install psycopg2\n\nThat's assuming you have ``openssl`` installed in your system. If you are\nusing ``brew`` you may install ``openssl`` as following:\n\n.. code::\n\n brew install openssl\n\nSonarCloud with Travis CI\n*************************\n\nSet ``SONAR_TOKEN`` environment variable on Travis CI repository settings.\nRefer `this document <https://docs.travis-ci.com/user/sonarcloud/>`_ for more\ndetails. Then you will need to set up ``sonar-project.properties`` file as\ndescribed `here\n<https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner>`_.\n",
"bugtrack_url": null,
"license": "BSD",
"summary": "Personal Finance Project",
"version": "0.7.2",
"project_urls": {
"Homepage": "https://github.com/suminb/finance"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9060d06ff94da9cd51d88237599954238f0c9d5ddb4af4c1b0d5feead7c0bd31",
"md5": "c87c0ddc82e775a228f09ebc224f0b5d",
"sha256": "cfe620ba81ab6184283d62a0cd7561fb012dba7465c3a82f7ae5077f5167987c"
},
"downloads": -1,
"filename": "sb-finance-0.7.2.tar.gz",
"has_sig": false,
"md5_digest": "c87c0ddc82e775a228f09ebc224f0b5d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 37958,
"upload_time": "2023-10-19T18:10:33",
"upload_time_iso_8601": "2023-10-19T18:10:33.219346Z",
"url": "https://files.pythonhosted.org/packages/90/60/d06ff94da9cd51d88237599954238f0c9d5ddb4af4c1b0d5feead7c0bd31/sb-finance-0.7.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-10-19 18:10:33",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "suminb",
"github_project": "finance",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "Logbook",
"specs": [
[
">=",
"0.12.5"
]
]
},
{
"name": "SQLAlchemy",
"specs": [
[
">=",
"1.0.12"
]
]
},
{
"name": "click",
"specs": [
[
"<",
"9.0"
],
[
">=",
"8.0"
]
]
},
{
"name": "psycopg2-binary",
"specs": [
[
">=",
"2.7.5"
]
]
},
{
"name": "temporaluuid64",
"specs": [
[
">=",
"0.1.1"
]
]
},
{
"name": "requests",
"specs": [
[
">=",
"2.9.1"
]
]
},
{
"name": "xmltodict",
"specs": [
[
">=",
"0.10.1"
]
]
},
{
"name": "beautifulsoup4",
"specs": [
[
">=",
"4.4.1"
]
]
},
{
"name": "alembic",
"specs": [
[
">=",
"0.9.7"
]
]
},
{
"name": "boto3",
"specs": [
[
">=",
"1.5.26"
]
]
},
{
"name": "pandas",
"specs": [
[
">=",
"1.0"
],
[
"<",
"2.0"
]
]
},
{
"name": "pandas-datareader",
"specs": [
[
"<",
"1.0"
],
[
">=",
"0.7.4"
]
]
},
{
"name": "types-click",
"specs": [
[
">=",
"7.1"
],
[
"<",
"8.0"
]
]
},
{
"name": "yfinance",
"specs": [
[
">=",
"0.2"
],
[
"<",
"0.3"
]
]
}
],
"lcname": "sb-finance"
}