Query treasury.io through Python, returning Pandas DataFrames
Project description
pytreasuryio
======
Access .. _treasury.io: http://treasury.io from Python.
This is a package consisting of a single, simple function for submitting ``SQL`` queries to .. _treasury.io: http://treasury.io from ``python``. While you could simply copy-and-paste the function from script-to-script, this makes it quicker and easier to get up and running!
It also has some helpers to make a Twitter bot from the treasury.io data.
Installation
--------
Install with pip.::
pip install treasuryio
Example
---------
Basic query
~~~~~~~~~
Send an SQL query and receive a pandas data frame.::
# Operating cash balances for May 22, 2013
import treasuryio
sql = 'SELECT * FROM "t1" WHERE "date" = \'2013-05-22\';'
treasuryio.query(sql)
Twitter bot
~~~~~~~~~
Write a ``~/.twitter.yml`` file.::
consumer_key: oeshaoduhsaousaoeuhts
consumer_secret: b233tsao-enuhsaoehsunoesudtuhoelaouhs2uo
access_token: 2349081293-astoehusatoehusaoeustahoeuhh2AOEUTAouhc
access_token_secret: 9023uonshesuaHONETuoeuoeouo0eOHNEuhOuoeu
Define a function that produces the text of the tweet, and decorate it with the
``@treasurio.tweet`` decorator.::
import treasuryio
import humanize
import math
MIL = 1e6
# Helpers to humanize numbers / dates
def human_number(num):
return humanize.intword(int(math.ceil(num))).lower()
def human_date(date):
return humanize.naturalday(date).title()
@treasuryio.tweet
def total_debt_tweet():
df = treasuryio.query('SELECT date, close_today FROM t3c WHERE (item LIKE \'%subject to limit%\' AND year = 2013 AND month >=1) ORDER BY date DESC')
# determine length of DataFrame
end = len(df)-1
# extract current amount and amount at the beginning of the year
current_amt = df['close_today'][0]*MIL
previous_amt = df['close_today'][end]*MIL
# calculate change
delta = abs(current_amt - previous_amt)
# generate word to represnet the direction of change
if current_amt > previous_amt:
change = "increased"
elif current_amt < previous_amt:
change = "decreased"
# humanize values
# Notice the included ``human_date`` and ``human_number`` functions which simplify these values for you
current_date = human_date(df['date'][0])
amt = human_number(current_amt)
delta = human_number(delta)
previous_date = human_date(df['date'][end])
# generate tweet
vals = (current_date, amt, change, previous_date, 'http://treasury.io')
return "As of %s, the US Gov is $%s in debt. This amount has %s since %s - %s" % vals
Then just run it.::
total_debt_tweet()
You can get fancy by switching the functions that you use.::
import treasuryio
import random
@treasurio.tweet
def tweet_a():
# ...
@treasurio.tweet
def tweet_b():
# ...
@treasurio.tweet
def tweet_c():
# ...
random.choice([tweet_a, tweet_b, tweet_c])()
======
Access .. _treasury.io: http://treasury.io from Python.
This is a package consisting of a single, simple function for submitting ``SQL`` queries to .. _treasury.io: http://treasury.io from ``python``. While you could simply copy-and-paste the function from script-to-script, this makes it quicker and easier to get up and running!
It also has some helpers to make a Twitter bot from the treasury.io data.
Installation
--------
Install with pip.::
pip install treasuryio
Example
---------
Basic query
~~~~~~~~~
Send an SQL query and receive a pandas data frame.::
# Operating cash balances for May 22, 2013
import treasuryio
sql = 'SELECT * FROM "t1" WHERE "date" = \'2013-05-22\';'
treasuryio.query(sql)
Twitter bot
~~~~~~~~~
Write a ``~/.twitter.yml`` file.::
consumer_key: oeshaoduhsaousaoeuhts
consumer_secret: b233tsao-enuhsaoehsunoesudtuhoelaouhs2uo
access_token: 2349081293-astoehusatoehusaoeustahoeuhh2AOEUTAouhc
access_token_secret: 9023uonshesuaHONETuoeuoeouo0eOHNEuhOuoeu
Define a function that produces the text of the tweet, and decorate it with the
``@treasurio.tweet`` decorator.::
import treasuryio
import humanize
import math
MIL = 1e6
# Helpers to humanize numbers / dates
def human_number(num):
return humanize.intword(int(math.ceil(num))).lower()
def human_date(date):
return humanize.naturalday(date).title()
@treasuryio.tweet
def total_debt_tweet():
df = treasuryio.query('SELECT date, close_today FROM t3c WHERE (item LIKE \'%subject to limit%\' AND year = 2013 AND month >=1) ORDER BY date DESC')
# determine length of DataFrame
end = len(df)-1
# extract current amount and amount at the beginning of the year
current_amt = df['close_today'][0]*MIL
previous_amt = df['close_today'][end]*MIL
# calculate change
delta = abs(current_amt - previous_amt)
# generate word to represnet the direction of change
if current_amt > previous_amt:
change = "increased"
elif current_amt < previous_amt:
change = "decreased"
# humanize values
# Notice the included ``human_date`` and ``human_number`` functions which simplify these values for you
current_date = human_date(df['date'][0])
amt = human_number(current_amt)
delta = human_number(delta)
previous_date = human_date(df['date'][end])
# generate tweet
vals = (current_date, amt, change, previous_date, 'http://treasury.io')
return "As of %s, the US Gov is $%s in debt. This amount has %s since %s - %s" % vals
Then just run it.::
total_debt_tweet()
You can get fancy by switching the functions that you use.::
import treasuryio
import random
@treasurio.tweet
def tweet_a():
# ...
@treasurio.tweet
def tweet_b():
# ...
@treasurio.tweet
def tweet_c():
# ...
random.choice([tweet_a, tweet_b, tweet_c])()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
treasuryio-0.0.3.tar.gz
(4.3 kB
view details)
File details
Details for the file treasuryio-0.0.3.tar.gz
.
File metadata
- Download URL: treasuryio-0.0.3.tar.gz
- Upload date:
- Size: 4.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0056abe8ddda8951866075475619401c4f2ed0163438cb5197ee81c43cb68f57 |
|
MD5 | e18d6bdd39b9958e95b62ce091842571 |
|
BLAKE2b-256 | f9e957e4c4b7c1bdc64bbd7c542d71ae07363dd4d98c9c7880cf2b13f240cd7a |