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

@ -24,16 +24,17 @@ var uploaders = map[string]Uploader{
} }
type Config struct { type Config struct {
EmailUser string EmailUser string
EmailPass string EmailPass string
EmailIMAP string EmailIMAP string
TodoAddr string TodoAddr string
TodoToken string TodoToken string
TodoList string TodoList string
TodoTag string TodoTag string
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")
@ -76,13 +79,14 @@ func NewConfig() Config {
} }
config = Config{ config = Config{
EmailUser: as.GetString("emailuser"), EmailUser: as.GetString("emailuser"),
EmailPass: as.GetString("emailpass"), EmailPass: as.GetString("emailpass"),
EmailIMAP: as.GetString("emailimap"), EmailIMAP: as.GetString("emailimap"),
TodoAddr: as.GetString("todoaddr"), TodoAddr: as.GetString("todoaddr"),
TodoTag: as.GetString("todotag"), TodoTag: as.GetString("todotag"),
Storage: storage, AccountsPattern: as.GetString("accounts"),
Uploader: ul, Storage: storage,
Uploader: ul,
Banks: map[Bank]bool{ Banks: map[Bank]bool{
Chase: strings.Contains(strings.ToLower(as.GetString("banks")), strings.ToLower(Chase.String())), Chase: strings.Contains(strings.ToLower(as.GetString("banks")), strings.ToLower(Chase.String())),
Citi: strings.Contains(strings.ToLower(as.GetString("banks")), strings.ToLower(Citi.String())), Citi: strings.Contains(strings.ToLower(as.GetString("banks")), strings.ToLower(Citi.String())),

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 {