File tree Expand file tree Collapse file tree 3 files changed +23
-4
lines changed Expand file tree Collapse file tree 3 files changed +23
-4
lines changed Original file line number Diff line number Diff line change 2
2
3
3
import datetime
4
4
import json
5
+ import os
5
6
import posixpath
6
7
7
8
from neurodocker import __version__
@@ -101,6 +102,14 @@ class ContainerSpecGenerator:
101
102
def render (self ):
102
103
raise NotImplementedError ("not implemented" )
103
104
105
+ def save (self , filepath ):
106
+ """Save the rendered container specification to a file."""
107
+ if os .path .exists (filepath ):
108
+ raise FileExistsError ("File already exists: {}" .format (filepath ))
109
+ rendered = self .render ()
110
+ with open (filepath , mode = 'w' ) as fp :
111
+ fp .write (rendered + '\n ' )
112
+
104
113
@property
105
114
def commented_header (self ):
106
115
t = datetime .datetime .utcnow ().strftime ("%Y-%m-%d %H:%M:%S" )
Original file line number Diff line number Diff line change @@ -288,9 +288,14 @@ def __init__(self, specs):
288
288
self ._prep ()
289
289
_Users .clear_memory ()
290
290
291
+ self ._rendered = False
292
+
291
293
def render (self ):
292
- return self .commented_header + "\n \n " .join (
293
- self ._ispecs_to_dockerfile_str ())
294
+ # Cache the rendered string.
295
+ if not self ._rendered :
296
+ self ._rendered = self .commented_header + "\n \n " .join (
297
+ self ._ispecs_to_dockerfile_str ())
298
+ return self ._rendered
294
299
295
300
def _prep (self ):
296
301
self ._add_json ()
Original file line number Diff line number Diff line change @@ -104,15 +104,20 @@ def __init__(self, specs):
104
104
self ._add_neurodocker_header ()
105
105
self ._add_json ()
106
106
107
+ self ._rendered = False
108
+
107
109
def render (self ):
108
110
def _render_one (section ):
109
111
renderer = getattr (self , "_render_{}" .format (section ))
110
112
return renderer ()
111
113
112
114
if not self ._parts_filled :
113
115
self ._fill_parts ()
114
- return self .commented_header + "\n \n " .join (
115
- map (_render_one , (sec for sec , con in self ._order if con )))
116
+
117
+ if not self ._rendered :
118
+ self ._rendered = self .commented_header + "\n \n " .join (
119
+ map (_render_one , (sec for sec , con in self ._order if con )))
120
+ return self ._rendered
116
121
117
122
def _render_header (self ):
118
123
return "\n " .join (
You can’t perform that action at this time.
0 commit comments