Esempio n. 1
0
File: utils.py Progetto: sonya/eea
class CodeTracker:
    def __init__(self, name):
        self.name = name
        self.table = SQLTable(
            "%s.%s" % (config.WIOD_SCHEMA, name),
            ["code", "description"],
            ["varchar(15)", "varchar(255)"])
        self.code_dict = None

    def setup(self):
        self.table.create()
        self.get_codes()

    # get existing codes from db
    def get_codes(self):
        if self.code_dict is None:
            self.code_dict = {}
        for (code, desc) in self.table.getall():
            self.code_dict[code] = desc

    def get_desc_for_code(self, code):
        if code in self.code_dict:
            return self.code_dict[code]
        return None

    # returns the code used if it was recognized, false otherwise
    def set_code(self, code, desc):
        if type(code) is str:
            code = code.strip()
        elif type(code) is float:
            code = str(int(code))

        if type(desc) is str:
            desc = desc.strip()

        if code is None or not len(code):
            if desc is None or not len(desc): # ignore empty args
                return False
            elif desc in config.fd_sectors: # choose manual codes
                code = config.fd_sectors[desc]
            elif desc in config.va_sectors: # choose manual codes
                code = config.va_sectors[desc]
            else:
                return False
        elif code in config.code_blacklist: # ignore invalid values for codes
            return False

        if code in self.code_dict and self.code_dict[code] != desc:
            print(self.code_dict[code], desc)
        self.code_dict[code] = desc

        return code

    def update_codes(self):
        self.table.truncate()
        for code in sorted(self.code_dict.keys()):
            desc = self.code_dict[code]
            self.table.insert([code, desc])
Esempio n. 2
0
    def __init__(self):
        self.gdp_deflators = {}
        self.pce_deflators = {}

        table = SQLTable(TABLE_NAME, ["year", "gdp", "pce"],
                         ["int", "float", "float"])
        result = table.getall()
        for row in result:
            year = row[0]
            self.gdp_deflators[year] = row[1]
            self.pce_deflators[year] = row[2]
Esempio n. 3
0
File: nipa.py Progetto: sonya/eea
    def __init__(self):
        self.gdp_deflators = {}
        self.pce_deflators = {}

        table = SQLTable(TABLE_NAME,
                         ["year", "gdp", "pce"],
                         ["int", "float", "float"])
        result = table.getall()
        for row in result:
            year = row[0]
            self.gdp_deflators[year] = row[1]
            self.pce_deflators[year] = row[2]
Esempio n. 4
0
class SectorCodes:
    def __init__(self, codetablename, mode="r"):
        self.mode = mode

        self.codetable = SQLTable(codetablename, ["code", "description"],
                                  ["varchar(15)", "varchar(255)"])

        self.code_dict = {}
        self.reverse_code_dict = {}

        self.setup()

    def setup(self):
        if self.mode == "w":
            # invalid codes or codes that we don't want to record
            self.code_blacklist = []

            # if we want to override the code provided with something
            # we make up (or from another set) based on the description
            self.manual_codes = {}

            self.codetable.create()

        # get existing codes from db
        for (code, desc) in self.codetable.getall():
            self.code_dict[code] = desc
            self.reverse_code_dict[desc] = code

        return self

    # for write mode
    def blacklist_code(self, code):
        self.code_blacklist.append(code)

        if code in self.code_dict:
            del self.code_dict[code]

    def set_blacklist(self, code_blacklist):
        self.code_blacklist = []
        for code in code_blacklist:
            self.blacklist_code(code)

    def curate_code_from_desc(self, desc, code):
        self.manual_codes[desc] = code

        self.code_dict[code] = desc
        self.reverse_code_dict[desc] = code

    def add_curated_codes(self, curated_codes):
        for (desc, code) in curated_codes.items():
            self.curate_code_from_desc(desc, code)

    # returns the code used if it was recognized, false otherwise
    def set_code(self, code, desc):
        if type(code) is str:
            code = code.strip()
        elif type(code) is float:
            code = str(int(code))

        if type(desc) is str:
            desc = desc.strip()

        if desc in self.manual_codes:
            code = self.manual_codes[desc]

        if code is None or not len(code):
            if desc is None or not len(desc):  # ignore empty args
                return False
            else:
                return False
        elif code in self.code_blacklist:
            return False

        if code in self.code_dict and self.code_dict[code] != desc:
            # this is to check for blatant differences
            print(self.code_dict[code], "=>", desc)
        self.code_dict[code] = desc

        # there may be more than one description for the same code
        self.reverse_code_dict[desc] = code

        return code

    def has_code(self, code):
        return code in self.code_dict

    def get_code_for_title(self, desc):
        if desc in self.reverse_code_dict:
            return self.reverse_code_dict[desc]

    def get_title_for_code(self, code):
        if self.has_code(code):
            return self.code_dict[code]
        return False

    def update_codes(self):
        if self.mode != "w":
            raise Exception("SectorCodes created in read-only mode")

        self.codetable.truncate()
        for code in sorted(self.code_dict.keys()):
            desc = self.code_dict[code]
            self.codetable.insert([code, desc])
Esempio n. 5
0
class SectorCodes:

    def __init__(self, codetablename, mode="r"):
        self.mode = mode

        self.codetable = SQLTable(
            codetablename,
            ["code", "description"],
            ["varchar(15)", "varchar(255)"])

        self.code_dict = {}
        self.reverse_code_dict = {}

        self.setup()

    def setup(self):
        if self.mode == "w":
            # invalid codes or codes that we don't want to record
            self.code_blacklist = []

            # if we want to override the code provided with something
            # we make up (or from another set) based on the description
            self.manual_codes = {}

            self.codetable.create()

        # get existing codes from db
        for (code, desc) in self.codetable.getall():
            self.code_dict[code] = desc
            self.reverse_code_dict[desc] = code

        return self

    # for write mode
    def blacklist_code(self, code):
        self.code_blacklist.append(code)

        if code in self.code_dict:
            del self.code_dict[code]

    def set_blacklist(self, code_blacklist):
        self.code_blacklist = []
        for code in code_blacklist:
            self.blacklist_code(code)

    def curate_code_from_desc(self, desc, code):
        self.manual_codes[desc] = code

        self.code_dict[code] = desc
        self.reverse_code_dict[desc] = code

    def add_curated_codes(self, curated_codes):
        for (desc, code) in curated_codes.items():
            self.curate_code_from_desc(desc, code)

    # returns the code used if it was recognized, false otherwise
    def set_code(self, code, desc):
        if type(code) is str:
            code = code.strip()
        elif type(code) is float:
            code = str(int(code))

        if type(desc) is str:
            desc = desc.strip()

        if desc in self.manual_codes:
            code = self.manual_codes[desc]

        if code is None or not len(code):
            if desc is None or not len(desc): # ignore empty args
                return False
            else:
                return False
        elif code in self.code_blacklist:
            return False

        if code in self.code_dict and self.code_dict[code] != desc:
            # this is to check for blatant differences
            print(self.code_dict[code], "=>", desc)
        self.code_dict[code] = desc

        # there may be more than one description for the same code
        self.reverse_code_dict[desc] = code

        return code

    def has_code(self, code):
        return code in self.code_dict

    def get_code_for_title(self, desc):
        if desc in self.reverse_code_dict:
            return self.reverse_code_dict[desc]

    def get_title_for_code(self, code):
        if self.has_code(code):
            return self.code_dict[code]
        return False

    def update_codes(self):
        if self.mode != "w":
            raise Exception("SectorCodes created in read-only mode")

        self.codetable.truncate()
        for code in sorted(self.code_dict.keys()):
            desc = self.code_dict[code]
            self.codetable.insert([code, desc])