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 {
EmailUser string
EmailPass string
EmailIMAP string
TodoAddr string
TodoToken string
TodoList string
TodoTag string
Uploader Uploader
Storage storage.DB
Banks map[Bank]bool
EmailUser string
EmailPass string
EmailIMAP string
TodoAddr string
TodoToken string
TodoList string
TodoTag string
Uploader Uploader
Storage storage.DB
Banks map[Bank]bool
AccountsPattern string
}
var config Config
@ -52,7 +53,9 @@ func NewConfig() Config {
as.Append(args.STRING, "todotoken", "todo token", "")
as.Append(args.STRING, "todolist", "todo list", "")
as.Append(args.STRING, "todotag", "todo tag", "expense")
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, "store", "store type", "map")
@ -76,13 +79,14 @@ func NewConfig() Config {
}
config = Config{
EmailUser: as.GetString("emailuser"),
EmailPass: as.GetString("emailpass"),
EmailIMAP: as.GetString("emailimap"),
TodoAddr: as.GetString("todoaddr"),
TodoTag: as.GetString("todotag"),
Storage: storage,
Uploader: ul,
EmailUser: as.GetString("emailuser"),
EmailPass: as.GetString("emailpass"),
EmailIMAP: as.GetString("emailimap"),
TodoAddr: as.GetString("todoaddr"),
TodoTag: as.GetString("todotag"),
AccountsPattern: as.GetString("accounts"),
Storage: storage,
Uploader: ul,
Banks: map[Bank]bool{
Chase: strings.Contains(strings.ToLower(as.GetString("banks")), strings.ToLower(Chase.String())),
Citi: strings.Contains(strings.ToLower(as.GetString("banks")), strings.ToLower(Citi.String())),

View File

@ -3,6 +3,7 @@ package main
import (
"local/sandbox/contact/contact"
"log"
"regexp"
)
func main() {
@ -16,12 +17,16 @@ func main() {
if err != nil {
panic(err)
}
patterns := regexp.MustCompile(config.AccountsPattern)
for email := range emails {
transactions, err := Scrape(email, config.Banks)
if err != nil {
log.Println("failed to scrape email:", err)
}
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 {
log.Println("skipping duplicate transaction:", transaction)
} else {