filter accounts by pattern

master
bel 2021-07-30 00:07:34 -06:00
parent a6c5121d54
commit 24b66d1c46
2 changed files with 26 additions and 17 deletions

View File

@ -34,6 +34,7 @@ type Config struct {
Uploader Uploader Uploader Uploader
Storage storage.DB Storage storage.DB
Banks map[Bank]bool Banks map[Bank]bool
AccountsPattern string
} }
var config Config var config Config
@ -52,7 +53,9 @@ func NewConfig() Config {
as.Append(args.STRING, "todotoken", "todo token", "") as.Append(args.STRING, "todotoken", "todo token", "")
as.Append(args.STRING, "todolist", "todo list", "") as.Append(args.STRING, "todolist", "todo list", "")
as.Append(args.STRING, "todotag", "todo tag", "expense") as.Append(args.STRING, "todotag", "todo tag", "expense")
as.Append(args.STRING, "banks", "uccu,citi,chase", "uccu,citi,chase") as.Append(args.STRING, "banks", "uccu,citi,chase", "uccu,citi,chase")
as.Append(args.STRING, "accounts", "regex to filter accounts", ".*")
as.Append(args.STRING, "authaddr", "auth addr", "https://auth.remote.blapointe.com") as.Append(args.STRING, "authaddr", "auth addr", "https://auth.remote.blapointe.com")
as.Append(args.STRING, "store", "store type", "map") as.Append(args.STRING, "store", "store type", "map")
@ -81,6 +84,7 @@ func NewConfig() Config {
EmailIMAP: as.GetString("emailimap"), EmailIMAP: as.GetString("emailimap"),
TodoAddr: as.GetString("todoaddr"), TodoAddr: as.GetString("todoaddr"),
TodoTag: as.GetString("todotag"), TodoTag: as.GetString("todotag"),
AccountsPattern: as.GetString("accounts"),
Storage: storage, Storage: storage,
Uploader: ul, Uploader: ul,
Banks: map[Bank]bool{ Banks: map[Bank]bool{

View File

@ -3,6 +3,7 @@ package main
import ( import (
"local/sandbox/contact/contact" "local/sandbox/contact/contact"
"log" "log"
"regexp"
) )
func main() { func main() {
@ -16,12 +17,16 @@ func main() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
patterns := regexp.MustCompile(config.AccountsPattern)
for email := range emails { for email := range emails {
transactions, err := Scrape(email, config.Banks) transactions, err := Scrape(email, config.Banks)
if err != nil { if err != nil {
log.Println("failed to scrape email:", err) log.Println("failed to scrape email:", err)
} }
for _, transaction := range transactions { for _, transaction := range transactions {
if !patterns.MatchString(transaction.Account) {
log.Printf("skipping unmatching account pattern %q vs %q", config.AccountsPattern, transaction.Account)
}
if _, err := config.Storage.Get(transaction.ID); err == nil { if _, err := config.Storage.Get(transaction.ID); err == nil {
log.Println("skipping duplicate transaction:", transaction) log.Println("skipping duplicate transaction:", transaction)
} else { } else {