comparison piecrust/generation/base.py @ 814:aca04e175488

data: Allow page generators to have an associated data provider
author Ben Artin <ben@artins.org>
date Wed, 28 Dec 2016 01:27:02 -0500
parents 58ebf50235a5
children 69d16e1afb95
comparison
equal deleted inserted replaced
813:c3cb2f9df882 814:aca04e175488
122 page_ref = config.get('page') 122 page_ref = config.get('page')
123 if page_ref is None: 123 if page_ref is None:
124 raise ConfigurationError( 124 raise ConfigurationError(
125 "Generator '%s' requires a listing page ref." % name) 125 "Generator '%s' requires a listing page ref." % name)
126 self.page_ref = PageRef(app, page_ref) 126 self.page_ref = PageRef(app, page_ref)
127 self.data_endpoint = config.get('data_endpoint')
128 self.data_type = config.get('data_type')
129
130 if self.data_endpoint and not self.data_type:
131 raise ConfigurationError(
132 "Generator '%s' requires a data type because it has a data endpoint." % name)
133
134 self._provider_type = None
127 135
128 @cached_property 136 @cached_property
129 def source(self): 137 def source(self):
130 for src in self.app.sources: 138 for src in self.app.sources:
131 if src.name == self.source_name: 139 if src.name == self.source_name:
144 raise NotImplementedError() 152 raise NotImplementedError()
145 153
146 def onRouteFunctionUsed(self, route, route_metadata): 154 def onRouteFunctionUsed(self, route, route_metadata):
147 pass 155 pass
148 156
157 def buildDataProvider(self, page, override):
158 if not self._provider_type:
159 self._provider_type = self.app.getDataProviderClass(self.data_type)
160 return self._provider_type(self, page, override)