From 190f448b8e6734889613a1b4a25ebbb8b7ca1196 Mon Sep 17 00:00:00 2001 From: Ethan Paul Date: Mon, 7 Feb 2022 22:49:38 -0500 Subject: [PATCH] Add basic database structure --- section7/constants.py | 270 ++++++++++++++++++++++++++++++++++++++++++ section7/database.py | 60 ++++++++++ 2 files changed, 330 insertions(+) create mode 100644 section7/constants.py create mode 100644 section7/database.py diff --git a/section7/constants.py b/section7/constants.py new file mode 100644 index 0000000..da94e78 --- /dev/null +++ b/section7/constants.py @@ -0,0 +1,270 @@ +import enum + + +class PayRate(enum.Enum): + ANNUALY = enum.auto() + QUARTERLY = enum.auto() + MONTHLY = enum.auto() + WEEKLY = enum.auto() + DAILY = enum.auto() + HOURLY = enum.auto() + OTHER = enum.auto() + + +class Industry(enum.Enum): + pass + + +class Currency(enum.Enum): + pass + + +class Country(enum.Enum): + AF = "Afghanistan" + AX = "Åland Islands" + AL = "Albania" + DZ = "Algeria" + AS = "American Samoa" + AD = "Andorra" + AO = "Angola" + AI = "Anguilla" + AQ = "Antarctica" + AG = "Antigua and Barbuda" + AR = "Argentina" + AM = "Armenia" + AW = "Aruba" + AU = "Australia" + AT = "Austria" + AZ = "Azerbaijan" + BS = "Bahamas" + BH = "Bahrain" + BD = "Bangladesh" + BB = "Barbados" + BY = "Belarus" + BE = "Belgium" + BZ = "Belize" + BJ = "Benin" + BM = "Bermuda" + BT = "Bhutan" + BO = "Plurinational State of Bolivia" + BQ = "Sint Eustatius and Saba Bonaire" + BA = "Bosnia and Herzegovina" + BW = "Botswana" + BV = "Bouvet Island" + BR = "Brazil" + IO = "British Indian Ocean Territory" + BN = "Brunei Darussalam" + BG = "Bulgaria" + BF = "Burkina Faso" + BI = "Burundi" + KH = "Cambodia" + CM = "Cameroon" + CA = "Canada" + CV = "Cape Verde" + KY = "Cayman Islands" + CF = "Central African Republic" + TD = "Chad" + CL = "Chile" + CN = "China" + CX = "Christmas Island" + CC = "Cocos (Keeling) Islands" + CO = "Colombia" + KM = "Comoros" + CG = "Congo" + CD = "the Democratic Republic of the Congo" + CK = "Cook Islands" + CR = "Costa Rica" + CI = "Côte d'Ivoire" + HR = "Croatia" + CU = "Cuba" + CW = "Curaçao" + CY = "Cyprus" + CZ = "Czech Republic" + DK = "Denmark" + DJ = "Djibouti" + DM = "Dominica" + DO = "Dominican Republic" + EC = "Ecuador" + EG = "Egypt" + SV = "El Salvador" + GQ = "Equatorial Guinea" + ER = "Eritrea" + EE = "Estonia" + ET = "Ethiopia" + FK = "Falkland Islands (Malvinas)" + FO = "Faroe Islands" + FJ = "Fiji" + FI = "Finland" + FR = "France" + GF = "French Guiana" + PF = "French Polynesia" + TF = "French Southern Territories" + GA = "Gabon" + GM = "Gambia" + GE = "Georgia" + DE = "Germany" + GH = "Ghana" + GI = "Gibraltar" + GR = "Greece" + GL = "Greenland" + GD = "Grenada" + GP = "Guadeloupe" + GU = "Guam" + GT = "Guatemala" + GG = "Guernsey" + GN = "Guinea" + GW = "Guinea-Bissau" + GY = "Guyana" + HT = "Haiti" + HM = "Heard Island and McDonald Islands" + VA = "Holy See (Vatican City State)" + HN = "Honduras" + HK = "Hong Kong" + HU = "Hungary" + IS = "Iceland" + IN = "India" + ID = "Indonesia" + IR = "Islamic Republic of Iran" + IQ = "Iraq" + IE = "Ireland" + IM = "Isle of Man" + IL = "Israel" + IT = "Italy" + JM = "Jamaica" + JP = "Japan" + JE = "Jersey" + JO = "Jordan" + KZ = "Kazakhstan" + KE = "Kenya" + KI = "Kiribati" + KP = "Democratic People's Republic of Korea" + KR = "Republic of Korea" + KW = "Kuwait" + KG = "Kyrgyzstan" + LA = "Lao People's Democratic Republic" + LV = "Latvia" + LB = "Lebanon" + LS = "Lesotho" + LR = "Liberia" + LY = "Libya" + LI = "Liechtenstein" + LT = "Lithuania" + LU = "Luxembourg" + MO = "Macao" + MK = "the Former Yugoslav Republic of Macedonia" + MG = "Madagascar" + MW = "Malawi" + MY = "Malaysia" + MV = "Maldives" + ML = "Mali" + MT = "Malta" + MH = "Marshall Islands" + MQ = "Martinique" + MR = "Mauritania" + MU = "Mauritius" + YT = "Mayotte" + MX = "Mexico" + FM = "Federated States of Micronesia" + MD = "Republic of Moldova" + MC = "Monaco" + MN = "Mongolia" + ME = "Montenegro" + MS = "Montserrat" + MA = "Morocco" + MZ = "Mozambique" + MM = "Myanmar" + NA = "Namibia" + NR = "Nauru" + NP = "Nepal" + NL = "Netherlands" + NC = "New Caledonia" + NZ = "New Zealand" + NI = "Nicaragua" + NE = "Niger" + NG = "Nigeria" + NU = "Niue" + NF = "Norfolk Island" + MP = "Northern Mariana Islands" + NO = "Norway" + OM = "Oman" + PK = "Pakistan" + PW = "Palau" + PS = "State of Palestine" + PA = "Panama" + PG = "Papua New Guinea" + PY = "Paraguay" + PE = "Peru" + PH = "Philippines" + PN = "Pitcairn" + PL = "Poland" + PT = "Portugal" + PR = "Puerto Rico" + QA = "Qatar" + RE = "Réunion" + RO = "Romania" + RU = "Russian Federation" + RW = "Rwanda" + BL = "Saint Barthélemy" + SH = "Ascension and Tristan da Cunha Saint Helena" + KN = "Saint Kitts and Nevis" + LC = "Saint Lucia" + MF = "Saint Martin (French part)" + PM = "Saint Pierre and Miquelon" + VC = "Saint Vincent and the Grenadines" + WS = "Samoa" + SM = "San Marino" + ST = "Sao Tome and Principe" + SA = "Saudi Arabia" + SN = "Senegal" + RS = "Serbia" + SC = "Seychelles" + SL = "Sierra Leone" + SG = "Singapore" + SX = "Sint Maarten (Dutch part)" + SK = "Slovakia" + SI = "Slovenia" + SB = "Solomon Islands" + SO = "Somalia" + ZA = "South Africa" + GS = "South Georgia and the South Sandwich Islands" + SS = "South Sudan" + ES = "Spain" + LK = "Sri Lanka" + SD = "Sudan" + SR = "Suriname" + SJ = "Svalbard and Jan Mayen" + SZ = "Swaziland" + SE = "Sweden" + CH = "Switzerland" + SY = "Syrian Arab Republic" + TW = "Province of China Taiwan" + TJ = "Tajikistan" + TZ = "United Republic of Tanzania" + TH = "Thailand" + TL = "Timor-Leste" + TG = "Togo" + TK = "Tokelau" + TO = "Tonga" + TT = "Trinidad and Tobago" + TN = "Tunisia" + TR = "Turkey" + TM = "Turkmenistan" + TC = "Turks and Caicos Islands" + TV = "Tuvalu" + UG = "Uganda" + UA = "Ukraine" + AE = "United Arab Emirates" + GB = "United Kingdom" + US = "United States" + UM = "United States Minor Outlying Islands" + UY = "Uruguay" + UZ = "Uzbekistan" + VU = "Vanuatu" + VE = "Bolivarian Republic of Venezuela" + VN = "Viet Nam" + VG = "British Virgin Islands" + VI = "U.S. Virgin Islands" + WF = "Wallis and Futuna" + EH = "Western Sahara" + YE = "Yemen" + ZM = "Zambia" diff --git a/section7/database.py b/section7/database.py new file mode 100644 index 0000000..f904522 --- /dev/null +++ b/section7/database.py @@ -0,0 +1,60 @@ +import datetime +import uuid + +import peewee +import peewee_plus + +from section7 import constants + + +INTERFACE = peewee.DatabaseProxy() + + +class Section7Model(peewee.Model): + """Base model for defining common fields and attaching database""" + + class Meta: # pylint: disable=too-few-public-methods,missing-class-docstring + database = INTERFACE + + uuid = peewee.UUIDField(null=False, unique=True, default=uuid.uuid4) + created = peewee.DateTimeField(null=False, default=datetime.datetime.utcnow) + + +class DisclosureRecord(Section7Model): + """Record of a user submitted payment disclosure + + :param value: The monetary value of the compensation + :param currency: The currency the value is represented in + :param rate: The rate that the compensation is assigned + :param additionals: Mapping of additional, user defined, compensation details + :param recipients: List of email addresses that should receive the compensation disclosure + :param publish: Whether the record should be published in the publicly available dataset + :param age: Optional age of the user + :param gender: Optional gender of the user + :param race: Optional race of the user + :param country: Optional country where the user's job is located + :param city: Optional city where the user's job is located + :param industry: Optional industry that the user works in + :param title: Optional job title of the user's job + :param company: Optional company the user works at + :param years_experience: Optional number of years the user has worked in the inudstry + :param years_at_company: Optional number of years the user has worked at the company + """ + + value = peewee.DecimalField(max_digits=20, decimal_places=3) + currency = peewee_plus.EnumField(constants.Currency) + rate = peewee_plus.EnumField(constants.PayRate) + additionals = peewee_plus.JSONField(default={}) + recipients = peewee_plus.JSONField(default=[]) + publish = peewee.BooleanField() + + age = peewee.IntegerField(null=True) + gender = peewee.CharField(null=True) + race = peewee.CharField(null=True) + country = peewee_plus.EnumField(constants.Country, null=True) + city = peewee.CharField(null=True) + industry = peewee_plus.EnumField(constants.Industry, null=True) + title = peewee.CharField(null=True) + company = peewee.CharField(null=True) + years_experience = peewee.IntegerField(null=True) + years_at_company = peewee.IntegerField(null=True)