# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from aria.parser.loading import UriLocation from aria.parser.consumption import ( ConsumptionContext, ConsumerChain, Read, Validate, ServiceTemplate, Types, Inputs, ServiceInstance ) from aria.utils.imports import import_fullname def create_context(uri, loader_source='aria.parser.loading.DefaultLoaderSource', reader_source='aria.parser.reading.DefaultReaderSource', presenter_source='aria.parser.presentation.DefaultPresenterSource', presenter=None, debug=False): context = ConsumptionContext() context.loading.loader_source = import_fullname(loader_source)() context.reading.reader_source = import_fullname(reader_source)() context.presentation.location = UriLocation(uri) if isinstance(uri, basestring) else uri context.presentation.presenter_source = import_fullname(presenter_source)() context.presentation.presenter_class = import_fullname(presenter) context.presentation.print_exceptions = debug return context def create_consumer(context, consumer_class_name): consumer = ConsumerChain(context, (Read, Validate)) dumper = None if consumer_class_name == 'validate': dumper = None elif consumer_class_name == 'presentation': dumper = consumer.consumers[0] elif consumer_class_name == 'template': consumer.append(ServiceTemplate) elif consumer_class_name == 'types': consumer.append(ServiceTemplate, Types) elif consumer_class_name == 'instance': consumer.append(ServiceTemplate, Inputs, ServiceInstance) else: consumer.append(ServiceTemplate, Inputs, ServiceInstance) consumer.append(import_fullname(consumer_class_name)) if dumper is None: # Default to last consumer dumper = consumer.consumers[-1] return consumer, dumper