Prechádzať zdrojové kódy

Posting to Rocket.Chat and small cleanup

Nikola Kotur 3 rokov pred
rodič
commit
e0f0f41d61
1 zmenil súbory, kde vykonal 41 pridanie a 38 odobranie
  1. 41 38
      src/ynrc/main.py

+ 41 - 38
src/ynrc/main.py

@@ -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")