From 13c84cd9973458750305c72a919cf921d9b22b04 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 3 Jun 2017 10:29:00 +0200 Subject: main.go: Read config from a new format TOML file Construct a new config format, written in TOML. Read that format in when starting the program. This new format has the benefit of using project name aliases as keys. The goal will be to allow users to send one of those aliases as a command line argument to the program, and thus to have the program post a TimeTask entry for that project. Here's an idea of what the new format looks like: [auth] username = "example" password_cmd = "" [projects.myprojectalias] client = ... project = ... module = ... task = ... work_type = ... time = 7 billable = true [projects.project2] client = ... project = ... module = ... task = ... work_type = ... time = 7 billable = true Eventually, we'll need to remove the `interface{}` from the `Projects` map value and replace it with a real type, but this was just to test that it was possible to get us a nice map from the TOML. --- main.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 5a9f0d1..bfb56b8 100644 --- a/main.go +++ b/main.go @@ -8,22 +8,33 @@ import ( "github.com/teddywing/timetasker/timetask" + "github.com/BurntSushi/toml" "gopkg.in/yaml.v2" ) +// type Config struct { +// Auth struct { +// Username string +// PasswordCmd string `yaml:"password_cmd"` +// } +// Fields timetask.Fields +// Defaults timetask.TimeEntry +// } + type Config struct { Auth struct { Username string - PasswordCmd string `yaml:"password_cmd"` + PasswordCmd string //`toml:"password_cmd"` } - Fields timetask.Fields - Defaults timetask.TimeEntry + Projects map[string]interface{} } var config Config func main() { loadConfig() + log.Printf("%+v", config) + return if len(os.Args) == 1 { fmt.Println("Not enough arguments") @@ -46,13 +57,13 @@ func main() { // timetask.SubmitTimeEntries(config.Fields, time_entries) - timetask.GenerateWeeklyTimesheet(os.Stdout, config.Defaults) + // timetask.GenerateWeeklyTimesheet(os.Stdout, config.Defaults) } func loadConfig() { - config_str, err := ioutil.ReadFile("config.yml") + // config_str, err := ioutil.ReadFile("config2.toml") config = Config{} - err = yaml.Unmarshal(config_str, &config) + _, err := toml.DecodeFile("config2.toml", &config) if err != nil { log.Println(err) } -- cgit v1.2.3 From 1a1d9c3c671d33f7013c94564007e2c5b33cea47 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 3 Jun 2017 10:42:54 +0200 Subject: main.go: Cleanup from 13c84cd9973458750305c72a919cf921d9b22b04 * Get rid of the 'yaml' import since we're now using 'toml' instead. * Get rid of commented code that's no longer relevant. * Get rid of test code that checked that the config loaded correctly. --- main.go | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index bfb56b8..61cdce6 100644 --- a/main.go +++ b/main.go @@ -9,22 +9,12 @@ import ( "github.com/teddywing/timetasker/timetask" "github.com/BurntSushi/toml" - "gopkg.in/yaml.v2" ) -// type Config struct { -// Auth struct { -// Username string -// PasswordCmd string `yaml:"password_cmd"` -// } -// Fields timetask.Fields -// Defaults timetask.TimeEntry -// } - type Config struct { Auth struct { Username string - PasswordCmd string //`toml:"password_cmd"` + PasswordCmd string } Projects map[string]interface{} } @@ -33,8 +23,6 @@ var config Config func main() { loadConfig() - log.Printf("%+v", config) - return if len(os.Args) == 1 { fmt.Println("Not enough arguments") @@ -61,7 +49,6 @@ func main() { } func loadConfig() { - // config_str, err := ioutil.ReadFile("config2.toml") config = Config{} _, err := toml.DecodeFile("config2.toml", &config) if err != nil { -- cgit v1.2.3 From e99c7b69e0981d4a7b87310cd811b90a2ffbe12f Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 3 Jun 2017 11:22:08 +0200 Subject: Comment out all the things! Half get rid of a lot of code. I don't like and don't want to use our old field types. Get rid of them and the code in 'http.go' that depends on them. Also get rid of the time entry submission code in 'main.go' as that's going to be redone. --- main.go | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 61cdce6..b31a4f0 100644 --- a/main.go +++ b/main.go @@ -1,12 +1,12 @@ package main import ( - "fmt" - "io/ioutil" + // "fmt" + // "io/ioutil" "log" - "os" + // "os" - "github.com/teddywing/timetasker/timetask" + // "github.com/teddywing/timetasker/timetask" "github.com/BurntSushi/toml" ) @@ -24,24 +24,24 @@ var config Config func main() { loadConfig() - if len(os.Args) == 1 { - fmt.Println("Not enough arguments") - os.Exit(1) - } - - file_path := os.Args[len(os.Args)-1] - file, err := ioutil.ReadFile(file_path) - if err != nil { - log.Println(err) - } - - time_entries := []timetask.TimeEntry{} - err = yaml.Unmarshal(file, &time_entries) - if err != nil { - log.Println(err) - } - - log.Printf("%+v", time_entries) + // if len(os.Args) == 1 { + // fmt.Println("Not enough arguments") + // os.Exit(1) + // } + // + // file_path := os.Args[len(os.Args)-1] + // file, err := ioutil.ReadFile(file_path) + // if err != nil { + // log.Println(err) + // } + + // time_entries := []timetask.TimeEntry{} + // err = yaml.Unmarshal(file, &time_entries) + // if err != nil { + // log.Println(err) + // } + // + // log.Printf("%+v", time_entries) // timetask.SubmitTimeEntries(config.Fields, time_entries) -- cgit v1.2.3 From d998a82d4019b1fc5a15734f091852b1b0f086d4 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 3 Jun 2017 11:24:55 +0200 Subject: Create a new Project type This corresponds to a "project" entry in the new config2.toml file. (See 13c84cd9973458750305c72a919cf921d9b22b04). Instead of decoding generic `interface{}`s as projects from the TOML, make them a real type. The reason why we're using `int`s where we used to use strings is that the new TOML format will have users write IDs directly in the config file, instead of having the program automatically search for those IDs and use them as we had previously designed. Maybe we'll bring that functionality back at some point, but for now it's too bothersome to implement and I don't consider it worth the trouble. --- main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index b31a4f0..ccdcaed 100644 --- a/main.go +++ b/main.go @@ -6,7 +6,7 @@ import ( "log" // "os" - // "github.com/teddywing/timetasker/timetask" + "github.com/teddywing/timetasker/timetask" "github.com/BurntSushi/toml" ) @@ -16,7 +16,7 @@ type Config struct { Username string PasswordCmd string } - Projects map[string]interface{} + Projects map[string]timetask.Project } var config Config -- cgit v1.2.3