-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmetadata.go
73 lines (64 loc) · 2.28 KB
/
metadata.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package main
import (
"encoding/json"
"gopkg.in/mgo.v2/bson"
)
// Record define ML mongo record
type Record struct {
MetaData map[string]interface{} `json:"meta_data"` // meta-data information about ML model
Model string `json:"model"` // model name
Type string `json:"type"` // model type
Version string `json:"version"` // ML version
Description string `json:"description"` // ML model description
Reference string `json:"reference"` // ML reference URL
Discipline string `json:"discipline"` // ML discipline
Bundle string `json:"bundle"` // ML bundle file
UserName string `json:"user_name"` // user name
UserID string `json:"user_id"` // user id
Provider string `json:"provider"` // auth provider
}
// ToJSON provides string representation of Record
func (r Record) ToJSON() string {
// create pretty JSON representation of the record
data, _ := json.MarshalIndent(r, "", " ")
return string(data)
}
// MetaData represents meta-data database object
type MetaData struct {
DBName string
DBColl string
}
// Insert inserts record into MetaData database
func (m *MetaData) Insert(rec Record) error {
records := []Record{rec}
err := MongoUpsert(Config.DBName, Config.DBColl, records)
return err
}
// Update updates record in MetaData database
func (m *MetaData) Update(rec Record) error {
spec := bson.M{"model": rec.Model}
meta := bson.M{"model": rec.Model, "type": rec.Type, "meta_data": rec.MetaData}
err := MongoUpdate(Config.DBName, Config.DBColl, spec, meta)
return err
}
// Remove removes given model from MetaData database
func (m *MetaData) Remove(model string) error {
spec := bson.M{"name": model}
err := MongoRemove(Config.DBName, Config.DBColl, spec)
return err
}
// Records retrieves records from underlying MetaData database
func (m *MetaData) Records(model, mlType, version string) ([]Record, error) {
spec := bson.M{}
if model != "" {
spec["model"] = model
}
if version != "" {
spec["version"] = version
}
if mlType != "" {
spec["type"] = mlType
}
records, err := MongoGet(m.DBName, m.DBColl, spec, 0, -1)
return records, err
}