"""clean genres Revision ID: c7efa5de259d Revises: ad71efd3f249 Create Date: 2019-09-06 18:15:52.372269 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. from models.artists import Artist from models.project_genres import ProjectGenre from models.projects import Project from models.genres import Genre revision = 'c7efa5de259d' down_revision = 'ad71efd3f249' branch_labels = None depends_on = None class Campaign(Project): __tablename__ = 'Campaign' class CampaignGenre(ProjectGenre): __tablename__ = 'CampaignGenre' appollo_genres = [ "Afrikaans", "Alternativa", "Alternative", "Arabic", "Banda sonora", "Bande originale", "Blues", "Bollywood", "Children's Music", "Christian & Gospel", "Classica", "Classical", "Classique", "Clásica", "Clássica", "Colonne sonore", "Comedy", "Country", "Dance", "Dança", "Electronic", "Electrónica", "Eletrónica", "Elettronica", "Films de concerts", "Fitness & Workout", "Hip-Hop/Rap", "Indian Pop", "Inspirational", "J-Pop", "Jazz", "K-Pop", "Kindermuziek", "Klassiek", "Klassik", "Latino", "MPB", "Metal", "Mundo", "Music", "Musica", "Musica per bambini", "Musik", "Musique", "Musique pour enfants", "Musiques du monde", "Muziek", "Música", "Música mexicana", "Navidad", "Películas de conciertos", "Pop", "R&B/Soul", "Reggae", "Regional Indian", "Rock", "Samba", "Sertanejo", "Singer/Songwriter", "Soundtrack", "Soundtracks", "Weltmusik", "Wereldmuziek", "World", "World music", "Électronique", ] old_genres = [ { 'id': 1, 'name': '2-step' }, { 'id': 2, 'name': '20s' }, { 'id': 3, 'name': '30s' }, { 'id': 4, 'name': '40s' }, { 'id': 5, 'name': '4x4' }, { 'id': 6, 'name': '50s' }, { 'id': 7, 'name': '60s' }, { 'id': 8, 'name': '70s' }, { 'id': 9, 'name': '80s' }, { 'id': 10, 'name': '90s' }, { 'id': 11, 'name': 'A Capella' }, { 'id': 12, 'name': 'Acid' }, { 'id': 13, 'name': 'Acid Jazz' }, { 'id': 14, 'name': 'Acoustic' }, { 'id': 15, 'name': 'Adult Contemporary' }, { 'id': 16, 'name': 'African' }, { 'id': 17, 'name': 'Afro-Cuban' }, { 'id': 18, 'name': 'Afrobeat' }, { 'id': 19, 'name': 'Algerian' }, { 'id': 20, 'name': 'Alternative' }, { 'id': 21, 'name': 'Ambient' }, { 'id': 22, 'name': 'American' }, { 'id': 23, 'name': 'Americana' }, { 'id': 24, 'name': 'Antigua' }, { 'id': 25, 'name': 'Arabic Pop' }, { 'id': 26, 'name': 'Asian' }, { 'id': 27, 'name': 'Australian' }, { 'id': 28, 'name': 'Avant-Garde Metal' }, { 'id': 29, 'name': 'Axé' }, { 'id': 30, 'name': 'Bachata' }, { 'id': 31, 'name': 'Baile Funk' }, { 'id': 32, 'name': 'Balearic' }, { 'id': 33, 'name': 'Balkan' }, { 'id': 34, 'name': 'Ballads' }, { 'id': 35, 'name': 'Baroque' }, { 'id': 36, 'name': 'Berlin School' }, { 'id': 37, 'name': 'Bhangra' }, { 'id': 38, 'name': 'Big Band' }, { 'id': 39, 'name': 'Bitpop' }, { 'id': 40, 'name': 'Black Metal' }, { 'id': 41, 'name': 'Bluegrass' }, { 'id': 42, 'name': 'Blues' }, { 'id': 43, 'name': 'Bollywood' }, { 'id': 44, 'name': 'Boogie' }, { 'id': 45, 'name': 'Bosnia' }, { 'id': 46, 'name': 'Bossa Nova' }, { 'id': 47, 'name': 'Brass' }, { 'id': 48, 'name': 'Brazilian' }, { 'id': 49, 'name': 'Brazilian Funk' }, { 'id': 50, 'name': 'Breakbeat' }, { 'id': 51, 'name': 'Breaks' }, { 'id': 52, 'name': 'British' }, { 'id': 53, 'name': 'British Blues' }, { 'id': 54, 'name': 'British Hip-hop' }, { 'id': 55, 'name': 'Britpop' }, { 'id': 56, 'name': 'Calypso' }, { 'id': 57, 'name': 'Canadian' }, { 'id': 58, 'name': 'Canadian Blues' }, { 'id': 59, 'name': 'Cantautore' }, { 'id': 60, 'name': 'Chicago Blues' }, { 'id': 61, 'name': 'Chicago House' }, { 'id': 62, 'name': 'Chilean' }, { 'id': 63, 'name': 'Chillout' }, { 'id': 64, 'name': 'Chiptune' }, { 'id': 65, 'name': 'Choir' }, { 'id': 66, 'name': 'Christian' }, { 'id': 67, 'name': 'Classic Rock' }, { 'id': 68, 'name': 'Classical' }, { 'id': 69, 'name': 'Club' }, { 'id': 70, 'name': 'Comedy' }, { 'id': 71, 'name': 'Conga' }, { 'id': 72, 'name': 'Cordone' }, { 'id': 73, 'name': 'Country' }, { 'id': 74, 'name': 'Crooner' }, { 'id': 75, 'name': 'Crunk' }, { 'id': 76, 'name': 'Crunkcore' }, { 'id': 77, 'name': 'Cuban' }, { 'id': 78, 'name': 'Cumbia' }, { 'id': 79, 'name': 'Dance' }, { 'id': 80, 'name': 'Dancehall' }, { 'id': 81, 'name': 'Danger Music' }, { 'id': 82, 'name': 'Danish' }, { 'id': 83, 'name': 'Dansband' }, { 'id': 84, 'name': 'Dark Ambient' }, { 'id': 85, 'name': 'Darkcore' }, { 'id': 86, 'name': 'Death Metal' }, { 'id': 87, 'name': 'Deep Funk' }, { 'id': 88, 'name': 'Deep House' }, { 'id': 89, 'name': 'Delta Blues' }, { 'id': 90, 'name': 'Disco' }, { 'id': 91, 'name': 'Diva House' }, { 'id': 92, 'name': 'Downtempo' }, { 'id': 93, 'name': 'Dream Trance' }, { 'id': 94, 'name': 'Drum and Bass' }, { 'id': 95, 'name': 'Dub' }, { 'id': 96, 'name': 'Dub Reggae' }, { 'id': 97, 'name': 'Dubstep' }, { 'id': 98, 'name': 'Dutch Hip-hop' }, { 'id': 99, 'name': 'Dutch House' }, { 'id': 100, 'name': 'East Coast' }, { 'id': 101, 'name': 'East Coast Rap' }, { 'id': 102, 'name': 'East Timor' }, { 'id': 103, 'name': 'Easy Listening' }, { 'id': 104, 'name': 'EBM' }, { 'id': 105, 'name': 'Egyptian' }, { 'id': 106, 'name': 'Electro' }, { 'id': 107, 'name': 'Electro House' }, { 'id': 108, 'name': 'Electroacoustic' }, { 'id': 109, 'name': 'Electronic Dub' }, { 'id': 110, 'name': 'Electronica' }, { 'id': 111, 'name': 'Elevator Music' }, { 'id': 112, 'name': 'Emo' }, { 'id': 113, 'name': 'Epic Doom Metal' }, { 'id': 114, 'name': 'Equatorial Guinea' }, { 'id': 115, 'name': 'Ethnic' }, { 'id': 116, 'name': 'Eurodance' }, { 'id': 117, 'name': 'Eurotrance' }, { 'id': 118, 'name': 'Eurovision' }, { 'id': 119, 'name': 'Evergreen' }, { 'id': 120, 'name': 'Experimental' }, { 'id': 121, 'name': 'Faber' }, { 'id': 122, 'name': 'Female Vocalists' }, { 'id': 123, 'name': 'Filter House' }, { 'id': 124, 'name': 'Filthy Dubstep' }, { 'id': 125, 'name': 'Finnish' }, { 'id': 126, 'name': 'Flamenco' }, { 'id': 127, 'name': 'Folk' }, { 'id': 128, 'name': 'Foxtrot' }, { 'id': 129, 'name': 'French Hip-hop' }, { 'id': 130, 'name': 'French House' }, { 'id': 131, 'name': 'Funk' }, { 'id': 132, 'name': 'Funk Carioca' }, { 'id': 133, 'name': 'Funky House' }, { 'id': 134, 'name': 'Funny' }, { 'id': 135, 'name': 'Fusion' }, { 'id': 136, 'name': 'Future Garage' }, { 'id': 137, 'name': 'G-Funk' }, { 'id': 138, 'name': 'Gabber' }, { 'id': 139, 'name': 'Garage' }, { 'id': 140, 'name': 'German Hip-hop' }, { 'id': 141, 'name': 'Ghetto House' }, { 'id': 142, 'name': 'Ghettotech' }, { 'id': 143, 'name': 'Gipsy' }, { 'id': 144, 'name': 'Glam Metal' }, { 'id': 145, 'name': 'Glam Rock' }, { 'id': 146, 'name': 'Glitch' }, { 'id': 147, 'name': 'Glitch Hop' }, { 'id': 148, 'name': 'Goa Trance' }, { 'id': 149, 'name': 'Gospel' }, { 'id': 150, 'name': 'Gothic' }, { 'id': 151, 'name': 'Gothic Metal' }, { 'id': 152, 'name': 'Gothic Rock' }, { 'id': 153, 'name': 'Grime' }, { 'id': 154, 'name': 'Grunge' }, { 'id': 155, 'name': 'Gypsy' }, { 'id': 156, 'name': 'Happy Hardcore' }, { 'id': 157, 'name': 'Hard Dance' }, { 'id': 158, 'name': 'Hard Techno' }, { 'id': 159, 'name': 'Hard Trance' }, { 'id': 160, 'name': 'Hardcore' }, { 'id': 161, 'name': 'Hardstep' }, { 'id': 162, 'name': 'Hardstyle' }, { 'id': 163, 'name': 'Heavy Metal' }, { 'id': 164, 'name': 'Hebrew' }, { 'id': 165, 'name': 'Hellektro' }, { 'id': 166, 'name': 'Hi-NRG' }, { 'id': 167, 'name': 'Hip-hop' }, { 'id': 168, 'name': 'Hiplife' }, { 'id': 169, 'name': 'Honky Tonk' }, { 'id': 170, 'name': 'House' }, { 'id': 171, 'name': 'Hungarian' }, { 'id': 172, 'name': 'Hyperdub' }, { 'id': 173, 'name': 'IDM' }, { 'id': 174, 'name': 'Illbient' }, { 'id': 175, 'name': 'Indian' }, { 'id': 176, 'name': 'Indie' }, { 'id': 177, 'name': 'Indie Folk' }, { 'id': 178, 'name': 'Indie Rock' }, { 'id': 179, 'name': 'Industrial' }, { 'id': 180, 'name': 'Industrial Metal' }, { 'id': 181, 'name': 'Isolationism' }, { 'id': 182, 'name': 'Italo Dance' }, { 'id': 183, 'name': 'Italo Disco' }, { 'id': 184, 'name': 'J-Pop' }, { 'id': 185, 'name': 'Japanese Hip-Hop' }, { 'id': 186, 'name': 'Japanese Noise' }, { 'id': 187, 'name': 'Jazz' }, { 'id': 188, 'name': 'Jazz Guitar' }, { 'id': 189, 'name': 'Jazz Piano' }, { 'id': 190, 'name': 'Jewish' }, { 'id': 191, 'name': 'Jump-Up' }, { 'id': 192, 'name': 'Jumpstyle' }, { 'id': 193, 'name': 'K-Pop' }, { 'id': 194, 'name': 'Kizomba' }, { 'id': 195, 'name': 'Klezmer' }, { 'id': 196, 'name': 'Krautrock' }, { 'id': 197, 'name': 'Kuduro' }, { 'id': 198, 'name': 'Latin' }, { 'id': 199, 'name': 'Latin House' }, { 'id': 200, 'name': 'Latin Jazz' }, { 'id': 201, 'name': 'Lebanese' }, { 'id': 202, 'name': 'Lo-fi' }, { 'id': 203, 'name': 'Louisiana Blues' }, { 'id': 204, 'name': 'Lounge' }, { 'id': 205, 'name': 'Love Songs' }, { 'id': 206, 'name': 'Lowercase' }, { 'id': 207, 'name': 'Luxemburg' }, { 'id': 208, 'name': 'Macedonian' }, { 'id': 209, 'name': 'Madchester' }, { 'id': 210, 'name': 'Makossa' }, { 'id': 211, 'name': 'Malmö' }, { 'id': 212, 'name': 'Mambo' }, { 'id': 213, 'name': 'Mariachi' }, { 'id': 214, 'name': 'Mathcore' }, { 'id': 215, 'name': 'Melodifestivalen' }, { 'id': 216, 'name': 'Merengue' }, { 'id': 217, 'name': 'Mestizo' }, { 'id': 218, 'name': 'Metal' }, { 'id': 219, 'name': 'Metalcore' }, { 'id': 220, 'name': 'Mexican' }, { 'id': 221, 'name': 'Mexican Hip-hop' }, { 'id': 222, 'name': 'Middle Eastern' }, { 'id': 223, 'name': 'Minimal' }, { 'id': 224, 'name': 'Modern Classical' }, { 'id': 225, 'name': 'Montenegro' }, { 'id': 226, 'name': 'MPB' }, { 'id': 227, 'name': 'Neo-Soul' }, { 'id': 228, 'name': 'Neofolk' }, { 'id': 229, 'name': 'Nerdcore' }, { 'id': 230, 'name': 'New Jack Swing' }, { 'id': 231, 'name': 'New York' }, { 'id': 232, 'name': 'Nintendocore' }, { 'id': 233, 'name': 'Noise' }, { 'id': 234, 'name': 'Nortec' }, { 'id': 235, 'name': 'North Africa' }, { 'id': 236, 'name': 'North Korea' }, { 'id': 237, 'name': 'Northern Soul' }, { 'id': 238, 'name': 'Norwegian' }, { 'id': 239, 'name': 'Nu Disco' }, { 'id': 240, 'name': 'Nu Jazz' }, { 'id': 241, 'name': 'Oldies' }, { 'id': 242, 'name': 'One Hit Wonders' }, { 'id': 243, 'name': 'Opera' }, { 'id': 244, 'name': 'Orchestral' }, { 'id': 245, 'name': 'Oriental' }, { 'id': 246, 'name': 'P-Funk' }, { 'id': 247, 'name': 'Pagode' }, { 'id': 248, 'name': 'Parody Music' }, { 'id': 249, 'name': 'Piano Blues' }, { 'id': 250, 'name': 'Pirate Metal' }, { 'id': 251, 'name': 'Pop' }, { 'id': 252, 'name': 'Post-Rock' }, { 'id': 253, 'name': 'Power Ballad' }, { 'id': 254, 'name': 'Power Metal' }, { 'id': 255, 'name': 'Power Noise' }, { 'id': 256, 'name': 'Power Rock' }, { 'id': 257, 'name': 'Progg' }, { 'id': 258, 'name': 'Progressive House' }, { 'id': 259, 'name': 'Progressive Rock' }, { 'id': 260, 'name': 'Psybient' }, { 'id': 261, 'name': 'Psychadelic' }, { 'id': 262, 'name': 'Psychadelic Soul' }, { 'id': 263, 'name': 'Psytrance' }, { 'id': 264, 'name': 'Punk' }, { 'id': 265, 'name': 'R&B' }, { 'id': 266, 'name': 'Ragga' }, { 'id': 267, 'name': 'Rai' }, { 'id': 268, 'name': 'Rap' }, { 'id': 269, 'name': 'Rapcore' }, { 'id': 270, 'name': 'Rat Pack' }, { 'id': 271, 'name': 'Rave' }, { 'id': 272, 'name': 'Reggae' }, { 'id': 273, 'name': 'Reggaeton' }, { 'id': 274, 'name': 'Renaissance' }, { 'id': 275, 'name': 'Rhythmic Noise' }, { 'id': 276, 'name': 'Rhytm and Blues' }, { 'id': 277, 'name': 'Rock' }, { 'id': 278, 'name': 'Rockabilly' }, { 'id': 279, 'name': 'Rocksteady' }, { 'id': 280, 'name': 'Romanian' }, { 'id': 281, 'name': 'Roots' }, { 'id': 282, 'name': 'Rotterdam Techno' }, { 'id': 283, 'name': 'Rumba' }, { 'id': 284, 'name': 'Russian Chanson' }, { 'id': 285, 'name': 'Russian Hip-hop' }, { 'id': 286, 'name': 'Sadcore' }, { 'id': 287, 'name': 'Salsa' }, { 'id': 288, 'name': 'Samba' }, { 'id': 289, 'name': 'Sambass' }, { 'id': 290, 'name': 'Schlager' }, { 'id': 291, 'name': 'Schranz' }, { 'id': 292, 'name': 'Screamo' }, { 'id': 293, 'name': 'Serbian' }, { 'id': 294, 'name': 'Sertanejo' }, { 'id': 295, 'name': 'Shoegazer' }, { 'id': 296, 'name': 'Singer-Songwriter' }, { 'id': 297, 'name': 'Ska' }, { 'id': 298, 'name': 'Ska Punk' }, { 'id': 299, 'name': 'Slow Jams' }, { 'id': 300, 'name': 'Slowcore' }, { 'id': 301, 'name': 'Slowfox' }, { 'id': 302, 'name': 'Sludge Metal' }, { 'id': 303, 'name': 'Smooth Jazz' }, { 'id': 304, 'name': 'Soca' }, { 'id': 305, 'name': 'Soukous' }, { 'id': 306, 'name': 'Soul' }, { 'id': 307, 'name': 'Soul Jazz' }, { 'id': 308, 'name': 'Soulful House' }, { 'id': 309, 'name': 'Soundtracks' }, { 'id': 310, 'name': 'Southern Rock' }, { 'id': 311, 'name': 'Space Age Pop' }, { 'id': 312, 'name': 'Spacesynth' }, { 'id': 313, 'name': 'Spanish Guitar' }, { 'id': 314, 'name': 'Spanish Hip Hop' }, { 'id': 315, 'name': 'Speed Garage' }, { 'id': 316, 'name': 'Speed Metal' }, { 'id': 317, 'name': 'Spoken Word' }, { 'id': 318, 'name': 'St. Louis Blues' }, { 'id': 319, 'name': 'Stand-up Comedy' }, { 'id': 320, 'name': 'Stoner Rock' }, { 'id': 321, 'name': 'Sufi' }, { 'id': 322, 'name': 'Svensk Hiphop' }, { 'id': 323, 'name': 'Svenskt' }, { 'id': 324, 'name': 'Swedish Hip hop' }, { 'id': 325, 'name': 'Swing' }, { 'id': 326, 'name': 'Swiss' }, { 'id': 327, 'name': 'Symphony' }, { 'id': 328, 'name': 'Syrian' }, { 'id': 329, 'name': 'Tango' }, { 'id': 330, 'name': 'Tech House' }, { 'id': 331, 'name': 'Techno' }, { 'id': 332, 'name': 'Thai Rock' }, { 'id': 333, 'name': 'Thrash Metal' }, { 'id': 334, 'name': 'Timba' }, { 'id': 335, 'name': 'Trance' }, { 'id': 336, 'name': 'Trip-hop' }, { 'id': 337, 'name': 'Twee' }, { 'id': 338, 'name': 'UK Garage' }, { 'id': 339, 'name': 'Umeå' }, { 'id': 340, 'name': 'Underground Hip-hop' }, { 'id': 341, 'name': 'Underground Rap' }, { 'id': 342, 'name': 'Urban Jazz' }, { 'id': 343, 'name': 'US Garage' }, { 'id': 344, 'name': 'Valencia' }, { 'id': 345, 'name': 'Venezuelan' }, { 'id': 346, 'name': 'Video Games' }, { 'id': 347, 'name': 'Vocal House' }, { 'id': 348, 'name': 'Vocal Jazz' }, { 'id': 349, 'name': 'Vocal Trance' }, { 'id': 350, 'name': 'West African' }, { 'id': 351, 'name': 'West Coast' }, { 'id': 352, 'name': 'West Coast Rap' }, { 'id': 353, 'name': 'Wobble' }, { 'id': 354, 'name': 'World' }, { 'id': 355, 'name': 'World Music' }, { 'id': 356, 'name': 'Zorba' } ] def upgrade(): # ### commands auto generated by Alembic - please adjust! ### bind = op.get_bind() session = sa.orm.Session(bind=bind) session.query(Genre).filter(Genre.id > 354).delete(synchronize_session=False) start = 355 stop = start + len(appollo_genres) new_genres = [ Genre(id=genre[0], name=genre[1]) for genre in zip(range(start, stop, 1), appollo_genres) if genre[1] not in [ genre['name'] for genre in old_genres ] ] session.bulk_save_objects(new_genres) session.commit() session.close() # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### bind = op.get_bind() session = sa.orm.Session(bind=bind) bind.execute('''DELETE FROM "ArtistLastGenre"''') session.query(CampaignGenre).delete(synchronize_session=False) session.query(Genre).delete(synchronize_session=False) # revert old genres genres = [ Genre(id=genre['id'], name=genre['name']) for genre in old_genres ] session.bulk_save_objects(genres) # default genre genre_pop = session.query(Genre).filter(Genre.name == 'Pop').first() # set default genre if session.query(Campaign.query.filter(Campaign.id == 1).exists()).scalar(): campains_id = [ campaign.id for campaign in session.query(Campaign).all() ] campaign_genres = [ CampaignGenre(campaign_id=campaign_id, genre_id=genre_pop.id) for campaign_id in campains_id ] session.bulk_save_objects(campaign_genres) # set default genre for ArtistLastGenre artists_id = [ artist.id for artist in session.query(Artist).all() ] for artist_id in artists_id: bind.execute('''INSERT INTO "ArtistLastGenre" VALUES ({}, {})'''.format(artist_id, genre_pop.id)) session.commit() session.close() # ### end Alembic commands ###