Source code for epygram.extra.griberies.concepts
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) Météo France (2014-)
# This software is governed by the CeCILL-C license under French law.
# http://www.cecill.info
"""
A class for concepts handling.
"""
from .definitions.names import NamesGribDef
from .definitions.fa import FaGribDef
namesgribdef = NamesGribDef()
fagribdef = FaGribDef()
concepts = sorted(list(namesgribdef._concepts) + list(fagribdef._concepts))
[docs]
class Concept(object):
def __init__(self, concept):
self.concept = concept
if concept in fagribdef._concepts:
self.gribdef = fagribdef
else:
self.gribdef = namesgribdef
def what(self, fid, grib_edition, exact, format_as_dict=False):
self.header()
print()
fields = self.fields(fid, grib_edition, exact)
first = True
for f, fid in fields.items():
self.niceprint(f, fid, format_as_dict, headline=not first)
first = False
print()
def fields(self, fid, grib_edition, exact):
if self.concept == 'faFieldName':
if isinstance(fid, str):
if exact:
try:
fields = {fid:self.gribdef.FA2GRIB(fid, fatal=True,
grib_edition=grib_edition,
include_comments=True,
filter_non_GRIB_keys=False)}
except ValueError:
fields = {}
else:
fields = self.gribdef.lookup_FA(fid,
include_comments=True,
grib_edition=grib_edition,
filter_non_GRIB_keys=False)
else:
fields = self.gribdef.lookup_GRIB(fid,
include_comments=True,
filter_non_GRIB_keys=False)
else:
fields = self.gribdef._lookup(fid, self.concept,
grib_edition=grib_edition,
include_comments=True,
filter_non_GRIB_keys=False,
exact=exact)
return fields
def header(self):
print('{:-^80}'.format('| {} |'.format(self.concept)))
def niceprint(self, f, fid, format_as_dict=False, headline=True):
comment = fid.pop('#comment', None)
filtered_out = self.gribdef._filter_non_GRIB_keys(fid)
fprint = '> "{}"'.format(f)
if headline:
print('-' * len(fprint))
print(fprint)
print('=' * len(fprint))
if comment is not None:
print("# " + comment)
if format_as_dict:
print(fid)
else:
for k in sorted(fid.keys()):
print('{} = {}'.format(k, fid[k]))
for k in sorted(filtered_out.keys()):
print('({} = {})'.format(k, filtered_out[k]))