use with statement to acquire/release thread locks
| | |
| | | r'(?:\#(?P<defname>[\w_]+))?' |
| | | r'(\.(?P<ext>.*))' |
| | | ) |
| | | asset, defname, ext = p.match(info.name).group('asset', 'defname', 'ext') |
| | | asset, defname, ext = p.match(info.name).group( |
| | | 'asset', 'defname', 'ext' |
| | | ) |
| | | path = '%s.%s' % (asset, ext) |
| | | registry = info.registry |
| | | settings = info.settings |
| | |
| | | preprocessor=preprocessor |
| | | ) |
| | | |
| | | registry_lock.acquire() |
| | | try: |
| | | with registry_lock: |
| | | registry.registerUtility(lookup, IMakoLookup, |
| | | name=settings_prefix) |
| | | finally: |
| | | registry_lock.release() |
| | | |
| | | return MakoLookupTemplateRenderer(path, defname, lookup) |
| | | |
| | |
| | | if renderer is None: |
| | | renderer = self.impl(spec, self, macro=None) |
| | | # cache the template |
| | | try: |
| | | self.lock.acquire() |
| | | with self.lock: |
| | | registry.registerUtility(renderer, |
| | | ITemplateRenderer, name=spec) |
| | | finally: |
| | | self.lock.release() |
| | | else: |
| | | # spec is a package:relpath asset spec |
| | | renderer = registry.queryUtility(ITemplateRenderer, name=spec) |
| | |
| | | r'(\.(?P<ext>.*))' |
| | | ) |
| | | asset, macro, ext = p.match(spec).group( |
| | | 'asset', 'defname', 'ext') |
| | | 'asset', 'defname', 'ext' |
| | | ) |
| | | spec = '%s.%s' % (asset, ext) |
| | | try: |
| | | package_name, filename = spec.split(':', 1) |
| | |
| | | settings = info.settings |
| | | if not settings.get('reload_assets'): |
| | | # cache the template |
| | | self.lock.acquire() |
| | | try: |
| | | with self.lock: |
| | | registry.registerUtility(renderer, ITemplateRenderer, |
| | | name=spec) |
| | | finally: |
| | | self.lock.release() |
| | | |
| | | return renderer |
| | | |
| | |
| | | lookup = registry.queryUtility(IChameleonLookup, name=info.type) |
| | | if lookup is None: |
| | | lookup = ChameleonRendererLookup(impl, registry) |
| | | lock.acquire() |
| | | try: |
| | | with lock: |
| | | registry.registerUtility(lookup, IChameleonLookup, name=info.type) |
| | | finally: |
| | | lock.release() |
| | | return lookup(info) |
| | | |
| | | @implementer(IRendererInfo) |
| | |
| | | |
| | | def open(self): |
| | | if self.fileobj is None: |
| | | self.lock.acquire() |
| | | try: |
| | | if self.fileobj is None: |
| | | self.fileobj = open(self.filename, self.mode) |
| | | finally: |
| | | self.lock.release() |
| | | with self.lock: |
| | | self.fileobj = open(self.filename, self.mode) |
| | | return self.fileobj |
| | | |
| | | def close(self): |