@@ -39,19 +39,42 @@ func (RenderRequests) CoreRequestsName() string { return "render" }
3939
4040// RenderParams defines parameters for the Render method
4141type RenderParams struct {
42- Ref string
43- Template []byte
44- UseFSI bool
42+ // Ref is a string reference to the dataset to render
43+ Ref string
44+ // Optionally pass an entire dataset in for rendering, if providing a dataset,
45+ // the Ref field must be empty
46+ Dataset * dataset.Dataset
47+ // Optional template override
48+ Template []byte
49+ // If true,
50+ UseFSI bool
51+ // Output format. defaults to "html"
4552 OutFormat string
4653}
4754
55+ // Validate checks if render parameters are valid
56+ func (p * RenderParams ) Validate () error {
57+ if p .Ref != "" && p .Dataset != nil {
58+ return fmt .Errorf ("cannot provide both a reference and a dataset to render" )
59+ }
60+ return nil
61+ }
62+
4863// RenderViz renders a viz component as html
4964func (r * RenderRequests ) RenderViz (p * RenderParams , res * []byte ) (err error ) {
5065 if r .cli != nil {
5166 return r .cli .Call ("RenderRequests.RenderViz" , p , res )
5267 }
5368 ctx := context .TODO ()
5469
70+ if err = p .Validate (); err != nil {
71+ return err
72+ }
73+
74+ if p .Dataset != nil {
75+ return fmt .Errorf ("rendering dynamic dataset viz component is not supported" )
76+ }
77+
5578 var ref reporef.DatasetRef
5679 if ref , err = repo .ParseDatasetRef (p .Ref ); err != nil {
5780 return
@@ -74,35 +97,41 @@ func (r *RenderRequests) RenderReadme(p *RenderParams, res *string) (err error)
7497 }
7598 ctx := context .TODO ()
7699
77- ref , err := base .ToDatasetRef (p .Ref , r .repo , p .UseFSI )
78- if err != nil {
100+ if err = p .Validate (); err != nil {
79101 return err
80102 }
81103
82104 var ds * dataset.Dataset
83- if p .UseFSI {
84- if ref .FSIPath == "" {
85- return fsi .ErrNoLink
86- }
87- if ds , err = fsi .ReadDir (ref .FSIPath ); err != nil {
88- return fmt .Errorf ("loading linked dataset: %s" , err )
89- }
105+ if p .Dataset != nil {
106+ ds = p .Dataset
90107 } else {
91- ds , err = dsfs . LoadDataset ( ctx , r .repo . Store (), ref . Path )
108+ ref , err := base . ToDatasetRef ( p . Ref , r .repo , p . UseFSI )
92109 if err != nil {
93- return fmt .Errorf ("loading dataset: %s" , err )
110+ return err
111+ }
112+
113+ if p .UseFSI {
114+ if ref .FSIPath == "" {
115+ return fsi .ErrNoLink
116+ }
117+ if ds , err = fsi .ReadDir (ref .FSIPath ); err != nil {
118+ return fmt .Errorf ("loading linked dataset: %s" , err )
119+ }
120+ } else {
121+ ds , err = dsfs .LoadDataset (ctx , r .repo .Store (), ref .Path )
122+ if err != nil {
123+ return fmt .Errorf ("loading dataset: %s" , err )
124+ }
94125 }
95126 }
96127
97128 if ds .Readme == nil {
98129 return fmt .Errorf ("no readme to render" )
99130 }
100131
101- err = ds .Readme .OpenScriptFile (ctx , r .repo .Filesystem ())
102- if err != nil {
132+ if err = ds .Readme .OpenScriptFile (ctx , r .repo .Filesystem ()); err != nil {
103133 return err
104134 }
105-
106135 if ds .Readme .ScriptFile () == nil {
107136 return fmt .Errorf ("no readme to render" )
108137 }
0 commit comments