class BaseAttr(db.Model): __abstract__ = True __table_args__ = {"schema": "attrs"} id = db.Column(db.String(10), primary_key=True) name = db.Column(db.String()) HEADERS = ["id", "name"] median_moe = 0 @classmethod def get_supported_levels(cls): return {} def serialize(self): return { key: val for key, val in self.__dict__.items() if not key.startswith("_") } def data_serialize(self): return [self.id, self.name] def __repr__(self): return '<{}, id: {}, name: {}>'.format(self.__class__, self.id, self.name) @staticmethod def is_attr(): return True
class PovertyGeo(JoinableAttr, BaseModel): __tablename__ = 'poverty_geo' iso3 = db.Column(db.String) poverty_geo_parent_name = db.Column(db.String) poverty_geo = db.Column(db.String, primary_key=True) poverty_geo_name = db.Column(db.String) @classmethod def get_supported_levels(cls): return {"poverty_geo": ['all', 'adm0', 'adm1']}
class DHSGeo(JoinableAttr, BaseModel): __tablename__ = 'dhs_geo' dhs_geo = db.Column(db.String, primary_key=True) dhs_geo_name = db.Column(db.String) regcode = db.Column(db.String) iso2 = db.Column(db.String) start_year = db.Column(db.Integer) dhs_geo_parent_name = column_property( select([Geo.name]).where(and_(Geo.iso2 == iso2, Geo.level == 'adm0')))
class Survey_Yg(BasePoverty): __tablename__ = "survey_yg" median_moe = 1 year = db.Column(db.Integer(), primary_key=True) poverty_geo = db.Column(db.String(), primary_key=True) geo = column_property(PovertyXWalk.geo) gini = db.Column(db.Float) totpop = db.Column(db.Float) url_name = column_property( select([Geo.url_name]) .where(and_(poverty_geo == PovertyXWalk.poverty_geo, Geo.id == PovertyXWalk.geo)).limit(1) )
class Survey_Ygl(BasePoverty, PovertyValues): __tablename__ = "survey_ygl" median_moe = 2 year = db.Column(db.Integer(), primary_key=True) poverty_geo = db.Column(db.String(), primary_key=True) poverty_level = db.Column(db.String(), primary_key=True) geo = column_property(PovertyXWalk.geo) @classmethod def get_supported_levels(cls): base_levels = super(Survey_Ygl, cls).get_supported_levels() return dict(base_levels, **{POVERTY_LEVEL: [ALL, PPP1, PPP2]})
class Conditions(BaseDHS): __tablename__ = "conditions" median_moe = 1 year = db.Column(db.Integer, primary_key=True) dhs_geo = db.Column(db.String, primary_key=True) condition = db.Column(db.String, primary_key=True) severity = db.Column(db.String, primary_key=True) geo = column_property(DHSXWalk.geo) proportion_of_children = db.Column(db.Float) url_name = column_property( select([Geo.url_name]).where( and_(dhs_geo == DHSXWalk.dhs_geo, Geo.id == DHSXWalk.geo)).limit(1))
class Survey_Ygg(BasePoverty): __tablename__ = "survey_ygg" median_moe = 2 year = db.Column(db.Integer(), primary_key=True) gender = db.Column(db.String(), primary_key=True) poverty_geo = db.Column(db.String(), primary_key=True) geo = column_property(PovertyXWalk.geo) gini = db.Column(db.Float) totpop = db.Column(db.Float) @classmethod def get_supported_levels(cls): base_levels = super(Survey_Ygg, cls).get_supported_levels() return dict(base_levels, **{GENDER: [ALL, MALE, FEMALE]})
class Survey_Ygr(BasePoverty): __tablename__ = "survey_ygr" median_moe = 2 year = db.Column(db.Integer(), primary_key=True) residence = db.Column(db.String(), primary_key=True) poverty_geo = db.Column(db.String(), primary_key=True) geo = column_property(PovertyXWalk.geo) gini = db.Column(db.Float) totpop = db.Column(db.Float) @classmethod def get_supported_levels(cls): base_levels = super(Survey_Ygr, cls).get_supported_levels() return dict(base_levels, **{RESIDENCE: [ALL, URBAN, RURAL]})
class Rainfall(BaseClimate): __tablename__ = "rainfall" median_moe = 0 year = db.Column(db.Integer, primary_key=True) geo = db.Column(db.String(), primary_key=True) start_year = db.Column(db.Integer) cropland_total_ha = db.Column(db.Float) rainfall_awa_mm = db.Column(db.Float) cropland_rainfallCVgt20pct_pct = db.Column(db.Float) cropland_rainfallCVgt20pct_ha = db.Column(db.Float) cropland_rainfallCVgt30pct_pct = db.Column(db.Float) cropland_rainfallCVgt30pct_ha = db.Column(db.Float)
class Geo(BaseAttr, ImageAttr, BaseModel): __tablename__ = 'geo' adm0_id = db.Column(db.Integer) adm1_id = db.Column(db.Integer) iso3 = db.Column(db.String) iso2 = db.Column(db.String) level = db.Column(db.String) url_name = db.Column(db.String) parent_name = db.Column(db.String) geo = db.Column(db.String, primary_key=True) def child_filter(self, tbl): if self.id.startswith("040"): target = '050AF' + self.id[5:] return tbl.geo.startswith(target) return True
class Crop(BaseAttr, BaseModel): __tablename__ = 'crop' median_moe = 0 parent = db.Column(db.String) children = db.Column(postgresql.ARRAY(db.String)) internal_id = db.Column(db.Integer) crop = db.Column(db.String()) crop_parent = db.Column(db.String()) crop_name = db.Column(db.String()) @classmethod def get_supported_levels(cls): return {"crop": ['all', 'lowest']}
class ConditionsGender(BaseDHS): __tablename__ = "conditions_gender" median_moe = 2 year = db.Column(db.Integer, primary_key=True) dhs_geo = db.Column(db.String, primary_key=True) condition = db.Column(db.String, primary_key=True) severity = db.Column(db.String, primary_key=True) gender = db.Column(db.String, primary_key=True) proportion_of_children = db.Column(db.Float) geo = column_property(DHSXWalk.geo) url_name = column_property( select([Geo.url_name]).where( and_(dhs_geo == DHSXWalk.dhs_geo, Geo.id == DHSXWalk.geo)).limit(1)) @classmethod def get_supported_levels(cls): base_levels = super(ConditionsGender, cls).get_supported_levels() return dict(base_levels, **{GENDER: [ALL, MALE, FEMALE]})
class ConditionsResidence(BaseDHS): __tablename__ = "conditions_residence" median_moe = 2 year = db.Column(db.Integer, primary_key=True) dhs_geo = db.Column(db.String, primary_key=True) condition = db.Column(db.String, primary_key=True) severity = db.Column(db.String, primary_key=True) residence = db.Column(db.String, primary_key=True) geo = column_property(DHSXWalk.geo) proportion_of_children = db.Column(db.Float) url_name = column_property( select([Geo.url_name]).where( and_(dhs_geo == DHSXWalk.dhs_geo, Geo.id == DHSXWalk.geo)).limit(1)) @classmethod def get_supported_levels(cls): base_levels = super(ConditionsResidence, cls).get_supported_levels() return dict(base_levels, **{RESIDENCE: [ALL, URBAN, RURAL]})
def water_supply(cls): return db.Column(db.String(), primary_key=True)
class HarvestedAreaBySupply(WaterSupply): __tablename__ = "area_by_supply" median_moe = 2 harvested_area = db.Column(db.Integer())
class ValueOfProduction(BaseCell5M): __tablename__ = "value" median_moe = 1 value_of_production = db.Column(db.Integer())
def year(cls): return db.Column(db.Integer(), primary_key=True)
class PovertyValues(db.Model): __abstract__ = True sevpov = db.Column(db.Float) povgap = db.Column(db.Float) hc = db.Column(db.Float) num = db.Column(db.Float)
def geo(cls): return db.Column(db.String(), db.ForeignKey(Geo.id), primary_key=True)
class HarvestedArea(BaseCell5M): __tablename__ = "area" median_moe = 1 harvested_area = db.Column(db.Integer())
def crop(cls): return db.Column(db.String(), db.ForeignKey(Crop.id), primary_key=True)
class ImageAttr(db.Model): __abstract__ = True image_link = db.Column(db.String) image_author = db.Column(db.String)
class ValueOfProductionBySupply(WaterSupply): __tablename__ = "value_by_supply" median_moe = 2 value_of_production = db.Column(db.Integer())