[#232] fix api to use common Version schema

also rewrote the schema fetcher to use Go
This commit is contained in:
Cory Bennett
2019-10-01 23:40:33 -07:00
parent 2c9d957304
commit 90f01ce60a
5 changed files with 67 additions and 41 deletions
-13
View File
@@ -1,13 +0,0 @@
package jiradata
type ProjectVersion struct {
Self string `json:"self,omitempty" yaml:"self,omitempty"`
ID string `json:"id,omitempty" yaml:"id,omitempty"`
Description string `json:"description,omitempty" yaml:"description,omitempty"`
Name string `json:"name,omitempty" yaml:"name,omitempty"`
Archived bool `json:"archived,omitempty" yaml:archived,omitempty"`
Released bool `json:"released,omitempty" yaml:released,omitempty"`
ReleaseDate string `json:"releaseDate,omitempty" yaml:"releaseDate,omitempty"`
UserReleaseDate string `json:"userReleaseDate,omitempty" yaml:"userReleaseDate,omitempty"`
ProjectID int `json:"projectId,omitempty" yaml:"projectId,omitempty"`
}
-3
View File
@@ -1,3 +0,0 @@
package jiradata
type ProjectVersions []*ProjectVersion
+4 -4
View File
@@ -27,11 +27,11 @@ func GetProjectComponents(ua HttpClient, endpoint string, project string) (*jira
}
// https://developer.atlassian.com/cloud/jira/platform/rest/v2#api-api-2-project-projectIdOrKey-versions-get
func (j *Jira) GetProjectVersions(project string) (*jiradata.ProjectVersions, error) {
func (j *Jira) GetProjectVersions(project string) (*jiradata.Versions, error) {
return GetProjectVersions(j.UA, j.Endpoint, project)
}
func GetProjectVersions(ua HttpClient, endpoint string, project string) (*jiradata.ProjectVersions, error) {
func GetProjectVersions(ua HttpClient, endpoint string, project string) (*jiradata.Versions, error) {
uri := URLJoin(endpoint, "rest/api/2/project", project, "versions")
resp, err := ua.GetJSON(uri)
if err != nil {
@@ -40,8 +40,8 @@ func GetProjectVersions(ua HttpClient, endpoint string, project string) (*jirada
defer resp.Body.Close()
if resp.StatusCode == 200 {
results := jiradata.ProjectVersions{}
return &results, readJSON(resp.Body, &results)
results := jiradata.Versions{}
return &results, json.NewDecoder(resp.Body).Decode(&results)
}
return nil, responseError(resp)
}
+63
View File
@@ -0,0 +1,63 @@
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strings"
"golang.org/x/net/html"
)
func mayPanic(err error) {
if err != nil {
panic(err)
}
}
func main() {
resp, err := http.Get("https://docs.atlassian.com/software/jira/docs/api/REST/7.12.0/")
mayPanic(err)
defer resp.Body.Close()
capture := false
nextCodeBlock := false
stream := html.NewTokenizer(resp.Body)
var buffer string
for tt := stream.Next(); tt != html.ErrorToken; tt = stream.Next() {
t := stream.Token()
if t.Data == "h6" && tt == html.StartTagToken {
capture = true
}
if t.Data == "h6" && tt == html.EndTagToken {
capture = false
if strings.Contains(strings.ToLower(buffer), "schema") {
nextCodeBlock = true
}
buffer = ""
}
if nextCodeBlock && t.Data == "code" && tt == html.StartTagToken {
capture = true
}
if nextCodeBlock && t.Data == "code" && tt == html.EndTagToken {
capture = false
schema := map[string]interface{}{}
err := json.Unmarshal([]byte(buffer), &schema)
mayPanic(err)
title, ok := schema["title"].(string)
if ok {
title = strings.ReplaceAll(title, " ", "")
fileName := fmt.Sprintf("%s.json", title)
fmt.Printf("Writing %s\n", fileName)
err := ioutil.WriteFile(fileName, []byte(buffer), 0644)
mayPanic(err)
}
buffer = ""
nextCodeBlock = false
}
if capture && tt == html.TextToken {
buffer += t.Data
}
}
}
-21
View File
@@ -1,21 +0,0 @@
#!/usr/bin/env python
from lxml import html
import requests
import json
page = requests.get('https://docs.atlassian.com/jira/REST/cloud')
tree = html.fromstring(page.content)
schemas = tree.xpath("//div[@class='representation-doc-block']//code/text()")
for schema in schemas:
try:
data = json.loads(schema)
if "title" in data:
title = data["title"].replace(" ", "")
print "Writing {}.json".format(title)
with open("{}.json".format(title), 'w') as f:
f.write(schema)
except:
True