diff options
| author | 2018-04-15 18:47:58 +0200 | |
|---|---|---|
| committer | 2018-04-15 17:47:58 +0100 | |
| commit | f5e7c358761ee49da45933e73b943fb1eb66c030 (patch) | |
| tree | cde9eed9f010caba22842d39af33385aae411a45 /pysite | |
| parent | Added an About category with Partners view (#1pv7h) (#50) (diff) | |
Initial data for tables and refactoring the dev-mode database handling to be similar to prod-mode. (#53)
* Changed the dev-mode logic to be the same as prod for creating new tables if they don't exist. Also added a new feature where a table can be initialized with data if you create a JSON file in the pysite/database/table_init/ folder and fill it with a list of dicts where each dict represents a row in your table. Included a hiphoppers json so that I can actually test if it works in production. It will only init the table if the table is empty.
* Not sure if this will solve it, but I think so.
* Renamed the tables and primary keys, and alphabetized the dict. Now complies with the gdudes holy wishes.
Diffstat (limited to 'pysite')
| -rw-r--r-- | pysite/__init__.py | 2 | ||||
| -rw-r--r-- | pysite/database.py | 70 | ||||
| -rw-r--r-- | pysite/database/table_init/hiphoppers.json | 1298 | ||||
| -rw-r--r-- | pysite/mixins.py | 4 | ||||
| -rw-r--r-- | pysite/views/api/bot/tags.py | 1 | ||||
| -rw-r--r-- | pysite/views/api/bot/user.py | 1 | ||||
| -rw-r--r-- | pysite/views/wiki/edit.py | 2 | ||||
| -rw-r--r-- | pysite/views/wiki/page.py | 2 | ||||
| -rw-r--r-- | pysite/views/wiki/source.py | 2 | 
9 files changed, 1362 insertions, 20 deletions
| diff --git a/pysite/__init__.py b/pysite/__init__.py index 3e11a776..82abf499 100644 --- a/pysite/__init__.py +++ b/pysite/__init__.py @@ -13,7 +13,7 @@ from pysite.logs import NonPicklingSocketHandler  # region Logging  # Get the log level from environment -log_level = os.environ.get("LOG_LEVEL", "info").upper() +log_level = os.environ.get("LOG_LEVEL", "debug").upper()  if hasattr(logging, log_level):      log_level = getattr(logging, log_level) diff --git a/pysite/database.py b/pysite/database.py index 82e1e84e..3ecdf53b 100644 --- a/pysite/database.py +++ b/pysite/database.py @@ -1,4 +1,5 @@  # coding=utf-8 +import json  import logging  import os  from typing import Any, Callable, Dict, Iterator, List, Optional, Union @@ -8,13 +9,16 @@ from flask import abort  from rethinkdb.ast import RqlMethodQuery, Table, UserError  from rethinkdb.net import DefaultConnection +from pysite.constants import DEBUG_MODE +  ALL_TABLES = {      # table: primary_key - +    "hiphopify": "user_id", +    "hiphopify_namelist": "name",      "oauth_data": "id",      "tags": "tag_name",      "users": "user_id", -    "wiki": "slug", +    "wiki": "slug"  } @@ -30,22 +34,74 @@ class RethinkDB:          if loop_type:              rethinkdb.set_loop_type(loop_type) -        with self.get_connection(connect_database=False) as conn: +        with self.get_connection() as self.conn:              try: -                rethinkdb.db_create(self.database).run(conn) +                rethinkdb.db_create(self.database).run(self.conn)                  self.log.debug(f"Database created: '{self.database}'")              except rethinkdb.RqlRuntimeError:                  self.log.debug(f"Database found: '{self.database}'") -    def create_tables(self) -> int: -        created = 0 +            if DEBUG_MODE: +                # Create any table that doesn't exist +                created = self.create_tables() +                if created: +                    tables = ", ".join([f"{table}" for table in created]) +                    self.log.debug(f"Created the following tables: {tables}") + +                # Init the tables that require initialization +                initialized = self.init_tables() +                if initialized: +                    tables = ", ".join([f"{table} ({count} items)" for table, count in initialized.items()]) +                    self.log.debug(f"Initialized the following tables: {tables}") + +    def create_tables(self) -> List[str]: +        """ +        Creates whichever tables exist in the ALL_TABLES +        constant if they don't already exist in the database. + +        :return: a list of the tables that were created. +        """ +        created = []          for table, primary_key in ALL_TABLES.items():              if self.create_table(table, primary_key): -                created += 1 +                created.append(table)          return created +    def init_tables(self) -> Dict[str, int]: +        """ +        If the table is empty, and there is a corresponding JSON file with data, +        then we fill the table with the data in the JSON file. + +        The JSON files are contained inside of pysite/database/table_init/ +        :return: +        """ + +        initialized = {} + +        for table, primary_key in ALL_TABLES.items(): + +            # If the table is empty +            if not self.pluck(table, primary_key): + +                # And a corresponding JSON file exists +                if os.path.isfile(f"pysite/database/table_init/{table}.json"): + +                    # Load in all the data in that file. +                    with open(f"pysite/database/table_init/{table}.json") as json_file: +                        table_data = json.load(json_file) + +                        for row in table_data: +                            self.insert( +                                table, +                                row +                            ) + +                    initialized[table] = len(table_data) + +        return initialized +      def get_connection(self, connect_database: bool = True) -> DefaultConnection:          """          Grab a connection to the RethinkDB server, optionally without selecting a database diff --git a/pysite/database/table_init/hiphoppers.json b/pysite/database/table_init/hiphoppers.json new file mode 100644 index 00000000..d408f5b3 --- /dev/null +++ b/pysite/database/table_init/hiphoppers.json @@ -0,0 +1,1298 @@ +[ +    {"hiphop_name": "100 Kila"}, +    {"hiphop_name": "100s"}, +    {"hiphop_name": "12 Gauge"}, +    {"hiphop_name": "2 Chainz"}, +    {"hiphop_name": "2 Pistols"}, +    {"hiphop_name": "2$ Fabo"}, +    {"hiphop_name": "21 Savage"}, +    {"hiphop_name": "2Mex"}, +    {"hiphop_name": "360"}, +    {"hiphop_name": "40 Glocc"}, +    {"hiphop_name": "50 Cent"}, +    {"hiphop_name": "6lack"}, +    {"hiphop_name": "6ix9ine"}, +    {"hiphop_name": "The 6th Letter"}, +    {"hiphop_name": "9th Wonder"}, +    {"hiphop_name": "Andre 3000"}, +    {"hiphop_name": "Big Boi"}, +    {"hiphop_name": "A.CHAL"}, +    {"hiphop_name": "A+"}, +    {"hiphop_name": "A-Q"}, +    {"hiphop_name": "Arabian Prince"}, +    {"hiphop_name": "Ab-Soul"}, +    {"hiphop_name": "A Boogie wit da Hoodie"}, +    {"hiphop_name": "Abstract Rude"}, +    {"hiphop_name": "Ace Hood"}, +    {"hiphop_name": "Aceyalone"}, +    {"hiphop_name": "Action Bronson"}, +    {"hiphop_name": "Adam Saleh"}, +    {"hiphop_name": "Aesop Rock"}, +    {"hiphop_name": "Afrika Bambaataa"}, +    {"hiphop_name": "Afroman"}, +    {"hiphop_name": "Afu-Ra"}, +    {"hiphop_name": "Agallah"}, +    {"hiphop_name": "Ahmad"}, +    {"hiphop_name": "Ajs Nigrutin"}, +    {"hiphop_name": "Akala"}, +    {"hiphop_name": "Akinyele"}, +    {"hiphop_name": "Akir"}, +    {"hiphop_name": "Akon"}, +    {"hiphop_name": "The Alchemist"}, +    {"hiphop_name": "Ali Vegas"}, +    {"hiphop_name": "Alpha"}, +    {"hiphop_name": "AMG"}, +    {"hiphop_name": "Amil"}, +    {"hiphop_name": "Aminé"}, +    {"hiphop_name": "Amir Obè"}, +    {"hiphop_name": "Ampichino"}, +    {"hiphop_name": "Anderson .Paak"}, +    {"hiphop_name": "André 3000"}, +    {"hiphop_name": "Andre Nickatina"}, +    {"hiphop_name": "Andy Mineo"}, +    {"hiphop_name": "Angel Haze"}, +    {"hiphop_name": "Angie Martinez"}, +    {"hiphop_name": "Ant"}, +    {"hiphop_name": "Ant Banks"}, +    {"hiphop_name": "Antoinette"}, +    {"hiphop_name": "Anybody Killa"}, +    {"hiphop_name": "Apache"}, +    {"hiphop_name": "Apathy"}, +    {"hiphop_name": "Arin Hanson"}, +    {"hiphop_name": "A$AP Ferg"}, +    {"hiphop_name": "A$AP Nast"}, +    {"hiphop_name": "A$AP Rocky"}, +    {"hiphop_name": "A$AP Yams"}, +    {"hiphop_name": "A$ton Matthews"}, +    {"hiphop_name": "Asher Roth"}, +    {"hiphop_name": "Astronautalis"}, +    {"hiphop_name": "Awol One"}, +    {"hiphop_name": "Awkwafina"}, +    {"hiphop_name": "AZ"}, +    {"hiphop_name": "Azealia Banks"}, +    {"hiphop_name": "Big Daddy Kane"}, +    {"hiphop_name": "Busta Rhymes"}, +    {"hiphop_name": "B-Legit"}, +    {"hiphop_name": "B-Real"}, +    {"hiphop_name": "B.G."}, +    {"hiphop_name": "B.G. Knocc Out"}, +    {"hiphop_name": "B.o.B"}, +    {"hiphop_name": "Baby Bash"}, +    {"hiphop_name": "Baby Boy da Prince"}, +    {"hiphop_name": "Baby D"}, +    {"hiphop_name": "Bad Azz"}, +    {"hiphop_name": "Badshah"}, +    {"hiphop_name": "Baeza"}, +    {"hiphop_name": "Bahamadia"}, +    {"hiphop_name": "Baka Not Nice"}, +    {"hiphop_name": "Bang Yong-guk"}, +    {"hiphop_name": "Bangladesh"}, +    {"hiphop_name": "Bas"}, +    {"hiphop_name": "Battlecat"}, +    {"hiphop_name": "Beanie Sigel"}, +    {"hiphop_name": "Becky G"}, +    {"hiphop_name": "Benny Blanco"}, +    {"hiphop_name": "Beenzino"}, +    {"hiphop_name": "Benzino"}, +    {"hiphop_name": "Big Boi"}, +    {"hiphop_name": "Big Daddy Kane"}, +    {"hiphop_name": "Big Ed"}, +    {"hiphop_name": "Big Gipp"}, +    {"hiphop_name": "Big Hawk"}, +    {"hiphop_name": "Big K.R.I.T."}, +    {"hiphop_name": "Big Kuntry King"}, +    {"hiphop_name": "Big L"}, +    {"hiphop_name": "Big Lurch"}, +    {"hiphop_name": "Big Mello"}, +    {"hiphop_name": "Big Mike"}, +    {"hiphop_name": "Big Moe"}, +    {"hiphop_name": "Big Noyd"}, +    {"hiphop_name": "Big Pokey"}, +    {"hiphop_name": "Big Pooh"}, +    {"hiphop_name": "Big Pun"}, +    {"hiphop_name": "Big Reese"}, +    {"hiphop_name": "Big Scoob"}, +    {"hiphop_name": "Big Smo"}, +    {"hiphop_name": "Big Sean"}, +    {"hiphop_name": "Big Shaq"}, +    {"hiphop_name": "Big Shug"}, +    {"hiphop_name": "Big Syke"}, +    {"hiphop_name": "Bigg D"}, +    {"hiphop_name": "Billy Woods"}, +    {"hiphop_name": "Birdman"}, +    {"hiphop_name": "Bishop Nehru"}, +    {"hiphop_name": "Biz Markie"}, +    {"hiphop_name": "Bizarre"}, +    {"hiphop_name": "Bugz"}, +    {"hiphop_name": "Bizzy"}, +    {"hiphop_name": "Bizzy Bone"}, +    {"hiphop_name": "BJ the Chicago Kid"}, +    {"hiphop_name": "Black Milk"}, +    {"hiphop_name": "Black Rob"}, +    {"hiphop_name": "Black Thought"}, +    {"hiphop_name": "Blade Icewood"}, +    {"hiphop_name": "Blaq Poet"}, +    {"hiphop_name": "Blaze Ya Dead Homie"}, +    {"hiphop_name": "BlocBoy JB"}, +    {"hiphop_name": "Blood Raw"}, +    {"hiphop_name": "Blu"}, +    {"hiphop_name": "Bob Doe"}, +    {"hiphop_name": "Bobby Brackins"}, +    {"hiphop_name": "Bobby Creekwater"}, +    {"hiphop_name": "Bobby Shmurda"}, +    {"hiphop_name": "Bohemia"}, +    {"hiphop_name": "Boi-1da"}, +    {"hiphop_name": "Boldy James"}, +    {"hiphop_name": "Bone Crusher"}, +    {"hiphop_name": "Bones"}, +    {"hiphop_name": "Booba"}, +    {"hiphop_name": "Boondox"}, +    {"hiphop_name": "Boosie Badazz"}, +    {"hiphop_name": "Boss"}, +    {"hiphop_name": "Bow Wow"}, +    {"hiphop_name": "Braille"}, +    {"hiphop_name": "Brandun DeShay"}, +    {"hiphop_name": "Brianna Perry"}, +    {"hiphop_name": "Brisco"}, +    {"hiphop_name": "Brotha Lynch Hung"}, +    {"hiphop_name": "Bruno Mars"}, +    {"hiphop_name": "Brother Ali"}, +    {"hiphop_name": "Bryson Tiller"}, +    {"hiphop_name": "Bubba Sparxxx"}, +    {"hiphop_name": "Buckshot"}, +    {"hiphop_name": "Buckwild"}, +    {"hiphop_name": "Bumpy Knuckles"}, +    {"hiphop_name": "Bun B"}, +    {"hiphop_name": "Busdriver"}, +    {"hiphop_name": "Bushwick Bill"}, +    {"hiphop_name": "Busta Rhymes"}, +    {"hiphop_name": "Busy Bee Starski"}, +    {"hiphop_name": "Butch Cassidy"}, +    {"hiphop_name": "Common"}, +    {"hiphop_name": "C-Bo"}, +    {"hiphop_name": "C-Murder"}, +    {"hiphop_name": "C-Note"}, +    {"hiphop_name": "C-Rayz Walz"}, +    {"hiphop_name": "Cage"}, +    {"hiphop_name": "Cam'ron"}, +    {"hiphop_name": "Canibus"}, +    {"hiphop_name": "Capital Steez"}, +    {"hiphop_name": "Capone"}, +    {"hiphop_name": "Cappadonna"}, +    {"hiphop_name": "Cardi B"}, +    {"hiphop_name": "Casey Veggies"}, +    {"hiphop_name": "Cash Out"}, +    {"hiphop_name": "Cashis"}, +    {"hiphop_name": "Caskey"}, +    {"hiphop_name": "Casper Nyovest"}, +    {"hiphop_name": "Cassidy"}, +    {"hiphop_name": "Cazwell"}, +    {"hiphop_name": "CeeLo Green"}, +    {"hiphop_name": "Cellski"}, +    {"hiphop_name": "Celly Cel"}, +    {"hiphop_name": "Celph Titled"}, +    {"hiphop_name": "Cesar Comanche"}, +    {"hiphop_name": "Ceza"}, +    {"hiphop_name": "Chamillionaire"}, +    {"hiphop_name": "Chance the Rapper"}, +    {"hiphop_name": "Chanel West Coast"}, +    {"hiphop_name": "Channel 7"}, +    {"hiphop_name": "Charizma"}, +    {"hiphop_name": "Charles Hamilton"}, +    {"hiphop_name": "Charli Baltimore"}, +    {"hiphop_name": "Chevy Woods"}, +    {"hiphop_name": "Chi Ali"}, +    {"hiphop_name": "Chali 2na"}, +    {"hiphop_name": "Chiddy Bang"}, +    {"hiphop_name": "Chief Keef"}, +    {"hiphop_name": "Childish Gambino"}, +    {"hiphop_name": "Chill Rob G"}, +    {"hiphop_name": "Chingy"}, +    {"hiphop_name": "Chingo Bling"}, +    {"hiphop_name": "Chino XL"}, +    {"hiphop_name": "Chinx"}, +    {"hiphop_name": "Chip"}, +    {"hiphop_name": "Choice"}, +    {"hiphop_name": "Choppa"}, +    {"hiphop_name": "Chris Brown"}, +    {"hiphop_name": "Chris Webby"}, +    {"hiphop_name": "Christopher Martin"}, +    {"hiphop_name": "Christopher Reid"}, +    {"hiphop_name": "Chubb Rock"}, +    {"hiphop_name": "CJ Fly"}, +    {"hiphop_name": "CL"}, +    {"hiphop_name": "CL Smooth"}, +    {"hiphop_name": "Classified"}, +    {"hiphop_name": "Clinton Sparks"}, +    {"hiphop_name": "Clyde Carson"}, +    {"hiphop_name": "Cold 187um"}, +    {"hiphop_name": "Common"}, +    {"hiphop_name": "Consequence"}, +    {"hiphop_name": "Cool Breeze"}, +    {"hiphop_name": "Cool C"}, +    {"hiphop_name": "Coolio"}, +    {"hiphop_name": "Copywrite"}, +    {"hiphop_name": "Cormega"}, +    {"hiphop_name": "Cory Gunz"}, +    {"hiphop_name": "Cordaro Stewart"}, +    {"hiphop_name": "Count Bass D"}, +    {"hiphop_name": "The Coup"}, +    {"hiphop_name": "Craig Mack"}, +    {"hiphop_name": "Crime Boss"}, +    {"hiphop_name": "Criminal Manne"}, +    {"hiphop_name": "Crooked I"}, +    {"hiphop_name": "Crucial Star"}, +    {"hiphop_name": "Cupcakke"}, +    {"hiphop_name": "Currensy"}, +    {"hiphop_name": "Curtiss King"}, +    {"hiphop_name": "Cyhi the Prynce"}, +    {"hiphop_name": "Del Tha Funkee Homosapien"}, +    {"hiphop_name": "Dr. Dre"}, +    {"hiphop_name": "D'Angelo"}, +    {"hiphop_name": "D'banj"}, +    {"hiphop_name": "D-Loc"}, +    {"hiphop_name": "D-Nice"}, +    {"hiphop_name": "D-Pryde"}, +    {"hiphop_name": "The D.O.C."}, +    {"hiphop_name": "Da Brat"}, +    {"hiphop_name": "Da$h"}, +    {"hiphop_name": "Da'unda'dogg"}, +    {"hiphop_name": "Daddy-O"}, +    {"hiphop_name": "Dae Dae"}, +    {"hiphop_name": "Damu the Fudgemunk"}, +    {"hiphop_name": "Dan Bull"}, +    {"hiphop_name": "Dana Dane"}, +    {"hiphop_name": "Danny Boy"}, +    {"hiphop_name": "Danny Brown"}, +    {"hiphop_name": "Dappy"}, +    {"hiphop_name": "Dave East"}, +    {"hiphop_name": "Daveed Diggs"}, +    {"hiphop_name": "David Banner"}, +    {"hiphop_name": "David Dallas"}, +    {"hiphop_name": "David Rush"}, +    {"hiphop_name": "David Stones"}, +    {"hiphop_name": "Daz Dillinger"}, +    {"hiphop_name": "Dazzie Dee"}, +    {"hiphop_name": "Dee Barnes"}, +    {"hiphop_name": "Dee Dee King"}, +    {"hiphop_name": "Dej Loaf"}, +    {"hiphop_name": "Delyric Oracle"}, +    {"hiphop_name": "Del the Funky Homosapien"}, +    {"hiphop_name": "Demrick"}, +    {"hiphop_name": "Deniro Farrar"}, +    {"hiphop_name": "Denzel Curry"}, +    {"hiphop_name": "Derek Minor"}, +    {"hiphop_name": "Desiigner"}, +    {"hiphop_name": "Detail"}, +    {"hiphop_name": "Deuce"}, +    {"hiphop_name": "Dev"}, +    {"hiphop_name": "Devin the Dude"}, +    {"hiphop_name": "Devlin"}, +    {"hiphop_name": "Diabolic"}, +    {"hiphop_name": "Diamond"}, +    {"hiphop_name": "Diamond D"}, +    {"hiphop_name": "Diggy Simmons"}, +    {"hiphop_name": "Dillon Cooper"}, +    {"hiphop_name": "Disco D"}, +    {"hiphop_name": "Disco King Mario"}, +    {"hiphop_name": "Dizzee Rascal"}, +    {"hiphop_name": "Dizzy Wright"}, +    {"hiphop_name": "DJ Cash Money"}, +    {"hiphop_name": "DJ Casper"}, +    {"hiphop_name": "DJ Clay"}, +    {"hiphop_name": "DJ Clue?"}, +    {"hiphop_name": "DJ Drama"}, +    {"hiphop_name": "DJ Felli Fel"}, +    {"hiphop_name": "DJ Fuze"}, +    {"hiphop_name": "DJ Green Lantern"}, +    {"hiphop_name": "DJ Head"}, +    {"hiphop_name": "DJ Hurricane"}, +    {"hiphop_name": "DJ Kay Slay"}, +    {"hiphop_name": "DJ Khaled"}, +    {"hiphop_name": "DJ Krush"}, +    {"hiphop_name": "DJ Mustard"}, +    {"hiphop_name": "DJ Paul"}, +    {"hiphop_name": "DJ Pooh"}, +    {"hiphop_name": "DJ Premier"}, +    {"hiphop_name": "DJ Quik"}, +    {"hiphop_name": "DJ Run"}, +    {"hiphop_name": "DJ Screw"}, +    {"hiphop_name": "DJ Shadow"}, +    {"hiphop_name": "DJ Yella"}, +    {"hiphop_name": "DMC"}, +    {"hiphop_name": "DMX"}, +    {"hiphop_name": "Doap Nixon"}, +    {"hiphop_name": "Doe B"}, +    {"hiphop_name": "Dok2"}, +    {"hiphop_name": "Dolla"}, +    {"hiphop_name": "Dom Kennedy"}, +    {"hiphop_name": "Dominique Young Unique"}, +    {"hiphop_name": "Domino"}, +    {"hiphop_name": "Domo Genesis"}, +    {"hiphop_name": "Don Cannon"}, +    {"hiphop_name": "Donnis"}, +    {"hiphop_name": "Dorrough"}, +    {"hiphop_name": "Doseone"}, +    {"hiphop_name": "Doug E. Fresh"}, +    {"hiphop_name": "Doughbeezy"}, +    {"hiphop_name": "Dr. Dre"}, +    {"hiphop_name": "Drag-On"}, +    {"hiphop_name": "Drake"}, +    {"hiphop_name": "Dres"}, +    {"hiphop_name": "Dresta"}, +    {"hiphop_name": "Drew Deezy"}, +    {"hiphop_name": "Driicky Graham"}, +    {"hiphop_name": "Droop-E"}, +    {"hiphop_name": "Dru Down"}, +    {"hiphop_name": "Drumma Boy"}, +    {"hiphop_name": "Dumbfoundead"}, +    {"hiphop_name": "Duncan Mighty"}, +    {"hiphop_name": "Eve"}, +    {"hiphop_name": "E-40"}, +    {"hiphop_name": "E.D.I. Mean"}, +    {"hiphop_name": "E-Sens"}, +    {"hiphop_name": "E.S.G."}, +    {"hiphop_name": "Earl Sweatshirt"}, +    {"hiphop_name": "Easy Mo Bee"}, +    {"hiphop_name": "Eazy-E"}, +    {"hiphop_name": "Ed O.G."}, +    {"hiphop_name": "Edo Maajka"}, +    {"hiphop_name": "El Da Sensei"}, +    {"hiphop_name": "El-P"}, +    {"hiphop_name": "Elephant Man"}, +    {"hiphop_name": "Elzhi"}, +    {"hiphop_name": "Emcee N.I.C.E."}, +    {"hiphop_name": "Eminem"}, +    {"hiphop_name": "Eric Biddines"}, +    {"hiphop_name": "Erick Arc Elliott"}, +    {"hiphop_name": "Erick Sermon"}, +    {"hiphop_name": "Eric Stanley"}, +    {"hiphop_name": "Esham"}, +    {"hiphop_name": "Esoteric"}, +    {"hiphop_name": "Eve"}, +    {"hiphop_name": "Everlast"}, +    {"hiphop_name": "Evidence"}, +    {"hiphop_name": "Eyedea"}, +    {"hiphop_name": "Ghostface Killah"}, +    {"hiphop_name": "Fabolous"}, +    {"hiphop_name": "Fabri Fibra"}, +    {"hiphop_name": "Fam-Lay"}, +    {"hiphop_name": "Famous Dex"}, +    {"hiphop_name": "Fashawn"}, +    {"hiphop_name": "Fat Joe"}, +    {"hiphop_name": "Fat Pat"}, +    {"hiphop_name": "Fat Trel"}, +    {"hiphop_name": "Fatboi"}, +    {"hiphop_name": "Father MC"}, +    {"hiphop_name": "Fatman Scoop"}, +    {"hiphop_name": "Fergie"}, +    {"hiphop_name": "Fetty Wap"}, +    {"hiphop_name": "Fiend"}, +    {"hiphop_name": "FLAME"}, +    {"hiphop_name": "Flavor Flav"}, +    {"hiphop_name": "Flavour N'abania"}, +    {"hiphop_name": "Flo Rida"}, +    {"hiphop_name": "Flying Lotus"}, +    {"hiphop_name": "Focus..."}, +    {"hiphop_name": "Fonzworth Bentley"}, +    {"hiphop_name": "Fort Minor"}, +    {"hiphop_name": "Foxx"}, +    {"hiphop_name": "Foxy Brown"}, +    {"hiphop_name": "Frank Ocean"}, +    {"hiphop_name": "Frankie J"}, +    {"hiphop_name": "Frayser Boy"}, +    {"hiphop_name": "Freak Nasty"}, +    {"hiphop_name": "Freaky Tah"}, +    {"hiphop_name": "Fred Durst"}, +    {"hiphop_name": "Freddie Foxxx"}, +    {"hiphop_name": "Freddie Gibbs"}, +    {"hiphop_name": "Fredo Santana"}, +    {"hiphop_name": "Fredro Starr"}, +    {"hiphop_name": "Fredwreck"}, +    {"hiphop_name": "Free"}, +    {"hiphop_name": "Freekey Zekey"}, +    {"hiphop_name": "Freeway"}, +    {"hiphop_name": "French Montana"}, +    {"hiphop_name": "Frenkie"}, +    {"hiphop_name": "Fresh Kid Ice"}, +    {"hiphop_name": "Froggy Fresh"}, +    {"hiphop_name": "Frost"}, +    {"hiphop_name": "Full Blooded"}, +    {"hiphop_name": "Funkmaster Flex"}, +    {"hiphop_name": "Future"}, +    {"hiphop_name": "Grandmaster Caz"}, +    {"hiphop_name": "Grandmaster Flash"}, +    {"hiphop_name": "G-Dragon"}, +    {"hiphop_name": "G-Eazy"}, +    {"hiphop_name": "G. Dep"}, +    {"hiphop_name": "G Herbo"}, +    {"hiphop_name": "Gaeko"}, +    {"hiphop_name": "The Game"}, +    {"hiphop_name": "Gang Starr"}, +    {"hiphop_name": "Gangsta Blac"}, +    {"hiphop_name": "Gangsta Boo"}, +    {"hiphop_name": "Ganksta N-I-P"}, +    {"hiphop_name": "Gary"}, +    {"hiphop_name": "Gee Money"}, +    {"hiphop_name": "General Woo"}, +    {"hiphop_name": "Ghostface Killah"}, +    {"hiphop_name": "Giggs"}, +    {"hiphop_name": "Gilbere Forte"}, +    {"hiphop_name": "Glasses Malone"}, +    {"hiphop_name": "GLC"}, +    {"hiphop_name": "Goldie Loc"}, +    {"hiphop_name": "GoldLink"}, +    {"hiphop_name": "Gorilla Zoe"}, +    {"hiphop_name": "Grafh"}, +    {"hiphop_name": "Grand Puba"}, +    {"hiphop_name": "Grandmaster Caz"}, +    {"hiphop_name": "Grandmaster Flash"}, +    {"hiphop_name": "Greydon Square"}, +    {"hiphop_name": "Grieves"}, +    {"hiphop_name": "Gucci Mane"}, +    {"hiphop_name": "Gudda Gudda"}, +    {"hiphop_name": "Guerilla Black"}, +    {"hiphop_name": "Guilty Simpson"}, +    {"hiphop_name": "Gunplay"}, +    {"hiphop_name": "Guru"}, +    {"hiphop_name": "GZA"}, +    {"hiphop_name": "Half a Mill"}, +    {"hiphop_name": "Hard Kaur"}, +    {"hiphop_name": "Hasan Salaam"}, +    {"hiphop_name": "Havoc"}, +    {"hiphop_name": "Heavy D"}, +    {"hiphop_name": "Hefe Heetroc"}, +    {"hiphop_name": "Heize"}, +    {"hiphop_name": "Hemlock Ernst"}, +    {"hiphop_name": "Hi-C"}, +    {"hiphop_name": "Hi-Tek"}, +    {"hiphop_name": "Hit-Boy"}, +    {"hiphop_name": "Hittman"}, +    {"hiphop_name": "Hodgy Beats"}, +    {"hiphop_name": "Honey Cocaine"}, +    {"hiphop_name": "Hoodie Allen"}, +    {"hiphop_name": "Hopsin"}, +    {"hiphop_name": "Hot Dollar"}, +    {"hiphop_name": "Huey"}, +    {"hiphop_name": "Hurricane Chris"}, +    {"hiphop_name": "Hurricane G"}, +    {"hiphop_name": "Hush"}, +    {"hiphop_name": "Hussein Fatal"}, +    {"hiphop_name": "Ice Cube"}, +    {"hiphop_name": "I-20"}, +    {"hiphop_name": "Iamsu!"}, +    {"hiphop_name": "Ice Cube"}, +    {"hiphop_name": "Ice-T"}, +    {"hiphop_name": "IDK"}, +    {"hiphop_name": "Iggy Azalea"}, +    {"hiphop_name": "IHeartMemphis"}, +    {"hiphop_name": "Ill Bill"}, +    {"hiphop_name": "Illmind"}, +    {"hiphop_name": "ILoveMakonnen"}, +    {"hiphop_name": "Immortal Technique"}, +    {"hiphop_name": "Imran Khan"}, +    {"hiphop_name": "Indo G"}, +    {"hiphop_name": "Inspectah Deck"}, +    {"hiphop_name": "Isaiah Rashad"}, +    {"hiphop_name": "Iyanya"}, +    {"hiphop_name": "Iyaz"}, +    {"hiphop_name": "Jay-Z"}, +    {"hiphop_name": "Kanye West"}, +    {"hiphop_name": "Kendrick Lamar"}, +    {"hiphop_name": "KRS-One"}, +    {"hiphop_name": "J Dilla"}, +    {"hiphop_name": "J-Diggs"}, +    {"hiphop_name": "J-Kwon"}, +    {"hiphop_name": "J-Son"}, +    {"hiphop_name": "J. Cole"}, +    {"hiphop_name": "J. Stalin"}, +    {"hiphop_name": "J. Valentine"}, +    {"hiphop_name": "J.I.D"}, +    {"hiphop_name": "J.R. Rotem"}, +    {"hiphop_name": "J.R. Writer"}, +    {"hiphop_name": "Ja Rule"}, +    {"hiphop_name": "Jack Parow"}, +    {"hiphop_name": "The Jacka"}, +    {"hiphop_name": "Jackie Hill-Perry"}, +    {"hiphop_name": "Jadakiss"}, +    {"hiphop_name": "Jaden Smith"}, +    {"hiphop_name": "Jae Millz"}, +    {"hiphop_name": "Jahlil Beats"}, +    {"hiphop_name": "Jamie Madrox"}, +    {"hiphop_name": "Jahred"}, +    {"hiphop_name": "Jake Miller"}, +    {"hiphop_name": "Jake One"}, +    {"hiphop_name": "Jam Master Jay"}, +    {"hiphop_name": "Jamal"}, +    {"hiphop_name": "Jamal Woolard"}, +    {"hiphop_name": "Jamie Foxx"}, +    {"hiphop_name": "Jarren Benton"}, +    {"hiphop_name": "Jay Burna"}, +    {"hiphop_name": "Jay Critch"}, +    {"hiphop_name": "Jay Electronica"}, +    {"hiphop_name": "Jay Park"}, +    {"hiphop_name": "Jay Rock"}, +    {"hiphop_name": "Jay Z"}, +    {"hiphop_name": "Jayo Felony"}, +    {"hiphop_name": "Jaz-O"}, +    {"hiphop_name": "Jazz Cartier"}, +    {"hiphop_name": "Jazze Pha"}, +    {"hiphop_name": "Jean Grae"}, +    {"hiphop_name": "Jeremiah Jae"}, +    {"hiphop_name": "Jeremih"}, +    {"hiphop_name": "Jermaine Dupri"}, +    {"hiphop_name": "Jeru the Damaja"}, +    {"hiphop_name": "Jewell"}, +    {"hiphop_name": "Jibbs"}, +    {"hiphop_name": "Jim Jones"}, +    {"hiphop_name": "Jim Jonsin"}, +    {"hiphop_name": "Jipsta"}, +    {"hiphop_name": "Jme"}, +    {"hiphop_name": "Joe Budden"}, +    {"hiphop_name": "Joell Ortiz"}, +    {"hiphop_name": "Joey Badass"}, +    {"hiphop_name": "John Cena"}, +    {"hiphop_name": "Johnny J"}, +    {"hiphop_name": "Johntá Austin"}, +    {"hiphop_name": "Joji Miller"}, +    {"hiphop_name": "Jon Connor"}, +    {"hiphop_name": "Joyner Lucas"}, +    {"hiphop_name": "JT Money"}, +    {"hiphop_name": "JT the Bigga Figga"}, +    {"hiphop_name": "Juelz Santana"}, +    {"hiphop_name": "Juice (Đus)"}, +    {"hiphop_name": "Juicy J"}, +    {"hiphop_name": "Junhyung"}, +    {"hiphop_name": "Jus Allah"}, +    {"hiphop_name": "Just Ice"}, +    {"hiphop_name": "Juvenile"}, +    {"hiphop_name": "Kurtis Blow"}, +    {"hiphop_name": "Lauryn Hill"}, +    {"hiphop_name": "K Camp"}, +    {"hiphop_name": "K'naan"}, +    {"hiphop_name": "K-Dee"}, +    {"hiphop_name": "K-OS"}, +    {"hiphop_name": "K-Solo"}, +    {"hiphop_name": "K.E. on the Track"}, +    {"hiphop_name": "K7"}, +    {"hiphop_name": "Kafani"}, +    {"hiphop_name": "Kam"}, +    {"hiphop_name": "Kangol Kid"}, +    {"hiphop_name": "Kanye West"}, +    {"hiphop_name": "Kap G"}, +    {"hiphop_name": "Kardinal Offishall"}, +    {"hiphop_name": "Kastro"}, +    {"hiphop_name": "Kat Dahlia"}, +    {"hiphop_name": "Katie Got Bandz"}, +    {"hiphop_name": "KB"}, +    {"hiphop_name": "Keak da Sneak"}, +    {"hiphop_name": "Keith Ape"}, +    {"hiphop_name": "Keith Murray"}, +    {"hiphop_name": "Malcolm David Kelley"}, +    {"hiphop_name": "Kendrick Lamar"}, +    {"hiphop_name": "Kent Jones"}, +    {"hiphop_name": "Kerser"}, +    {"hiphop_name": "Kevin Abstract"}, +    {"hiphop_name": "Kevin Gates"}, +    {"hiphop_name": "Kevin McCall"}, +    {"hiphop_name": "Khia"}, +    {"hiphop_name": "Khleo"}, +    {"hiphop_name": "Kia Shine"}, +    {"hiphop_name": "Kid Capri"}, +    {"hiphop_name": "Kid Cudi"}, +    {"hiphop_name": "Kid Frost"}, +    {"hiphop_name": "Kid Ink"}, +    {"hiphop_name": "Kid Rock"}, +    {"hiphop_name": "Kid Sister"}, +    {"hiphop_name": "Kidd Kidd"}, +    {"hiphop_name": "Killah Priest"}, +    {"hiphop_name": "Killer Mike"}, +    {"hiphop_name": "Kilo Ali"}, +    {"hiphop_name": "King Chip"}, +    {"hiphop_name": "King Gordy"}, +    {"hiphop_name": "King L"}, +    {"hiphop_name": "King Tee"}, +    {"hiphop_name": "Kirk Knight"}, +    {"hiphop_name": "Kirko Bangz"}, +    {"hiphop_name": "Kitty"}, +    {"hiphop_name": "KJ-52"}, +    {"hiphop_name": "Knero"}, +    {"hiphop_name": "Knoc-turn'al"}, +    {"hiphop_name": "KO"}, +    {"hiphop_name": "KOHH"}, +    {"hiphop_name": "Kodak Black"}, +    {"hiphop_name": "Kokane"}, +    {"hiphop_name": "Kool A.D"}, +    {"hiphop_name": "Kool G Rap"}, +    {"hiphop_name": "Kool Keith"}, +    {"hiphop_name": "Kool Moe Dee"}, +    {"hiphop_name": "Koolade"}, +    {"hiphop_name": "Krayzie Bone"}, +    {"hiphop_name": "Kreayshawn"}, +    {"hiphop_name": "Krizz Kaliko"}, +    {"hiphop_name": "KRS-One"}, +    {"hiphop_name": "Kung Fu Vampire"}, +    {"hiphop_name": "Kurious"}, +    {"hiphop_name": "Kurtis Blow"}, +    {"hiphop_name": "Kurupt"}, +    {"hiphop_name": "Kutt Calhoun"}, +    {"hiphop_name": "Kwamé"}, +    {"hiphop_name": "Kyle"}, +    {"hiphop_name": "Lil' Kim"}, +    {"hiphop_name": "Lil Wayne"}, +    {"hiphop_name": "L.T. Hutton"}, +    {"hiphop_name": "La Chat"}, +    {"hiphop_name": "La the Darkman"}, +    {"hiphop_name": "Lady Luck"}, +    {"hiphop_name": "The Lady of Rage"}, +    {"hiphop_name": "Lakey The Kid"}, +    {"hiphop_name": "Lakim Shabazz"}, +    {"hiphop_name": "Lakutis"}, +    {"hiphop_name": "Large Professor"}, +    {"hiphop_name": "Lauryn Hill"}, +    {"hiphop_name": "Lazarus"}, +    {"hiphop_name": "LE"}, +    {"hiphop_name": "Lecrae"}, +    {"hiphop_name": "Left Brain"}, +    {"hiphop_name": "Lex Luger"}, +    {"hiphop_name": "Lil' B"}, +    {"hiphop_name": "Lil' Bibby"}, +    {"hiphop_name": "Lil' Debbie"}, +    {"hiphop_name": "Lil' Dicky"}, +    {"hiphop_name": "Lil' Durk"}, +    {"hiphop_name": "Lil' Eazy-E"}, +    {"hiphop_name": "Lil' Flip"}, +    {"hiphop_name": "Lil' Herb"}, +    {"hiphop_name": "Lil' Jon"}, +    {"hiphop_name": "Lil' Mama"}, +    {"hiphop_name": "Lil' Peep"}, +    {"hiphop_name": "Lil' Phat"}, +    {"hiphop_name": "Lil' Pump"}, +    {"hiphop_name": "Lil' Reese"}, +    {"hiphop_name": "Lil' Ric"}, +    {"hiphop_name": "Lil' Ru"}, +    {"hiphop_name": "Lil' Scrappy"}, +    {"hiphop_name": "Lil' Skies"}, +    {"hiphop_name": "Lil' Twist"}, +    {"hiphop_name": "Lil' Uzi Vert"}, +    {"hiphop_name": "Lil' Wayne"}, +    {"hiphop_name": "Lil' Wyte"}, +    {"hiphop_name": "Lil' Xan"}, +    {"hiphop_name": "Lil' Yachty"}, +    {"hiphop_name": "Lil' Zane"}, +    {"hiphop_name": "Lil' Cease"}, +    {"hiphop_name": "Lil' Fizz"}, +    {"hiphop_name": "Lil' Flip"}, +    {"hiphop_name": "Lil' Keke"}, +    {"hiphop_name": "Lil' Kim"}, +    {"hiphop_name": "Lil' O"}, +    {"hiphop_name": "Lil' Ronnie"}, +    {"hiphop_name": "Lil' Troy"}, +    {"hiphop_name": "Lil' Wil"}, +    {"hiphop_name": "Lin Que"}, +    {"hiphop_name": "Lisa Lopes"}, +    {"hiphop_name": "LL Cool J"}, +    {"hiphop_name": "Lloyd Banks"}, +    {"hiphop_name": "Locksmith"}, +    {"hiphop_name": "Logic"}, +    {"hiphop_name": "LoLa Monroe"}, +    {"hiphop_name": "London On Da Track"}, +    {"hiphop_name": "Loon"}, +    {"hiphop_name": "Lord Finesse"}, +    {"hiphop_name": "Lord Have Mercy"}, +    {"hiphop_name": "Lord Infamous"}, +    {"hiphop_name": "Lord Jamar"}, +    {"hiphop_name": "Los"}, +    {"hiphop_name": "Louis Logic"}, +    {"hiphop_name": "Lovebug Starski"}, +    {"hiphop_name": "LoveRance"}, +    {"hiphop_name": "Lowkey"}, +    {"hiphop_name": "LRoc"}, +    {"hiphop_name": "Ludacris"}, +    {"hiphop_name": "Luis Resto"}, +    {"hiphop_name": "Luni Coleone"}, +    {"hiphop_name": "Lupe Fiasco"}, +    {"hiphop_name": "Luther Campbell"}, +    {"hiphop_name": "MC Lyte"}, +    {"hiphop_name": "Melle Mel"}, +    {"hiphop_name": "MF Doom"}, +    {"hiphop_name": "M Trill"}, +    {"hiphop_name": "M-1"}, +    {"hiphop_name": "M.I.A."}, +    {"hiphop_name": "Mac"}, +    {"hiphop_name": "Mac Dre"}, +    {"hiphop_name": "Mac Lethal"}, +    {"hiphop_name": "Mac Mall"}, +    {"hiphop_name": "Mac Miller"}, +    {"hiphop_name": "Mac Minister"}, +    {"hiphop_name": "Machine Gun Kelly"}, +    {"hiphop_name": "Mack 10"}, +    {"hiphop_name": "Mack Maine"}, +    {"hiphop_name": "Macklemore"}, +    {"hiphop_name": "Mad Lion"}, +    {"hiphop_name": "Madchild"}, +    {"hiphop_name": "Madlib"}, +    {"hiphop_name": "Maejor Ali"}, +    {"hiphop_name": "Magic"}, +    {"hiphop_name": "Magneto Dayo"}, +    {"hiphop_name": "Magnolia Shorty"}, +    {"hiphop_name": "Maino"}, +    {"hiphop_name": "Manafest"}, +    {"hiphop_name": "Mann"}, +    {"hiphop_name": "Mannie Fresh"}, +    {"hiphop_name": "Marčelo"}, +    {"hiphop_name": "Mariah Carey"}, +    {"hiphop_name": "Mark Battles"}, +    {"hiphop_name": "Marky Mark"}, +    {"hiphop_name": "Marley Marl"}, +    {"hiphop_name": "Marvaless"}, +    {"hiphop_name": "Marz"}, +    {"hiphop_name": "Mase"}, +    {"hiphop_name": "Masspike Miles"}, +    {"hiphop_name": "Masta Ace"}, +    {"hiphop_name": "Masta Killa"}, +    {"hiphop_name": "Master P"}, +    {"hiphop_name": "Master Shortie"}, +    {"hiphop_name": "Matt Toka"}, +    {"hiphop_name": "Max B"}, +    {"hiphop_name": "Maxo Kream"}, +    {"hiphop_name": "MC Breed"}, +    {"hiphop_name": "MC Davo"}, +    {"hiphop_name": "MC Eiht"}, +    {"hiphop_name": "MC Frontalot"}, +    {"hiphop_name": "MC Hammer"}, +    {"hiphop_name": "MC Jin"}, +    {"hiphop_name": "MC Lyte"}, +    {"hiphop_name": "MC Mong"}, +    {"hiphop_name": "MC Pressure"}, +    {"hiphop_name": "MC Ren"}, +    {"hiphop_name": "MC Ride"}, +    {"hiphop_name": "MC Serch"}, +    {"hiphop_name": "MC Shan"}, +    {"hiphop_name": "MC Solaar"}, +    {"hiphop_name": "MC Trouble"}, +    {"hiphop_name": "MC Tunes"}, +    {"hiphop_name": "Meechy Darko"}, +    {"hiphop_name": "Meek Mill"}, +    {"hiphop_name": "Melle Mel"}, +    {"hiphop_name": "Mellow Man Ace"}, +    {"hiphop_name": "Memphis Bleek"}, +    {"hiphop_name": "Messy Marv"}, +    {"hiphop_name": "Method Man"}, +    {"hiphop_name": "Metro Boomin"}, +    {"hiphop_name": "MF Doom"}, +    {"hiphop_name": "MF Grimm"}, +    {"hiphop_name": "Mia X"}, +    {"hiphop_name": "Mic Geronimo"}, +    {"hiphop_name": "Mick Jenkins"}, +    {"hiphop_name": "Mickey Factz"}, +    {"hiphop_name": "Mike Dean"}, +    {"hiphop_name": "Mike G"}, +    {"hiphop_name": "Mike Jones"}, +    {"hiphop_name": "Mike Posner"}, +    {"hiphop_name": "Mike Shinoda"}, +    {"hiphop_name": "Mike Stud"}, +    {"hiphop_name": "Mike Will Made It"}, +    {"hiphop_name": "Mike Zombie"}, +    {"hiphop_name": "Milo"}, +    {"hiphop_name": "Mims"}, +    {"hiphop_name": "Mino"}, +    {"hiphop_name": "Miryo"}, +    {"hiphop_name": "Missy Elliott"}, +    {"hiphop_name": "Mista Grimm"}, +    {"hiphop_name": "Mistah F.A.B."}, +    {"hiphop_name": "Mister Cee"}, +    {"hiphop_name": "Mitchy Slick"}, +    {"hiphop_name": "Mo B. Dick"}, +    {"hiphop_name": "Mod Sun"}, +    {"hiphop_name": "Money-B"}, +    {"hiphop_name": "Monie Love"}, +    {"hiphop_name": "Monoxide Child"}, +    {"hiphop_name": "Mopreme Shakur"}, +    {"hiphop_name": "Mos Def"}, +    {"hiphop_name": "Mr. Capone-E"}, +    {"hiphop_name": "Mr. Cheeks"}, +    {"hiphop_name": "Mr. Collipark"}, +    {"hiphop_name": "Mr. Criminal"}, +    {"hiphop_name": "Mr. Lif"}, +    {"hiphop_name": "Mr. Porter"}, +    {"hiphop_name": "Mr. Serv-On"}, +    {"hiphop_name": "Mr. Short Khop"}, +    {"hiphop_name": "Ms. Jade"}, +    {"hiphop_name": "Murphy Lee"}, +    {"hiphop_name": "Murs"}, +    {"hiphop_name": "Mystikal"}, +    {"hiphop_name": "Myzery"}, +    {"hiphop_name": "Montana of 300"}, +    {"hiphop_name": "Nas"}, +    {"hiphop_name": "Nicki Minaj"}, +    {"hiphop_name": "NBA YoungBoy"}, +    {"hiphop_name": "N.O. Joe"}, +    {"hiphop_name": "N.O.R.E."}, +    {"hiphop_name": "Napoleon"}, +    {"hiphop_name": "Nas"}, +    {"hiphop_name": "Nate Dogg"}, +    {"hiphop_name": "Nature"}, +    {"hiphop_name": "Nav"}, +    {"hiphop_name": "Nebu Kiniza"}, +    {"hiphop_name": "Necro"}, +    {"hiphop_name": "Needlz"}, +    {"hiphop_name": "Nelly"}, +    {"hiphop_name": "NF"}, +    {"hiphop_name": "Nick Cannon"}, +    {"hiphop_name": "Nicki Minaj"}, +    {"hiphop_name": "Nicky da B"}, +    {"hiphop_name": "Nicole Wray"}, +    {"hiphop_name": "Nikki D"}, +    {"hiphop_name": "Ninja"}, +    {"hiphop_name": "Nipsey Hussle"}, +    {"hiphop_name": "Nitty"}, +    {"hiphop_name": "Nitty Scott MC"}, +    {"hiphop_name": "NoClue"}, +    {"hiphop_name": "No Malice"}, +    {"hiphop_name": "Noah 40 Shebib"}, +    {"hiphop_name": "Noname"}, +    {"hiphop_name": "Nonchalant"}, +    {"hiphop_name": "The Notorious B.I.G."}, +    {"hiphop_name": "Nottz"}, +    {"hiphop_name": "Nujabes"}, +    {"hiphop_name": "Nump"}, +    {"hiphop_name": "Numskull"}, +    {"hiphop_name": "Nyck Caution"}, +    {"hiphop_name": "Nyzzy Nyce"}, +    {"hiphop_name": "O.T. Genasis"}, +    {"hiphop_name": "Obie Trice"}, +    {"hiphop_name": "Oddisee"}, +    {"hiphop_name": "Offset"}, +    {"hiphop_name": "OG Maco"}, +    {"hiphop_name": "Oh No"}, +    {"hiphop_name": "OJ da Juiceman"}, +    {"hiphop_name": "Ol' Dirty Bastard"}, +    {"hiphop_name": "Olamide"}, +    {"hiphop_name": "Olivia"}, +    {"hiphop_name": "Omarion"}, +    {"hiphop_name": "Omega Red"}, +    {"hiphop_name": "Omillio Sparks"}, +    {"hiphop_name": "One Be Lo"}, +    {"hiphop_name": "Oneya"}, +    {"hiphop_name": "Open Mike Eagle"}, +    {"hiphop_name": "Psy"}, +    {"hiphop_name": "Q-Tip"}, +    {"hiphop_name": "P. Reign"}, +    {"hiphop_name": "P.C.T"}, +    {"hiphop_name": "Papa Reu"}, +    {"hiphop_name": "Papoose"}, +    {"hiphop_name": "Paris"}, +    {"hiphop_name": "PARTYNEXTDOOR"}, +    {"hiphop_name": "Pastor Troy"}, +    {"hiphop_name": "Paul Wall"}, +    {"hiphop_name": "Peedi Peedi"}, +    {"hiphop_name": "Peewee Longway"}, +    {"hiphop_name": "Pacewon"}, +    {"hiphop_name": "Percee P"}, +    {"hiphop_name": "Petey Pablo"}, +    {"hiphop_name": "Pharoahe Monch"}, +    {"hiphop_name": "Pharrell Williams"}, +    {"hiphop_name": "Phat Kat"}, +    {"hiphop_name": "Phife Dawg"}, +    {"hiphop_name": "Philthy Rich"}, +    {"hiphop_name": "Phyno"}, +    {"hiphop_name": "Pill"}, +    {"hiphop_name": "Pimp C"}, +    {"hiphop_name": "Pitbull"}, +    {"hiphop_name": "Planet Asia"}, +    {"hiphop_name": "Planetary"}, +    {"hiphop_name": "Plies"}, +    {"hiphop_name": "Playboi Carti"}, +    {"hiphop_name": "PnB Rock"}, +    {"hiphop_name": "PNC"}, +    {"hiphop_name": "Porta"}, +    {"hiphop_name": "Positive K"}, +    {"hiphop_name": "Post Malone"}, +    {"hiphop_name": "Pras"}, +    {"hiphop_name": "Prince Ital Joe"}, +    {"hiphop_name": "Prince Paul"}, +    {"hiphop_name": "Prince Po"}, +    {"hiphop_name": "Problem"}, +    {"hiphop_name": "Prodigy"}, +    {"hiphop_name": "Professor Green"}, +    {"hiphop_name": "Project Pat"}, +    {"hiphop_name": "Proof"}, +    {"hiphop_name": "Prozak"}, +    {"hiphop_name": "Psy"}, +    {"hiphop_name": "Pusha T"}, +    {"hiphop_name": "Queen Latifah"}, +    {"hiphop_name": "Q-Tip"}, +    {"hiphop_name": "Quan"}, +    {"hiphop_name": "Quavo"}, +    {"hiphop_name": "Quazedelic"}, +    {"hiphop_name": "Queen Latifah"}, +    {"hiphop_name": "Queen Pen"}, +    {"hiphop_name": "The Quiett"}, +    {"hiphop_name": "Quincy Jones III"}, +    {"hiphop_name": "Qwazaar"}, +    {"hiphop_name": "Qwel"}, +    {"hiphop_name": "Rakim"}, +    {"hiphop_name": "RZA"}, +    {"hiphop_name": "R. Kelly"}, +    {"hiphop_name": "R.A. the Rugged Man"}, +    {"hiphop_name": "Raekwon"}, +    {"hiphop_name": "Rah Digga"}, +    {"hiphop_name": "Rahzel"}, +    {"hiphop_name": "Rakim"}, +    {"hiphop_name": "Rampage"}, +    {"hiphop_name": "Rap Monster"}, +    {"hiphop_name": "Rappin' 4-Tay"}, +    {"hiphop_name": "Rapsody"}, +    {"hiphop_name": "Ramey Dawoud"}, +    {"hiphop_name": "Ras Kass"}, +    {"hiphop_name": "Rasheeda"}, +    {"hiphop_name": "Ravi"}, +    {"hiphop_name": "Ray Cash"}, +    {"hiphop_name": "Ray J"}, +    {"hiphop_name": "Ray Luv"}, +    {"hiphop_name": "Raz Fresco"}, +    {"hiphop_name": "RBX"}, +    {"hiphop_name": "The Real Roxanne"}, +    {"hiphop_name": "Really Doe"}, +    {"hiphop_name": "Red Café"}, +    {"hiphop_name": "Red Spyda"}, +    {"hiphop_name": "Redfoo"}, +    {"hiphop_name": "Redman"}, +    {"hiphop_name": "Reef the Lost Cauze"}, +    {"hiphop_name": "Reema Major"}, +    {"hiphop_name": "Reks"}, +    {"hiphop_name": "Remy Ma"}, +    {"hiphop_name": "Rhymefest"}, +    {"hiphop_name": "Rich Boy"}, +    {"hiphop_name": "Rich Brian"}, +    {"hiphop_name": "Rich Homie Quan"}, +    {"hiphop_name": "Rich The Kid"}, +    {"hiphop_name": "Richie Rich"}, +    {"hiphop_name": "Rick Rock"}, +    {"hiphop_name": "Rick Ross"}, +    {"hiphop_name": "Rico Love"}, +    {"hiphop_name": "Riff Raff"}, +    {"hiphop_name": "Rittz"}, +    {"hiphop_name": "RJ"}, +    {"hiphop_name": "Rob Sonic"}, +    {"hiphop_name": "Rob Stone"}, +    {"hiphop_name": "Roc Marciano"}, +    {"hiphop_name": "Rockie Fresh"}, +    {"hiphop_name": "Rocko"}, +    {"hiphop_name": "Roger Troutman"}, +    {"hiphop_name": "Romeo Miller"}, +    {"hiphop_name": "Ronnie Radke"}, +    {"hiphop_name": "Roots Manuva"}, +    {"hiphop_name": "Roscoe"}, +    {"hiphop_name": "Roscoe Dash"}, +    {"hiphop_name": "Rowdy Rebel"}, +    {"hiphop_name": "Roxanne Shanté"}, +    {"hiphop_name": "Royce da 5'9"}, +    {"hiphop_name": "Russ"}, +    {"hiphop_name": "Rucka Rucka Ali"}, +    {"hiphop_name": "Rydah J. Klyde"}, +    {"hiphop_name": "Rye Rye"}, +    {"hiphop_name": "RZA"}, +    {"hiphop_name": "Roy Woods"}, +    {"hiphop_name": "Slick Rick"}, +    {"hiphop_name": "Snoop Dogg"}, +    {"hiphop_name": "Skabo"}, +    {"hiphop_name": "Saafir"}, +    {"hiphop_name": "Sabac Red"}, +    {"hiphop_name": "Sacario"}, +    {"hiphop_name": "Sadat X"}, +    {"hiphop_name": "Sadistik"}, +    {"hiphop_name": "Sage Francis"}, +    {"hiphop_name": "Sage the Gemini"}, +    {"hiphop_name": "Saigon"}, +    {"hiphop_name": "Sam Sneed"}, +    {"hiphop_name": "Sammy Adams"}, +    {"hiphop_name": "San E"}, +    {"hiphop_name": "San Quinn"}, +    {"hiphop_name": "Sarkodie"}, +    {"hiphop_name": "Sauce Money"}, +    {"hiphop_name": "Savage"}, +    {"hiphop_name": "Scarface"}, +    {"hiphop_name": "Schoolboy Q"}, +    {"hiphop_name": "Schoolly D"}, +    {"hiphop_name": "Scott Storch"}, +    {"hiphop_name": "Scotty"}, +    {"hiphop_name": "Scram Jones"}, +    {"hiphop_name": "Scribe"}, +    {"hiphop_name": "Scrilla"}, +    {"hiphop_name": "Scrufizzer"}, +    {"hiphop_name": "Sean Combs"}, +    {"hiphop_name": "Sean Paul"}, +    {"hiphop_name": "Sean Price"}, +    {"hiphop_name": "Sean T"}, +    {"hiphop_name": "Serengeti"}, +    {"hiphop_name": "Serius Jones"}, +    {"hiphop_name": "Sev Statik"}, +    {"hiphop_name": "Sha Money XL"}, +    {"hiphop_name": "Shabazz the Disciple"}, +    {"hiphop_name": "Shad"}, +    {"hiphop_name": "Shade Sheist"}, +    {"hiphop_name": "Shady Nate"}, +    {"hiphop_name": "Shaggy"}, +    {"hiphop_name": "Shaggy 2 Dope"}, +    {"hiphop_name": "Shaquille O'Neal"}, +    {"hiphop_name": "Shawnna"}, +    {"hiphop_name": "Shawty Lo"}, +    {"hiphop_name": "Sheek Louch"}, +    {"hiphop_name": "Shing02"}, +    {"hiphop_name": "Sho Baraka"}, +    {"hiphop_name": "Shock G"}, +    {"hiphop_name": "Shorty"}, +    {"hiphop_name": "Shorty Mack"}, +    {"hiphop_name": "Shwayze"}, +    {"hiphop_name": "Shy Glizzy"}, +    {"hiphop_name": "Shyheim"}, +    {"hiphop_name": "Shyne"}, +    {"hiphop_name": "Silentó"}, +    {"hiphop_name": "Silkk the Shocker"}, +    {"hiphop_name": "Silla"}, +    {"hiphop_name": "Simon D"}, +    {"hiphop_name": "Sir Jinx"}, +    {"hiphop_name": "Sir Mix-a-Lot"}, +    {"hiphop_name": "Sirah"}, +    {"hiphop_name": "Skee-Lo"}, +    {"hiphop_name": "Skeme"}, +    {"hiphop_name": "Skepta"}, +    {"hiphop_name": "Skinnyman"}, +    {"hiphop_name": "Skooly"}, +    {"hiphop_name": "Skyzoo"}, +    {"hiphop_name": "SL Jones"}, +    {"hiphop_name": "Sleepy Brown"}, +    {"hiphop_name": "Slick Rick"}, +    {"hiphop_name": "Slim Jxmmi"}, +    {"hiphop_name": "Slim Thug"}, +    {"hiphop_name": "Slug"}, +    {"hiphop_name": "Smitty"}, +    {"hiphop_name": "Smoke DZA"}, +    {"hiphop_name": "Smooth"}, +    {"hiphop_name": "Smoothe da Hustler"}, +    {"hiphop_name": "Sniper J"}, +    {"hiphop_name": "Snoop Dogg"}, +    {"hiphop_name": "Snootie Wild"}, +    {"hiphop_name": "Snow Tha Product"}, +    {"hiphop_name": "Soce the elemental wizard"}, +    {"hiphop_name": "Sole"}, +    {"hiphop_name": "Solzilla"}, +    {"hiphop_name": "Sonny Digital"}, +    {"hiphop_name": "SonReal"}, +    {"hiphop_name": "Sonsee"}, +    {"hiphop_name": "Soopafly"}, +    {"hiphop_name": "Soulja Boy"}, +    {"hiphop_name": "Soulja Slim"}, +    {"hiphop_name": "South Park Mexican"}, +    {"hiphop_name": "Southside"}, +    {"hiphop_name": "SpaceGhostPurrp"}, +    {"hiphop_name": "Special Ed"}, +    {"hiphop_name": "Spice 1"}, +    {"hiphop_name": "Spider Loc"}, +    {"hiphop_name": "Spoonie Gee"}, +    {"hiphop_name": "Spose"}, +    {"hiphop_name": "Spot"}, +    {"hiphop_name": "Stalley"}, +    {"hiphop_name": "Starlito"}, +    {"hiphop_name": "Stat Quo"}, +    {"hiphop_name": "Static Major"}, +    {"hiphop_name": "Statik Selektah"}, +    {"hiphop_name": "Steady B"}, +    {"hiphop_name": "Stevie Joe"}, +    {"hiphop_name": "Stevie Stone"}, +    {"hiphop_name": "Stezo"}, +    {"hiphop_name": "Stitches"}, +    {"hiphop_name": "Sticky Fingaz"}, +    {"hiphop_name": "Stoka"}, +    {"hiphop_name": "Stoupe the Enemy of Mankind"}, +    {"hiphop_name": "Stormzy"}, +    {"hiphop_name": "Stretch"}, +    {"hiphop_name": "Styles P"}, +    {"hiphop_name": "Substantial"}, +    {"hiphop_name": "Suga Free"}, +    {"hiphop_name": "Suffa"}, +    {"hiphop_name": "Swagg Man"}, +    {"hiphop_name": "Sweet Tee"}, +    {"hiphop_name": "Swings"}, +    {"hiphop_name": "Swizz Beatz"}, +    {"hiphop_name": "SwizZz"}, +    {"hiphop_name": "Syd Tha Kyd"}, +    {"hiphop_name": "SZA"}, +    {"hiphop_name": "T.I."}, +    {"hiphop_name": "Tyler the Creator"}, +    {"hiphop_name": "T La Rock"}, +    {"hiphop_name": "T-Bone"}, +    {"hiphop_name": "T-Nutty"}, +    {"hiphop_name": "T-Pain"}, +    {"hiphop_name": "T-Wayne"}, +    {"hiphop_name": "T. Mills"}, +    {"hiphop_name": "T.I."}, +    {"hiphop_name": "T.O.P"}, +    {"hiphop_name": "Tabi Bonney"}, +    {"hiphop_name": "Tablo"}, +    {"hiphop_name": "Taio Cruz"}, +    {"hiphop_name": "Talib Kweli"}, +    {"hiphop_name": "Target"}, +    {"hiphop_name": "Tay Dizm"}, +    {"hiphop_name": "Tay-K"}, +    {"hiphop_name": "TD Cruze"}, +    {"hiphop_name": "Teairra Marí"}, +    {"hiphop_name": "Tech N9ne"}, +    {"hiphop_name": "Tedashii"}, +    {"hiphop_name": "TeeFlii"}, +    {"hiphop_name": "Tee Grizzley"}, +    {"hiphop_name": "Tekitha"}, +    {"hiphop_name": "Tela"}, +    {"hiphop_name": "Termanology"}, +    {"hiphop_name": "Terrace Martin"}, +    {"hiphop_name": "Teyana Taylor"}, +    {"hiphop_name": "Tha Chill"}, +    {"hiphop_name": "Tha City Paper"}, +    {"hiphop_name": "Tha Trademarc"}, +    {"hiphop_name": "The-Dream"}, +    {"hiphop_name": "Theophilus London"}, +    {"hiphop_name": "Tiffany Foxx"}, +    {"hiphop_name": "Tim Dog"}, +    {"hiphop_name": "Timaya"}, +    {"hiphop_name": "Timbaland"}, +    {"hiphop_name": "Timbe"}, +    {"hiphop_name": "Tinie Tempah"}, +    {"hiphop_name": "Tink (musician)"}, +    {"hiphop_name": "TobyMac"}, +    {"hiphop_name": "Tone Lōc"}, +    {"hiphop_name": "Tone Trump"}, +    {"hiphop_name": "Tonedeff"}, +    {"hiphop_name": "Toni Blackman"}, +    {"hiphop_name": "Tony Yayo"}, +    {"hiphop_name": "Too Short"}, +    {"hiphop_name": "Torch (American)"}, +    {"hiphop_name": "Torch (German)"}, +    {"hiphop_name": "Tory Lanez"}, +    {"hiphop_name": "Tracey Lee"}, +    {"hiphop_name": "Trae tha Truth"}, +    {"hiphop_name": "Tragedy Khadafi"}, +    {"hiphop_name": "Travis Scott"}, +    {"hiphop_name": "Traxamillion"}, +    {"hiphop_name": "Tray Deee"}, +    {"hiphop_name": "Treach"}, +    {"hiphop_name": "Trey Songz"}, +    {"hiphop_name": "Trick Daddy"}, +    {"hiphop_name": "Trick-Trick"}, +    {"hiphop_name": "Trina"}, +    {"hiphop_name": "Trinidad James"}, +    {"hiphop_name": "Trip Lee"}, +    {"hiphop_name": "Trippie Redd"}, +    {"hiphop_name": "Tristan Wilds"}, +    {"hiphop_name": "Troy Ave"}, +    {"hiphop_name": "Tupac Shakur"}, +    {"hiphop_name": "Turf Talk"}, +    {"hiphop_name": "Turk"}, +    {"hiphop_name": "Tweedy Bird Loc"}, +    {"hiphop_name": "Twista"}, +    {"hiphop_name": "Twisted Insane"}, +    {"hiphop_name": "Ty Dolla Sign"}, +    {"hiphop_name": "Tyga"}, +    {"hiphop_name": "Tyler Joseph"}, +    {"hiphop_name": "Tyler The Creator"}, +    {"hiphop_name": "Tyra Bolling"}, +    {"hiphop_name": "Verbal Jint"}, +    {"hiphop_name": "U-God"}, +    {"hiphop_name": "Ugly God"}, +    {"hiphop_name": "Uncle Murda"}, +    {"hiphop_name": "Unk"}, +    {"hiphop_name": "U$O"}, +    {"hiphop_name": "Wyclef Jean"}, +    {"hiphop_name": "V-Nasty"}, +    {"hiphop_name": "V.I.C."}, +    {"hiphop_name": "Vado"}, +    {"hiphop_name": "Vakill"}, +    {"hiphop_name": "Val Young"}, +    {"hiphop_name": "Valete"}, +    {"hiphop_name": "Vanilla Ice"}, +    {"hiphop_name": "Vast Aire"}, +    {"hiphop_name": "Verbal Jint"}, +    {"hiphop_name": "Verse Simmonds"}, +    {"hiphop_name": "Vic Mensa"}, +    {"hiphop_name": "Vince Staples"}, +    {"hiphop_name": "Vinnie Paz"}, +    {"hiphop_name": "Violent J"}, +    {"hiphop_name": "Viper"}, +    {"hiphop_name": "VL Mike"}, +    {"hiphop_name": "Xzibit"}, +    {"hiphop_name": "Waka Flocka Flame"}, +    {"hiphop_name": "Wale"}, +    {"hiphop_name": "Warren G"}, +    {"hiphop_name": "Warryn Campbell"}, +    {"hiphop_name": "Watsky"}, +    {"hiphop_name": "Wax (rapper)"}, +    {"hiphop_name": "WC"}, +    {"hiphop_name": "Webbie"}, +    {"hiphop_name": "The Weeknd"}, +    {"hiphop_name": "Westside Gunn"}, +    {"hiphop_name": "Wikluh Sky"}, +    {"hiphop_name": "Will Smith"}, +    {"hiphop_name": "will.i.am"}, +    {"hiphop_name": "Willie D"}, +    {"hiphop_name": "Willie the Kid"}, +    {"hiphop_name": "Willow Smith"}, +    {"hiphop_name": "Willy Northpole"}, +    {"hiphop_name": "Wish Bone"}, +    {"hiphop_name": "Witchdoctor"}, +    {"hiphop_name": "Wiz Khalifa"}, +    {"hiphop_name": "Wizkid"}, +    {"hiphop_name": "Wrekonize"}, +    {"hiphop_name": "Wyclef Jean"}, +    {"hiphop_name": "X-Raided"}, +    {"hiphop_name": "XV"}, +    {"hiphop_name": "Xzibit"}, +    {"hiphop_name": "XXXTentacion"}, +    {"hiphop_name": "X Clan"}, +    {"hiphop_name": "Young Jeezy"}, +    {"hiphop_name": "Ya Boy"}, +    {"hiphop_name": "Yaki Kadafi"}, +    {"hiphop_name": "Yazz The Greatest"}, +    {"hiphop_name": "YBN Nahmir"}, +    {"hiphop_name": "YC"}, +    {"hiphop_name": "YDG"}, +    {"hiphop_name": "Yelawolf"}, +    {"hiphop_name": "YFN Lucci"}, +    {"hiphop_name": "YG"}, +    {"hiphop_name": "Yo Gotti"}, +    {"hiphop_name": "Yo Yo Honey Singh"}, +    {"hiphop_name": "Yoon Mi-rae"}, +    {"hiphop_name": "Young Bleed"}, +    {"hiphop_name": "Young Buck"}, +    {"hiphop_name": "Young Chop"}, +    {"hiphop_name": "Young Chris"}, +    {"hiphop_name": "Young Dolph"}, +    {"hiphop_name": "Young Dre the Truth"}, +    {"hiphop_name": "Young Dro"}, +    {"hiphop_name": "Young Greatness"}, +    {"hiphop_name": "Young Jeezy"}, +    {"hiphop_name": "Young M.A"}, +    {"hiphop_name": "Young Maylay"}, +    {"hiphop_name": "Young MC"}, +    {"hiphop_name": "Young Noble"}, +    {"hiphop_name": "Young Scooter"}, +    {"hiphop_name": "Young Thug"}, +    {"hiphop_name": "YoungBoy Never Broke Again"}, +    {"hiphop_name": "Your Old Droog"}, +    {"hiphop_name": "Yubin"}, +    {"hiphop_name": "Yukmouth"}, +    {"hiphop_name": "Yung Berg"}, +    {"hiphop_name": "Yung Joc"}, +    {"hiphop_name": "Yung L.A."}, +    {"hiphop_name": "Yung Lean"}, +    {"hiphop_name": "Yung Ro"}, +    {"hiphop_name": "Yung Wun"}, +    {"hiphop_name": "Yung6ix"}, +    {"hiphop_name": "YZ"}, +    {"hiphop_name": "Z-Ro"}, +    {"hiphop_name": "Zack de la Rocha"}, +    {"hiphop_name": "Zaytoven"}, +    {"hiphop_name": "Zebra Katz"}, +    {"hiphop_name": "Zelooperz"}, +    {"hiphop_name": "Zico"} +]
\ No newline at end of file diff --git a/pysite/mixins.py b/pysite/mixins.py index efbc2d0c..0a9402a9 100644 --- a/pysite/mixins.py +++ b/pysite/mixins.py @@ -4,7 +4,6 @@ from weakref import ref  from flask import Blueprint  from rethinkdb.ast import Table -from pysite.constants import DEBUG_MODE  from pysite.database import RethinkDB @@ -53,9 +52,6 @@ class DBMixin:          cls._db = ref(manager.db) -        if DEBUG_MODE: -            manager.db.create_table(cls.table_name, primary_key=cls.table_primary_key) -      @property      def table(self) -> Table:          return self.db.query(self.table_name) diff --git a/pysite/views/api/bot/tags.py b/pysite/views/api/bot/tags.py index 21b64c2c..ee1a1bee 100644 --- a/pysite/views/api/bot/tags.py +++ b/pysite/views/api/bot/tags.py @@ -32,7 +32,6 @@ class TagsView(APIView, DBMixin):      path = "/tags"      name = "api.bot.tags"      table_name = "tags" -    table_primary_key = "tag_name"      @api_key      @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) diff --git a/pysite/views/api/bot/user.py b/pysite/views/api/bot/user.py index da5fe0aa..3d8d7271 100644 --- a/pysite/views/api/bot/user.py +++ b/pysite/views/api/bot/user.py @@ -23,7 +23,6 @@ class UserView(APIView, DBMixin):      path = "/user"      name = "api.bot.user"      table_name = "users" -    table_primary_key = "user_id"      @api_key      @api_params(schema=SCHEMA, validation_type=ValidationTypes.json) diff --git a/pysite/views/wiki/edit.py b/pysite/views/wiki/edit.py index 0d70fed5..9eb50c9e 100644 --- a/pysite/views/wiki/edit.py +++ b/pysite/views/wiki/edit.py @@ -13,9 +13,7 @@ from pysite.rst import render  class EditView(RouteView, DBMixin):      path = "/edit/<path:page>"  # "path" means that it accepts slashes      name = "edit" -      table_name = "wiki" -    table_primary_key = "slug"      @require_roles(*EDITOR_ROLES)      def get(self, page): diff --git a/pysite/views/wiki/page.py b/pysite/views/wiki/page.py index 36fdcd39..500d5c04 100644 --- a/pysite/views/wiki/page.py +++ b/pysite/views/wiki/page.py @@ -10,9 +10,7 @@ from pysite.mixins import DBMixin  class PageView(RouteView, DBMixin):      path = "/wiki/<path:page>"  # "path" means that it accepts slashes      name = "page" -      table_name = "wiki" -    table_primary_key = "slug"      def get(self, page):          obj = self.db.get(self.table_name, page) diff --git a/pysite/views/wiki/source.py b/pysite/views/wiki/source.py index 7038dad9..80f362df 100644 --- a/pysite/views/wiki/source.py +++ b/pysite/views/wiki/source.py @@ -13,9 +13,7 @@ from pysite.mixins import DBMixin  class PageView(RouteView, DBMixin):      path = "/source/<path:page>"  # "path" means that it accepts slashes      name = "source" -      table_name = "wiki" -    table_primary_key = "slug"      def get(self, page):          obj = self.db.get(self.table_name, page) | 
