def _collect_app_config(cls, config, filename): # Collect raster layers names raster = [ Message(None, raster_layer, None, [], "", "", (filename, "raster/{}".format(raster_layer))) for raster_layer in list(config["vars"].get("raster", {}).keys()) ] # Collect layers enum values (for filters) settings = get_config("config.yaml") from c2cgeoportal.pyramid_ import init_dbsessions init_dbsessions(settings) from c2cgeoportal.models import DBSessions from c2cgeoportal.views.layers import Layers enums = [] enum_layers = config["vars"].get("layers", {}).get("enum", {}) for layername in list(enum_layers.keys()): layerinfos = enum_layers.get(layername, {}) attributes = layerinfos.get("attributes", {}) for fieldname in list(attributes.keys()): values = cls._enumerate_attributes_values( DBSessions, Layers, layerinfos, fieldname) for value, in values: if value != "": msgid = value if isinstance(value, str) else value location = "/layers/{}/values/{}/{}".format( layername, fieldname, value.encode("ascii", errors="replace") if isinstance(value, str) else value) enums.append( Message(None, msgid, None, [], "", "", (filename, location))) return raster + enums
def __call__(self, filename, options): messages = [] self.env = bootstrap(filename) with open("project.yaml") as f: self.package = yaml.load(f) self.config = get_config(".build/config.yaml") try: from c2cgeoportal.models import DBSession, Theme, LayerGroup, \ LayerWMS, LayerWMTS, FullTextSearch self._import(Theme, messages) self._import(LayerGroup, messages) self._import(LayerWMS, messages, self._import_layer_wms) self._import(LayerWMTS, messages, self._import_layer_wmts) except ProgrammingError as e: print(colorize( "ERROR: The database is probably not up to date " "(should be ignored when happen during the upgrade)", RED )) print(colorize(e, RED)) for ln, in DBSession.query(FullTextSearch.layer_name).distinct().all(): if ln is not None and ln != "": messages.append(Message( None, ln, None, [], u"", u"", ("fts", ln.encode("ascii", errors="replace")) )) return messages
def __init__(self): super().__init__() self.config = get_config("geoportal/config.yaml") if os.path.exists("geoportal/config.yaml") else None if os.path.exists("project.yaml"): with open("project.yaml") as f: self.package = yaml.safe_load(f) else: self.package = None
def test_get_config(self): from c2c.template import get_config os.environ['AA'] = '11' os.environ['BB_CC'] = '22_33' os.environ['DD_EE'] = '44_55' config = get_config('c2c/tests/config.yaml') self.assertEquals(config['aa'], '11') self.assertEquals(config['bb']['cc'], '22_33') self.assertEquals(config['dd.ee'], '44_55')
def __call__(self, filename, options): messages = [] try: self.env = bootstrap(filename) with open("project.yaml") as f: self.package = yaml.safe_load(f) self.config = get_config("config.yaml") try: from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import Theme, LayerGroup, \ LayerWMS, LayerWMTS, FullTextSearch self._import(Theme, messages) self._import(LayerGroup, messages) self._import(LayerWMS, messages, self._import_layer_wms) self._import(LayerWMTS, messages, self._import_layer_wmts) for ln, in DBSession.query( FullTextSearch.layer_name).distinct().all(): if ln is not None and ln != "": messages.append( Message( None, ln, None, [], "", "", ("fts", ln.encode("ascii", errors="replace")))) except ProgrammingError as e: print( colorize( "ERROR! The database is probably not up to date " "(should be ignored when happen during the upgrade)", RED)) print(colorize(e, RED)) if os.environ.get("IGNORE_I18N_ERRORS", "FALSE") != "TRUE": raise except NoSuchTableError as e: print( colorize( "ERROR! The schema didn't seem to exists " "(should be ignored when happen during the deploy)", RED)) print(colorize(e, RED)) if os.environ.get("IGNORE_I18N_ERRORS", "FALSE") != "TRUE": raise except OperationalError as e: print( colorize( "ERROR! The database didn't seem to exists " "(should be ignored when happen during the deploy)", RED)) print(colorize(e, RED)) if os.environ.get("IGNORE_I18N_ERRORS", "FALSE") != "TRUE": raise return messages
def __init__(self, options): self.options = options self.imported = set() settings = get_config("geoportal/config.yaml") package = settings["package"] self.fts_languages = settings["fulltextsearch"]["languages"] self.languages = settings["available_locale_names"] # must be done only once we have loaded the project config from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import FullTextSearch, Interface, Theme, Role self.session = DBSession() self.session.execute(FullTextSearch.__table__.delete().where( FullTextSearch.from_theme == True)) # noqa self._ = {} for lang in self.languages: self._[lang] = translation( "{}_geoportal-client".format(package), os.path.join("geoportal", "{}_geoportal".format(package), "locale/"), [lang]) query = self.session.query(Interface) if options.interfaces is not None: query = query.filter(Interface.name.in_(options.interfaces)) self.interfaces = query.all() self.public_theme = {} self.public_group = {} for interface in self.interfaces: self.public_theme[interface.id] = [] self.public_group[interface.id] = [] for theme in self.session.query(Theme).filter_by(public=True).all(): self._add_theme(theme) for role in self.session.query(Role).all(): for theme in self.session.query(Theme).all(): self._add_theme(theme, role) transaction.commit()
def __init__(self, options): self.options = options self.imported = set() settings = get_config("config.yaml") package = settings["package"] self.fts_languages = settings["fulltextsearch"]["languages"] self.languages = settings["available_locale_names"] # must be done only once we have loaded the project config from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import FullTextSearch, Interface, Theme, Role self.session = DBSession() self.session.execute(FullTextSearch.__table__.delete().where(FullTextSearch.from_theme == True)) # noqa self._ = {} for lang in self.languages: self._[lang] = translation( "{}-client".format(package), os.path.join(package, "locale/"), [lang]) query = self.session.query(Interface) if options.interfaces is not None: query = query.filter( Interface.name.in_(options.interfaces) ) self.interfaces = query.all() self.public_theme = {} self.public_group = {} for interface in self.interfaces: self.public_theme[interface.id] = [] self.public_group[interface.id] = [] for theme in self.session.query(Theme).filter_by(public=True).all(): self._add_theme(theme) for role in self.session.query(Role).all(): for theme in self.session.query(Theme).all(): self._add_theme(theme, role) transaction.commit()
def _collect_app_config(self, filename): settings = get_config(filename) # Collect raster layers names raster = [ Message( None, raster_layer, None, [], "", "", (filename, "raster/{}".format(raster_layer)) ) for raster_layer in list(settings.get("raster", {}).keys()) ] # Collect layers enum values (for filters) class R: settings = None class C: registry = R() config = C() config.registry.settings = settings from c2cgeoportal_commons import models models.init_dbsessions(settings, config) from c2cgeoportal_geoportal.views.layers import Layers enums = [] enum_layers = settings.get("layers", {}).get("enum", {}) for layername in list(enum_layers.keys()): layerinfos = enum_layers.get(layername, {}) attributes = layerinfos.get("attributes", {}) for fieldname in list(attributes.keys()): values = self._enumerate_attributes_values(models.DBSessions, Layers, layerinfos, fieldname) for value, in values: if value != "": msgid = value if isinstance(value, str) else value location = "/layers/{}/values/{}/{}".format( layername, fieldname, value.encode("ascii", errors="replace") if isinstance(value, str) else value) enums.append(Message(None, msgid, None, [], "", "", (filename, location))) return raster + enums
def __call__(self, filename, options): messages = [] self.env = bootstrap(filename) with open("project.yaml") as f: self.package = yaml.load(f) self.config = get_config(".build/config.yaml") try: from c2cgeoportal.models import Theme, LayerGroup, \ LayerWMS, LayerWMTS self._import(Theme, messages) self._import(LayerGroup, messages) self._import(LayerWMS, messages, self._import_layer_wms) self._import(LayerWMTS, messages, self._import_layer_wmts) except ProgrammingError as e: print(colorize("ERROR: The database is probably not up to date", RED)) print(colorize(e, RED)) return messages
def __call__(self, filename, options): messages = [] self.env = bootstrap(filename) with open("project.yaml") as f: self.package = yaml.load(f) self.config = get_config(".build/config.yaml") try: from c2cgeoportal.models import Theme, LayerGroup, \ LayerWMS, LayerWMTS self._import(Theme, messages) self._import(LayerGroup, messages) self._import(LayerWMS, messages, self._import_layer_wms) self._import(LayerWMTS, messages, self._import_layer_wmts) except ProgrammingError as e: print( colorize( "ERROR: The database is probably not up to date " "(should be ignored when happen during the upgrade)", RED)) print(colorize(e, RED)) return messages
def __call__(self, filename, options): config = get_config("config.yaml") class Registry: settings = config class Request: registry = Registry() params = {} GET = {} user_agent = "" @staticmethod def static_url(*args, **kwargs): return "" @staticmethod def static_path(*args, **kwargs): return "" @staticmethod def route_url(*args, **kwargs): return "" @staticmethod def current_route_url(*args, **kwargs): return "" init_region({"backend": "dogpile.cache.memory"}) int_filename = filename if re.match( "^" + re.escape("./{}/templates".format(config["package"])), filename): try: empty_template = Template("") class Lookup(TemplateLookup): @staticmethod def get_template(uri): return empty_template class MyTemplate(MakoTemplate): def prepare(self, **options): options.update({"input_encoding": self.encoding}) lookup = Lookup(**options) if self.source: self.tpl = Template(self.source, lookup=lookup, **options) else: self.tpl = Template(uri=self.name, filename=self.filename, lookup=lookup, **options) try: processed = template(filename, { "request": Request(), "lang": "fr", "debug": False, "extra_params": {}, "permalink_themes": "", "fulltextsearch_groups": [], "wfs_types": [], "_": lambda x: x, }, template_adapter=MyTemplate) int_filename = os.path.join( os.path.dirname(filename), "_" + os.path.basename(filename)) with open(int_filename, "wb") as file_open: file_open.write(processed.encode("utf-8")) except: print( colorize( "ERROR! Occurred during the '{}' template generation" .format(filename), RED)) print(colorize(traceback.format_exc(), RED)) if os.environ.get("IGNORE_I18N_ERRORS", "FALSE") == "TRUE": # Continue with the original one int_filename = filename else: raise except: print(traceback.format_exc()) message_str = subprocess.check_output( ["node", "tools/extract-messages.js", int_filename]).decode("utf-8") if int_filename != filename: os.unlink(int_filename) try: messages = [] for contexts, message in loads(message_str): for context in contexts.split(", "): messages.append( Message(None, message, None, [], "", "", context.split(":"))) return messages except: print(colorize("An error occurred", RED)) print(colorize(message_str, RED)) print("------") raise
def __call__(self, filename, options): config = get_config(".build/config.yaml") class Registry: settings = config class Request: registry = Registry() params = {} GET = {} user_agent = "" def static_url(*args, **kwargs): return "" def static_path(*args, **kwargs): return "" def route_url(*args, **kwargs): return "" def current_route_url(*args, **kwargs): return "" init_region({"backend": "dogpile.cache.memory"}) int_filename = filename if re.match("^" + re.escape("./{}/templates".format(config["package"])), filename): try: empty_template = Template("") class Lookup(TemplateLookup): @staticmethod def get_template(uri): return empty_template class MyTemplate(MakoTemplate): def prepare(self, **options): options.update({"input_encoding": self.encoding}) lookup = Lookup(**options) if self.source: self.tpl = Template(self.source, lookup=lookup, **options) else: self.tpl = Template( uri=self.name, filename=self.filename, lookup=lookup, **options) processed = template( filename, { "request": Request(), "lang": "fr", "debug": False, "extra_params": {}, "permalink_themes": "", "fulltextsearch_groups": [], "wfs_types": [], "_": lambda x: x, }, template_adapter=MyTemplate ) int_filename = os.path.join(os.path.dirname(filename), "_" + os.path.basename(filename)) with open(int_filename, "wb") as file_open: file_open.write(processed.encode("utf-8")) except: print(traceback.format_exc()) message_str = subprocess.check_output(["node", "tools/extract-messages.js", int_filename]) if int_filename != filename: os.unlink(int_filename) try: messages = [] for contexts, message in loads(message_str): for context in contexts.split(", "): messages.append(Message( None, message, None, [], u"", u"", context.split(":") )) return messages except: print(colorize("An error occurred", RED)) print(colorize(message_str, RED)) print("------") raise
def __init__(self): super().__init__() self.config = get_config("geoportal/config.yaml") if os.path.exists("geoportal/config.yaml") else None