Skip to content

Commit

Permalink
update txt metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
andre-urbani committed Mar 27, 2023
1 parent d73ecc3 commit 1f04316
Show file tree
Hide file tree
Showing 2 changed files with 153 additions and 102 deletions.
2 changes: 1 addition & 1 deletion handler/cantabular_metadata_export.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ func (h *CantabularMetadataExport) Handle(ctx context.Context, workerID int, msg
}

func (h *CantabularMetadataExport) exportTXTFile(ctx context.Context, e *event.CSVCreated, m dataset.Metadata, isPublished bool, isCustom bool) (*downloadInfo, error) {
b := text.NewMetadata(&m)
b := text.NewMetadata(&m, isCustom, e.FilterOutputID, h.cfg.DownloadServiceURL)
filename := h.generateTextFilename(e, isCustom)

var url string
Expand Down
253 changes: 152 additions & 101 deletions text/text.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,123 +4,174 @@ import (
"bytes"
"fmt"
"reflect"
"time"

"github.com/ONSdigital/dp-api-clients-go/v2/dataset"
)

func NewMetadata(m *dataset.Metadata) []byte {
var b bytes.Buffer
func NewMetadata(m *dataset.Metadata, isCustom bool, filterOutputID, downloadServiceURL string) []byte {
if isCustom {
var b bytes.Buffer
var titleDims []string
dt := time.Now()
issuedDate := dt.Format("01-02-2006")

b.WriteString(fmt.Sprintf("Title: %s\n", m.Title))
b.WriteString(fmt.Sprintf("Description: %s\n", m.Description))
if m.Publisher != nil {
b.WriteString(fmt.Sprintf("Publisher: %s\n", *m.Publisher))
}
b.WriteString(fmt.Sprintf("Issued: %s\n", m.ReleaseDate))
b.WriteString(fmt.Sprintf("Next Release: %s\n", m.NextRelease))
b.WriteString(fmt.Sprintf("Identifier: %s\n", m.Title))
if m.Keywords != nil {
b.WriteString(fmt.Sprintf("Keywords: %s\n", *m.Keywords))
}
b.WriteString(fmt.Sprintf("Language: %s\n", "English"))
if m.Contacts != nil {
contacts := *m.Contacts
if len(contacts) > 0 {
b.WriteString(fmt.Sprintf("Contact: %s, %s, %s\n", contacts[0].Name, contacts[0].Email, contacts[0].Telephone))
for _, d := range m.Version.Dimensions {
titleDims = append(titleDims, d.Label)
}
}
if len(m.Temporal) > 0 {
b.WriteString(fmt.Sprintf("Temporal: %s\n", m.Temporal[0].Frequency))
}
b.WriteString(fmt.Sprintf("Latest Changes: %s\n", m.LatestChanges))
b.WriteString(fmt.Sprintf("Periodicity: %s\n", m.ReleaseFrequency))
b.WriteString("Distribution:\n")
for k, v := range m.Downloads {
b.WriteString(fmt.Sprintf("\tExtension: %s\n", k))
b.WriteString(fmt.Sprintf("\tSize: %s\n", v.Size))
b.WriteString(fmt.Sprintf("\tURL: %s\n\n", v.URL))
}
b.WriteString(fmt.Sprintf("Unit of measure: %s\n", m.UnitOfMeasure))
b.WriteString(fmt.Sprintf("License: %s\n", m.License))
if m.Methodologies != nil {
b.WriteString(fmt.Sprintf("Methodologies: %s\n", *m.Methodologies))
}
if m.Publications != nil {
b.WriteString(fmt.Sprintf("Publications: %s\n", *m.Publications))
}
if m.RelatedDatasets != nil {
b.WriteString(fmt.Sprintf("Related Links: %s\n", *m.RelatedDatasets))
}
b.WriteString(fmt.Sprintf("Canonical Topic: %s\n", m.CanonicalTopic))
if len(m.Subtopics) > 0 {
b.WriteString(fmt.Sprintf("Subtopics: %s\n", m.Subtopics))
}
b.WriteString(fmt.Sprintf("Survey: %s\n", m.Survey))

// New fields
// Combine alerts and useage notes as in csvw?
if m.Alerts != nil && len(*m.Alerts) != 0 {
b.WriteString(fmt.Sprintf("Alerts:\n"))

for _, a := range *m.Alerts {
b.WriteString(
fmt.Sprintf(
"Date: %s\nDescription: %s\nType: %s\n",
a.Date,
a.Description,
a.Type,
),
)
}
}

b.WriteString("Usage Notes:\n")
if m.DatasetDetails.UsageNotes != nil {
for _, n := range *m.DatasetDetails.UsageNotes {
b.WriteString(fmt.Sprintf("Title: %s\nNote: %s\n\n", n.Title, n.Note))
b.WriteString(fmt.Sprintf("Title: %s\n", titleDims))
b.WriteString(fmt.Sprintf("Issued: %s\n", issuedDate))
b.WriteString(fmt.Sprintf("Language: %s\n", "English"))
b.WriteString("Distribution:\n")
for k, v := range m.Downloads {
if k == "csv" {
b.WriteString(fmt.Sprintf("\tExtension: %s\n", k))
b.WriteString(fmt.Sprintf("\tSize: %s\n", v.Size))
b.WriteString(fmt.Sprintf("\tURL: %s\n\n", fmt.Sprintf("%s/downloads/filter-outputs/%s.csv", downloadServiceURL, filterOutputID)))
} else if k == "csvw" {
b.WriteString(fmt.Sprintf("\tExtension: %s\n", k))
b.WriteString(fmt.Sprintf("\tSize: %s\n", v.Size))
b.WriteString(fmt.Sprintf("\tURL: %s\n\n", fmt.Sprintf("%s/downloads/filter-outputs/%s.csv-metadata.json", downloadServiceURL, filterOutputID)))
} else if k == "txt" {
b.WriteString(fmt.Sprintf("\tExtension: %s\n", k))
b.WriteString(fmt.Sprintf("\tSize: %s\n", v.Size))
b.WriteString(fmt.Sprintf("\tURL: %s\n\n", fmt.Sprintf("%s/downloads/filter-outputs/%s.txt", downloadServiceURL, filterOutputID)))
} else if k == "xlsx" {
b.WriteString(fmt.Sprintf("\tExtension: %s\n", k))
b.WriteString(fmt.Sprintf("\tSize: %s\n", v.Size))
b.WriteString(fmt.Sprintf("\tURL: %s\n\n", fmt.Sprintf("%s/downloads/filter-outputs/%s.xlsx", downloadServiceURL, filterOutputID)))
}

}
}
if m.Version.IsBasedOn != nil {
b.WriteString(fmt.Sprintf("Is Based On: %s\n", m.Version.IsBasedOn.ID))
}
b.WriteString(fmt.Sprintf("%s\n\n%s\n\n%s\n\n", variables, coverage, scc))
b.WriteString("Dimensions:\n")
for _, d := range m.Version.Dimensions {
b.WriteString(fmt.Sprintf("\n\tID: %s\n", d.ID))
b.WriteString(fmt.Sprintf("\n\tLabel: %s\n", d.Label))
b.WriteString(fmt.Sprintf("\n\tDescription: %s\n", d.Description))
b.WriteString(fmt.Sprintf("\n\tNumber Of Options: %d\n", d.NumberOfOptions))
b.WriteString(fmt.Sprintf("\n\tQuality Statement: %s\n%s\n", d.QualityStatementText, d.QualityStatementURL))
}

return b.Bytes()

} else {
var b bytes.Buffer

if l := m.DatasetLinks; !reflect.DeepEqual(l, dataset.Link{}) {
edEmpty := !reflect.DeepEqual(l.Editions, dataset.Link{})
lvEmpty := !reflect.DeepEqual(l.LatestVersion, dataset.Link{})
sEmpty := !reflect.DeepEqual(l.Self, dataset.Link{})
if !edEmpty || !lvEmpty {
b.WriteString("Dataset Links:\n")
b.WriteString(fmt.Sprintf("Title: %s\n", m.Title))
b.WriteString(fmt.Sprintf("Description: %s\n", m.Description))
if m.Publisher != nil {
b.WriteString(fmt.Sprintf("Publisher: %s\n", *m.Publisher))
}
if !edEmpty {
b.WriteString(fmt.Sprintf("Editions:\nHREF: %s\n", l.Editions.URL))
b.WriteString(fmt.Sprintf("Issued: %s\n", m.ReleaseDate))
b.WriteString(fmt.Sprintf("Next Release: %s\n", m.NextRelease))
b.WriteString(fmt.Sprintf("Identifier: %s\n", m.Title))
if m.Keywords != nil {
b.WriteString(fmt.Sprintf("Keywords: %s\n", *m.Keywords))
}
if !lvEmpty {
b.WriteString(
fmt.Sprintf(
"Latest Version:\nHREF: %s\nID: %s\n",
l.LatestVersion.URL,
l.LatestVersion.ID,
),
)
b.WriteString(fmt.Sprintf("Language: %s\n", "English"))
if m.Contacts != nil {
contacts := *m.Contacts
if len(contacts) > 0 {
b.WriteString(fmt.Sprintf("Contact: %s, %s, %s\n", contacts[0].Name, contacts[0].Email, contacts[0].Telephone))
}
}
if !sEmpty {
b.WriteString(fmt.Sprintf("Self:\nHREF: %s\n", l.Self.URL))
if len(m.Temporal) > 0 {
b.WriteString(fmt.Sprintf("Temporal: %s\n", m.Temporal[0].Frequency))
}
}
b.WriteString(fmt.Sprintf("Latest Changes: %s\n", m.LatestChanges))
b.WriteString(fmt.Sprintf("Periodicity: %s\n", m.ReleaseFrequency))
b.WriteString("Distribution:\n")
for k, v := range m.Downloads {
b.WriteString(fmt.Sprintf("\tExtension: %s\n", k))
b.WriteString(fmt.Sprintf("\tSize: %s\n", v.Size))
b.WriteString(fmt.Sprintf("\tURL: %s\n\n", v.URL))
}
b.WriteString(fmt.Sprintf("Unit of measure: %s\n", m.UnitOfMeasure))
b.WriteString(fmt.Sprintf("License: %s\n", m.License))
if m.Methodologies != nil {
b.WriteString(fmt.Sprintf("Methodologies: %s\n", *m.Methodologies))
}
if m.Publications != nil {
b.WriteString(fmt.Sprintf("Publications: %s\n", *m.Publications))
}
if m.RelatedDatasets != nil {
b.WriteString(fmt.Sprintf("Related Links: %s\n", *m.RelatedDatasets))
}
b.WriteString(fmt.Sprintf("Canonical Topic: %s\n", m.CanonicalTopic))
if len(m.Subtopics) > 0 {
b.WriteString(fmt.Sprintf("Subtopics: %s\n", m.Subtopics))
}
b.WriteString(fmt.Sprintf("Survey: %s\n", m.Survey))

b.WriteString(fmt.Sprintf("Version: %d\n", m.Version.Version))
// New fields
// Combine alerts and useage notes as in csvw?
if m.Alerts != nil && len(*m.Alerts) != 0 {
b.WriteString(fmt.Sprintf("Alerts:\n"))

if m.Version.IsBasedOn != nil {
b.WriteString(fmt.Sprintf("Is Based On: %s\n", m.Version.IsBasedOn.ID))
}
for _, a := range *m.Alerts {
b.WriteString(
fmt.Sprintf(
"Date: %s\nDescription: %s\nType: %s\n",
a.Date,
a.Description,
a.Type,
),
)
}
}

b.WriteString(fmt.Sprintf("%s\n\n%s\n\n%s\n\n", variables, coverage, scc))
b.WriteString("Usage Notes:\n")
if m.DatasetDetails.UsageNotes != nil {
for _, n := range *m.DatasetDetails.UsageNotes {
b.WriteString(fmt.Sprintf("Title: %s\nNote: %s\n\n", n.Title, n.Note))
}
}

b.WriteString("Dimensions:\n")
for _, d := range m.Version.Dimensions {
b.WriteString(fmt.Sprintf("\n\tID: %s\n", d.ID))
b.WriteString(fmt.Sprintf("\n\tLabel: %s\n", d.Label))
b.WriteString(fmt.Sprintf("\n\tDescription: %s\n", d.Description))
b.WriteString(fmt.Sprintf("\n\tNumber Of Options: %d\n", d.NumberOfOptions))
b.WriteString(fmt.Sprintf("\n\tQuality Statement: %s\n%s\n", d.QualityStatementText, d.QualityStatementURL))
}
if l := m.DatasetLinks; !reflect.DeepEqual(l, dataset.Link{}) {
edEmpty := !reflect.DeepEqual(l.Editions, dataset.Link{})
lvEmpty := !reflect.DeepEqual(l.LatestVersion, dataset.Link{})
sEmpty := !reflect.DeepEqual(l.Self, dataset.Link{})
if !edEmpty || !lvEmpty {
b.WriteString("Dataset Links:\n")
}
if !edEmpty {
b.WriteString(fmt.Sprintf("Editions:\nHREF: %s\n", l.Editions.URL))
}
if !lvEmpty {
b.WriteString(
fmt.Sprintf(
"Latest Version:\nHREF: %s\nID: %s\n",
l.LatestVersion.URL,
l.LatestVersion.ID,
),
)
}
if !sEmpty {
b.WriteString(fmt.Sprintf("Self:\nHREF: %s\n", l.Self.URL))
}
}

b.WriteString(fmt.Sprintf("Version: %d\n", m.Version.Version))

if m.Version.IsBasedOn != nil {
b.WriteString(fmt.Sprintf("Is Based On: %s\n", m.Version.IsBasedOn.ID))
}

b.WriteString(fmt.Sprintf("%s\n\n%s\n\n%s\n\n", variables, coverage, scc))

return b.Bytes()
b.WriteString("Dimensions:\n")
for _, d := range m.Version.Dimensions {
b.WriteString(fmt.Sprintf("\n\tID: %s\n", d.ID))
b.WriteString(fmt.Sprintf("\n\tLabel: %s\n", d.Label))
b.WriteString(fmt.Sprintf("\n\tDescription: %s\n", d.Description))
b.WriteString(fmt.Sprintf("\n\tNumber Of Options: %d\n", d.NumberOfOptions))
b.WriteString(fmt.Sprintf("\n\tQuality Statement: %s\n%s\n", d.QualityStatementText, d.QualityStatementURL))
}
return b.Bytes()
}
}

0 comments on commit 1f04316

Please sign in to comment.