1
0
mirror of https://github.com/rancher/norman.git synced 2025-09-02 07:44:51 +00:00

Enable dynamic schemas

This commit is contained in:
Darren Shepherd
2017-12-16 01:25:28 -07:00
parent 480747082c
commit 627e06e37f
3 changed files with 175 additions and 51 deletions

View File

@@ -26,7 +26,7 @@ type Server struct {
Resolver parse.ResolverFunc
SubContextAttributeProvider types.SubContextAttributeProvider
ResponseWriters map[string]ResponseWriter
schemas *types.Schemas
Schemas *types.Schemas
QueryFilter types.QueryFilter
StoreWrapper StoreWrapper
URLParser parse.URLParser
@@ -46,7 +46,7 @@ type Defaults struct {
func NewAPIServer() *Server {
s := &Server{
schemas: types.NewSchemas(),
Schemas: types.NewSchemas(),
ResponseWriters: map[string]ResponseWriter{
"json": &writer.JSONResponseWriter{},
"html": &writer.HTMLResponseWriter{},
@@ -68,12 +68,13 @@ func NewAPIServer() *Server {
QueryFilter: handler.QueryFilter,
}
s.Schemas.AddHook = s.setupDefaults
s.Parser = s.parser
return s
}
func (s *Server) parser(rw http.ResponseWriter, req *http.Request) (*types.APIContext, error) {
ctx, err := parse.Parse(rw, req, s.schemas, s.URLParser, s.Resolver)
ctx, err := parse.Parse(rw, req, s.Schemas, s.URLParser, s.Resolver)
ctx.ResponseWriter = s.ResponseWriters[ctx.ResponseFormat]
if ctx.ResponseWriter == nil {
ctx.ResponseWriter = s.ResponseWriters["json"]
@@ -102,20 +103,15 @@ func (s *Server) AddSchemas(schemas *types.Schemas) error {
return
}
for _, schema := range builtin.Schemas.Schemas() {
s.addSchema(*schema)
s.Schemas.AddSchema(*schema)
}
})
for _, schema := range schemas.Schemas() {
s.addSchema(*schema)
s.Schemas.AddSchema(*schema)
}
return s.schemas.Err()
}
func (s *Server) addSchema(schema types.Schema) {
s.setupDefaults(&schema)
s.schemas.AddSchema(schema)
return s.Schemas.Err()
}
func (s *Server) setupDefaults(schema *types.Schema) {