Add basic database structure

This commit is contained in:
Ethan Paul 2022-02-07 22:49:38 -05:00
parent 6e1bd3191a
commit bbcfc30126
No known key found for this signature in database
GPG Key ID: 6A337337DF6B5B1A
2 changed files with 329 additions and 0 deletions

270
section7/constants.py Normal file
View File

@ -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 = "´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"

59
section7/database.py Normal file
View File

@ -0,0 +1,59 @@
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)
years_experience = peewee.IntegerField(null=True)
years_at_company = peewee.IntegerField(null=True)