|
@@ -1,24 +1,9 @@
|
|
|
# -*- coding: utf-8 -*-
|
|
|
-"""
|
|
|
-This is a skeleton file that can serve as a starting point for a Python
|
|
|
-console script. To run this script uncomment the following lines in the
|
|
|
-[options.entry_points] section in setup.cfg:
|
|
|
-
|
|
|
- console_scripts =
|
|
|
- fibonacci = ynrc.skeleton:run
|
|
|
-
|
|
|
-Then run `python setup.py install` which will install the command `fibonacci`
|
|
|
-inside your current environment.
|
|
|
-Besides console scripts, the header (i.e. until _logger...) of this file can
|
|
|
-also be used as template for Python modules.
|
|
|
-
|
|
|
-Note: This skeleton file can be safely removed if not needed!
|
|
|
-"""
|
|
|
-
|
|
|
import argparse
|
|
|
import logging
|
|
|
import sys
|
|
|
import datetime
|
|
|
+import json
|
|
|
|
|
|
import hammock
|
|
|
import requests
|
|
@@ -33,14 +18,6 @@ _logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
def parse_args(args):
|
|
|
- """Parse command line parameters
|
|
|
-
|
|
|
- Args:
|
|
|
- args ([str]): command line parameters as list of strings
|
|
|
-
|
|
|
- Returns:
|
|
|
- :obj:`argparse.Namespace`: command line parameters namespace
|
|
|
- """
|
|
|
parser = argparse.ArgumentParser(description="Just a Fibonacci demonstration")
|
|
|
parser.add_argument(
|
|
|
"--version",
|
|
@@ -48,8 +25,9 @@ def parse_args(args):
|
|
|
version="ynrc {ver}".format(ver=__version__),
|
|
|
)
|
|
|
parser.add_argument("--ynab-api-key", help="YNAB API key", type=str, required=True)
|
|
|
- parser.add_argument("--ynab-budget-name", help="YNAB API key", type=str, required=True)
|
|
|
- parser.add_argument("--rocketchat-webhook", help="YNAB API key", type=str, required=True)
|
|
|
+ parser.add_argument("--ynab-budget-name", help="YNAB budget name", type=str, required=True)
|
|
|
+ parser.add_argument("--rocketchat-webhook", help="Rocket.Chat webhook URL", type=str, required=True)
|
|
|
+ parser.add_argument("--rocketchat-avatar-url", help="Rocket.Chat user avatar URL", type=str, default="")
|
|
|
parser.add_argument(
|
|
|
"-v",
|
|
|
"--verbose",
|
|
@@ -70,11 +48,6 @@ def parse_args(args):
|
|
|
|
|
|
|
|
|
def setup_logging(loglevel):
|
|
|
- """Setup basic logging
|
|
|
-
|
|
|
- Args:
|
|
|
- loglevel (int): minimum loglevel for emitting messages
|
|
|
- """
|
|
|
logformat = "[%(asctime)s] %(levelname)s:%(name)s:%(message)s"
|
|
|
logging.basicConfig(
|
|
|
level=loglevel, stream=sys.stdout, format=logformat, datefmt="%Y-%m-%d %H:%M:%S"
|
|
@@ -149,20 +122,50 @@ def fetch_from_ynab(api_key, budget_name):
|
|
|
out.append((u'%s' % r['name'], amount, ))
|
|
|
if len(out) >= 10:
|
|
|
break
|
|
|
+ return out
|
|
|
|
|
|
- print(out)
|
|
|
|
|
|
-def main_call(args):
|
|
|
- """Main entry point allowing external calls
|
|
|
+def post_to_rocketchat(hook, avatar, ynab):
|
|
|
+ if not ynab:
|
|
|
+ return
|
|
|
|
|
|
- Args:
|
|
|
- args ([str]): command line parameter list
|
|
|
- """
|
|
|
+ today = datetime.date.today()
|
|
|
+ week_ago = today - datetime.timedelta(days=7)
|
|
|
+
|
|
|
+ post_data = {
|
|
|
+ "alias": "YNAB",
|
|
|
+ "text": 'YNAB report for week of %s (from %s)' % (today.strftime('%Y-%W'), week_ago.strftime('%a %Y-%m-%d')),
|
|
|
+ "attachments": [
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ if avatar:
|
|
|
+ post_data['avatar'] = avatar
|
|
|
+
|
|
|
+ for spending in ynab:
|
|
|
+ spending_name, spending_amount = spending
|
|
|
+ post_data['attachments'].append({
|
|
|
+ "title": spending_name,
|
|
|
+ "text": spending_amount,
|
|
|
+ })
|
|
|
+
|
|
|
+ result = requests.post(
|
|
|
+ hook,
|
|
|
+ headers={'Content-Type': 'application/json'},
|
|
|
+ data=json.dumps(post_data),
|
|
|
+ )
|
|
|
+ if result.json().get('success', False):
|
|
|
+ _logger.debug("Posted to Rocket.Chat successfully")
|
|
|
+ else:
|
|
|
+ _logger.error("Failed posting to Rocket.Chat: %s". result.text)
|
|
|
+
|
|
|
+
|
|
|
+def main_call(args):
|
|
|
args = parse_args(args)
|
|
|
setup_logging(args.loglevel)
|
|
|
_logger.debug("Starting ynrc...")
|
|
|
|
|
|
- fetch_from_ynab(args.ynab_api_key, args.ynab_budget_name)
|
|
|
+ ynab = fetch_from_ynab(args.ynab_api_key, args.ynab_budget_name)
|
|
|
+ post_to_rocketchat(args.rocketchat_webhook, args.rocketchat_avatar_url, ynab)
|
|
|
|
|
|
_logger.debug("Finished running ynrc")
|
|
|
|