Commit 26d0a91b authored by Seb's avatar Seb
Browse files

Track models + signals refactor to work with swappable models

parent 392515fa
# Generated by Django 2.2.17 on 2021-01-28 03:08
from django.db import migrations, models
import django.db.models.deletion
import wagtailvideos.models
class Migration(migrations.Migration):
dependencies = [
('app', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='CustomTrack',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('file', models.FileField(upload_to=wagtailvideos.models.get_upload_to, verbose_name='file')),
('kind', models.CharField(choices=[('subtitles', 'Subtitles'), ('captions', 'Captions'), ('descriptions', 'Descriptions'), ('chapters', 'Chapters'), ('metadata', 'Metadata')], default='subtitles', max_length=50)),
('label', models.CharField(blank=True, help_text='A user-readable title of the text track.', max_length=255)),
('language', models.CharField(blank=True, choices=[('Afar', 'aa'), ('Afar - Djibouti', 'aa-DJ'), ('Afar - Eritrea', 'aa-ER'), ('Afar - Ethiopia', 'aa-ET'), ('Afrikaans', 'af'), ('Afrikaans - Namibia', 'af-NA'), ('Afrikaans - South Africa', 'af-ZA'), ('Aghem', 'agq'), ('Aghem - Cameroon', 'agq-CM'), ('Akan', 'ak'), ('Akan - Ghana', 'ak-GH'), ('Albanian', 'sq'), ('Albanian - Albania', 'sq-AL'), ('Albanian - North Macedonia', 'sq-MK'), ('Alsatian', 'gsw'), ('Alsatian - France', 'gsw-FR'), ('Alsatian - Liechtenstein', 'gsw-LI'), ('Alsatian - Switzerland', 'gsw-CH'), ('Amharic', 'am'), ('Amharic - Ethiopia', 'am-ET'), ('Arabic', 'ar'), ('Arabic - Algeria', 'ar-DZ'), ('Arabic - Bahrain', 'ar-BH'), ('Arabic - Chad', 'ar-TD'), ('Arabic - Comoros', 'ar-KM'), ('Arabic - Djibouti', 'ar-DJ'), ('Arabic - Egypt', 'ar-EG'), ('Arabic - Eritrea', 'ar-ER'), ('Arabic - Iraq', 'ar-IQ'), ('Arabic - Israel', 'ar-IL'), ('Arabic - Jordan', 'ar-JO'), ('Arabic - Kuwait', 'ar-KW'), ('Arabic - Lebanon', 'ar-LB'), ('Arabic - Libya', 'ar-LY'), ('Arabic - Mauritania', 'ar-MR'), ('Arabic - Morocco', 'ar-MA'), ('Arabic - Oman', 'ar-OM'), ('Arabic - Palestinian Authority', 'ar-PS'), ('Arabic - Qatar', 'ar-QA'), ('Arabic - Saudi Arabia', 'ar-SA'), ('Arabic - Somalia', 'ar-SO'), ('Arabic - South Sudan', 'ar-SS'), ('Arabic - Sudan', 'ar-SD'), ('Arabic - Syria', 'ar-SY'), ('Arabic - Tunisia', 'ar-TN'), ('Arabic - U.A.E.', 'ar-AE'), ('Arabic - World', 'ar-001'), ('Arabic - Yemen', 'ar-YE'), ('Armenian', 'hy'), ('Armenian - Armenia', 'hy-AM'), ('Assamese', 'as'), ('Assamese - India', 'as-IN'), ('Asturian', 'ast'), ('Asturian - Spain', 'ast-ES'), ('Asu', 'asa'), ('Asu - Tanzania', 'asa-TZ'), ('Azerbaijani (Cyrillic)', 'az-Cyrl'), ('Azerbaijani (Cyrillic) - Azerbaijan', 'az-Cyrl-AZ'), ('Azerbaijani (Latin)', 'az'), ('Azerbaijani (Latin), Latn', 'az-Latn'), ('Azerbaijani (Latin) - Azerbaijan', 'az-Latn-AZ'), ('Bafia', 'ksf'), ('Bafia - Cameroon', 'ksf-CM'), ('Bamanankan', 'bm'), ('Bamanankan (Latin) - Mali', 'bm-Latn-ML'), ('Bangla', 'bn'), ('Bangla - Bangladesh', 'bn-BD'), ('Bangla - India', 'bn-IN'), ('Basaa', 'bas'), ('Basaa - Cameroon', 'bas-CM'), ('Bashkir', 'ba'), ('Bashkir - Russia', 'ba-RU'), ('Basque', 'eu'), ('Basque - Spain', 'eu-ES'), ('Belarusian', 'be'), ('Belarusian - Belarus', 'be-BY'), ('Bemba', 'bem'), ('Bemba - Zambia', 'bem-ZM'), ('Bena', 'bez'), ('Bena - Tanzania', 'bez-TZ'), ('Blin', 'byn'), ('Blin - Eritrea', 'byn-ER'), ('Bodo', 'brx'), ('Bodo - India', 'brx-IN'), ('Bosnian (Cyrillic)', 'bs-Cyrl'), ('Bosnian (Cyrillic) - Bosnia and Herzegovina', 'bs-Cyrl-BA'), ('Bosnian (Latin)', 'bs'), ('Bosnian (Latin), Latn', 'bs-Latn'), ('Bosnian (Latin) - Bosnia and Herzegovina', 'bs-Latn-BA'), ('Breton', 'br'), ('Breton - France', 'br-FR'), ('Bulgarian', 'bg'), ('Bulgarian - Bulgaria', 'bg-BG'), ('Burmese', 'my'), ('Burmese - Myanmar', 'my-MM'), ('Catalan', 'ca'), ('Catalan - Andorra', 'ca-AD'), ('Catalan - France', 'ca-FR'), ('Catalan - Italy', 'ca-IT'), ('Catalan - Spain', 'ca-ES'), ('Cebuano', 'ceb'), ('Cebuan (Latin)', 'ceb-Latn'), ('Cebuan (Latin) - Philippines', 'ceb-Latn-PH'), ('Central Atlas Tamazight (Latin) - Morocco', 'tzm-Latn-MA'), ('Central Kurdish', 'ku'), ('Central Kurdish, Arab', 'ku-Arab'), ('Central Kurdish - Iraq', 'ku-Arab-IQ'), ('Chakma', 'ccp'), ('Chakma - Chakma', 'ccp-Cakm'), ('Chakma - Bangladesh', 'ccp-Cakm-BD'), ('Chakma - India', 'ccp-Cakm-IN'), ('Chechen - Russia', 'cd-RU'), ('Cherokee', 'chr'), ('Cherokee, Cher', 'chr-Cher'), ('Cherokee - United States', 'chr-Cher-US'), ('Chiga', 'cgg'), ('Chiga - Uganda', 'cgg-UG'), ('Chinese (Simplified)', 'zh'), ('Chinese (Simplified), Hans', 'zh-Hans'), ("Chinese (Simplified) - People's Republic of China", 'zh-CN'), ('Chinese (Simplified) - Singapore', 'zh-SG'), ('Chinese (Traditional)', 'zh-Hant'), ('Chinese (Traditional) - Hong Kong S.A.R.', 'zh-HK'), ('Chinese (Traditional) - Macao S.A.R.', 'zh-MO'), ('Chinese (Traditional) - Taiwan', 'zh-TW'), ('Church Slavic - Russia', 'cu-RU'), ('Congo Swahili', 'swc'), ('Congo Swahili - Congo DRC', 'swc-CD'), ('Cornish', 'kw'), ('Cornish - United Kingdom', 'kw-GB'), ('Corsican', 'co'), ('Corsican - France', 'co-FR'), ('Croatian', 'hr,'), ('Croatian - Croatia', 'hr-HR'), ('Croatian (Latin) - Bosnia and Herzegovina', 'hr-BA'), ('Czech', 'cs'), ('Czech - Czech Republic', 'cs-CZ'), ('Danish', 'da'), ('Danish - Denmark', 'da-DK'), ('Danish - Greenland', 'da-GL'), ('Dari', 'prs'), ('Dari - Afghanistan', 'prs-AF'), ('Divehi', 'dv'), ('Divehi - Maldives', 'dv-MV'), ('Duala', 'dua'), ('Duala - Cameroon', 'dua-CM'), ('Dutch', 'nl'), ('Dutch - Aruba', 'nl-AW'), ('Dutch - Belgium', 'nl-BE'), ('Dutch - Bonaire, Sint Eustatius and Saba', 'nl-BQ'), ('Dutch - Curaçao', 'nl-CW'), ('Dutch - Netherlands', 'nl-NL'), ('Dutch - Sint Maarten', 'nl-SX'), ('Dutch - Suriname', 'nl-SR'), ('Dzongkha', 'dz'), ('Dzongkha - Bhutan', 'dz-BT'), ('Embu', 'ebu'), ('Embu - Kenya', 'ebu-KE'), ('English', 'en'), ('English - American Samoa', 'en-AS'), ('English - Anguilla', 'en-AI'), ('English - Antigua and Barbuda', 'en-AG'), ('English - Australia', 'en-AU'), ('English - Austria', 'en-AT'), ('English - Bahamas', 'en-BS'), ('English - Barbados', 'en-BB'), ('English - Belgium', 'en-BE'), ('English - Belize', 'en-BZ'), ('English - Bermuda', 'en-BM'), ('English - Botswana', 'en-BW'), ('English - British Indian Ocean Territory', 'en-IO'), ('English - British Virgin Islands', 'en-VG'), ('English - Burundi', 'en-BI'), ('English - Cameroon', 'en-CM'), ('English - Canada', 'en-CA'), ('English - Caribbean', 'en-029'), ('English - Cayman Islands', 'en-KY'), ('English - Christmas Island', 'en-CX'), ('English - Cocos [Keeling] Islands', 'en-CC'), ('English - Cook Islands', 'en-CK'), ('English - Cyprus', 'en-CY'), ('English - Denmark', 'en-DK'), ('English - Dominica', 'en-DM'), ('English - Eritrea', 'en-ER'), ('English - Europe', 'en-150'), ('English - Falkland Islands', 'en-FK'), ('English - Finland', 'en-FI'), ('English - Fiji', 'en-FJ'), ('English - Gambia', 'en-GM'), ('English - Germany', 'en-DE'), ('English - Ghana', 'en-GH'), ('English - Gibraltar', 'en-GI'), ('English - Grenada', 'en-GD'), ('English - Guam', 'en-GU'), ('English - Guernsey', 'en-GG'), ('English - Guyana', 'en-GY'), ('English - Hong Kong', 'en-HK'), ('English - India', 'en-IN'), ('English - Ireland', 'en-IE'), ('English - Isle of Man', 'en-IM'), ('English - Israel', 'en-IL'), ('English - Jamaica', 'en-JM'), ('English - Jersey', 'en-JE'), ('English - Kenya', 'en-KE'), ('English - Kiribati', 'en-KI'), ('English - Lesotho', 'en-LS'), ('English - Liberia', 'en-LR'), ('English - Macao SAR', 'en-MO'), ('English - Madagascar', 'en-MG'), ('English - Malawi', 'en-MW'), ('English - Malaysia', 'en-MY'), ('English - Malta', 'en-MT'), ('English - Marshall Islands', 'en-MH'), ('English - Mauritius', 'en-MU'), ('English - Micronesia', 'en-FM'), ('English - Montserrat', 'en-MS'), ('English - Namibia', 'en-NA'), ('English - Nauru', 'en-NR'), ('English - Netherlands', 'en-NL'), ('English - New Zealand', 'en-NZ'), ('English - Nigeria', 'en-NG'), ('English - Niue', 'en-NU'), ('English - Norfolk Island', 'en-NF'), ('English - Northern Mariana Islands', 'en-MP'), ('English - Pakistan', 'en-PK'), ('English - Palau', 'en-PW'), ('English - Papua New Guinea', 'en-PG'), ('English - Pitcairn Islands', 'en-PN'), ('English - Puerto Rico', 'en-PR'), ('English - Republic of the Philippines', 'en-PH'), ('English - Rwanda', 'en-RW'), ('English - Saint Kitts and Nevis', 'en-KN'), ('English - Saint Lucia', 'en-LC'), ('English - Saint Vincent and the Grenadines', 'en-VC'), ('English - Samoa', 'en-WS'), ('English - Seychelles', 'en-SC'), ('English - Sierra Leone', 'en-SL'), ('English - Singapore', 'en-SG'), ('English - Sint Maarten', 'en-SX'), ('English - Slovenia', 'en-SI'), ('English - Solomon Islands', 'en-SB'), ('English - South Africa', 'en-ZA'), ('English - South Sudan', 'en-SS'), ('English - St Helena, Ascension, Tristan da Cunha', 'en-SH'), ('English - Sudan', 'en-SD'), ('English - Swaziland', 'en-SZ'), ('English - Sweden', 'en-SE'), ('English - Switzerland', 'en-CH'), ('English - Tanzania', 'en-TZ'), ('English - Tokelau', 'en-TK'), ('English - Tonga', 'en-TO'), ('English - Trinidad and Tobago', 'en-TT'), ('English - Turks and Caicos Islands', 'en-TC'), ('English - Tuvalu', 'en-TV'), ('English - Uganda', 'en-UG'), ('English - United Arab Emirates', 'en-AE'), ('English - United Kingdom', 'en-GB'), ('English - United States', 'en-US'), ('English - US Minor Outlying Islands', 'en-UM'), ('English - US Virgin Islands', 'en-VI'), ('English - Vanuatu', 'en-VU'), ('English - World', 'en-001'), ('English - Zambia', 'en-ZM'), ('English - Zimbabwe', 'en-ZW'), ('Esperanto', 'eo'), ('Esperanto - World', 'eo-001'), ('Estonian', 'et'), ('Estonian - Estonia', 'et-EE'), ('Ewe', 'ee'), ('Ewe - Ghana', 'ee-GH'), ('Ewe - Togo', 'ee-TG'), ('Ewondo', 'ewo'), ('Ewondo - Cameroon', 'ewo-CM'), ('Faroese', 'fo'), ('Faroese - Denmark', 'fo-DK'), ('Faroese - Faroe Islands', 'fo-FO'), ('Filipino', 'fil'), ('Filipino - Philippines', 'fil-PH'), ('Finnish', 'fi'), ('Finnish - Finland', 'fi-FI'), ('French', 'fr'), ('French - Algeria', 'fr-DZ'), ('French - Belgium', 'fr-BE'), ('French - Benin', 'fr-BJ'), ('French - Burkina Faso', 'fr-BF'), ('French - Burundi', 'fr-BI'), ('French - Cameroon', 'fr-CM'), ('French - Canada', 'fr-CA'), ('French - Central African Republic', 'fr-CF'), ('French - Chad', 'fr-TD'), ('French - Comoros', 'fr-KM'), ('French - Congo', 'fr-CG'), ('French - Congo, DRC', 'fr-CD'), ("French - Côte d'Ivoire", 'fr-CI'), ('French - Djibouti', 'fr-DJ'), ('French - Equatorial Guinea', 'fr-GQ'), ('French - France', 'fr-FR'), ('French - French Guiana', 'fr-GF'), ('French - French Polynesia', 'fr-PF'), ('French - Gabon', 'fr-GA'), ('French - Guadeloupe', 'fr-GP'), ('French - Guinea', 'fr-GN'), ('French - Haiti', 'fr-HT'), ('French - Luxembourg', 'fr-LU'), ('French - Madagascar', 'fr-MG'), ('French - Mali', 'fr-ML'), ('French - Martinique', 'fr-MQ'), ('French - Mauritania', 'fr-MR'), ('French - Mauritius', 'fr-MU'), ('French - Mayotte', 'fr-YT'), ('French - Morocco', 'fr-MA'), ('French - New Caledonia', 'fr-NC'), ('French - Niger', 'fr-NE'), ('French - Principality of Monaco', 'fr-MC'), ('French - Reunion', 'fr-RE'), ('French - Rwanda', 'fr-RW'), ('French - Saint Barthélemy', 'fr-BL'), ('French - Saint Martin', 'fr-MF'), ('French - Saint Pierre and Miquelon', 'fr-PM'), ('French - Senegal', 'fr-SN'), ('French - Seychelles', 'fr-SC'), ('French - Switzerland', 'fr-CH'), ('French - Syria', 'fr-SY'), ('French - Togo', 'fr-TG'), ('French - Tunisia', 'fr-TN'), ('French - Vanuatu', 'fr-VU'), ('French - Wallis and Futuna', 'fr-WF'), ('Frisian', 'fy'), ('Frisian - Netherlands', 'fy-NL'), ('Friulian', 'fur'), ('Friulian - Italy', 'fur-IT'), ('Fulah', 'ff'), ('Fulah (Latin)', 'ff-Latn'), ('Fulah (Latin) - Burkina Faso', 'ff-Latn-BF'), ('Fulah - Cameroon', 'ff-CM'), ('Fulah (Latin) - Cameroon', 'ff-Latn-CM'), ('Fulah (Latin) - Gambia', 'ff-Latn-GM'), ('Fulah (Latin) - Ghana', 'ff-Latn-GH'), ('Fulah - Guinea', 'ff-GN'), ('Fulah (Latin) - Guinea', 'ff-Latn-GN'), ('Fulah (Latin) - Guinea-Bissau', 'ff-Latn-GW'), ('Fulah (Latin) - Liberia', 'ff-Latn-LR'), ('Fulah - Mauritania', 'ff-MR'), ('Fulah (Latin) - Mauritania', 'ff-Latn-MR'), ('Fulah (Latin) - Niger', 'ff-Latn-NE'), ('Fulah - Nigeria', 'ff-NG'), ('Fulah (Latin) - Nigeria', 'ff-Latn-NG'), ('Fulah - Senegal', 'ff-Latn-SN'), ('Fulah (Latin) - Sierra Leone', 'ff-Latn-SL'), ('Galician', 'gl'), ('Galician - Spain', 'gl-ES'), ('Ganda', 'lg'), ('Ganda - Uganda', 'lg-UG'), ('Georgian', 'ka'), ('Georgian - Georgia', 'ka-GE'), ('German', 'de'), ('German - Austria', 'de-AT'), ('German - Belgium', 'de-BE'), ('German - Germany', 'de-DE'), ('German - Italy', 'de-IT'), ('German - Liechtenstein', 'de-LI'), ('German - Luxembourg', 'de-LU'), ('German - Switzerland', 'de-CH'), ('Greek', 'el'), ('Greek - Cyprus', 'el-CY'), ('Greek - Greece', 'el-GR'), ('Greenlandic', 'kl'), ('Greenlandic - Greenland', 'kl-GL'), ('Guarani', 'gn'), ('Guarani - Paraguay', 'gn-PY'), ('Gujarati', 'gu'), ('Gujarati - India', 'gu-IN'), ('Gusii', 'guz'), ('Gusii - Kenya', 'guz-KE'), ('Hausa (Latin)', 'ha'), ('Hausa (Latin), Latn', 'ha-Latn'), ('Hausa (Latin) - Ghana', 'ha-Latn-GH'), ('Hausa (Latin) - Niger', 'ha-Latn-NE'), ('Hausa (Latin) - Nigeria', 'ha-Latn-NG'), ('Hawaiian', 'haw'), ('Hawaiian - United States', 'haw-US'), ('Hebrew', 'he'), ('Hebrew - Israel', 'he-IL'), ('Hindi', 'hi'), ('Hindi - India', 'hi-IN'), ('Hungarian', 'hu'), ('Hungarian - Hungary', 'hu-HU'), ('Icelandic', 'is'), ('Icelandic - Iceland', 'is-IS'), ('Igbo', 'ig'), ('Igbo - Nigeria', 'ig-NG'), ('Indonesian', 'id'), ('Indonesian - Indonesia', 'id-ID'), ('Interlingua', 'ia'), ('Interlingua - France', 'ia-FR'), ('Interlingua - World', 'ia-001'), ('Inuktitut (Latin)', 'iu'), ('Inuktitut (Latin), Latn', 'iu-Latn'), ('Inuktitut (Latin) - Canada', 'iu-Latn-CA'), ('Inuktitut (Syllabics)', 'iu-Cans'), ('Inuktitut (Syllabics) - Canada', 'iu-Cans-CA'), ('Irish', 'ga'), ('Irish - Ireland', 'ga-IE'), ('Italian', 'it'), ('Italian - Italy', 'it-IT'), ('Italian - San Marino', 'it-SM'), ('Italian - Switzerland', 'it-CH'), ('Italian - Vatican City', 'it-VA'), ('Japanese', 'ja'), ('Japanese - Japan', 'ja-JP'), ('Javanese', 'jv'), ('Javanese - Latin', 'jv-Latn'), ('Javanese - Latin, Indonesia', 'jv-Latn-ID'), ('Jola-Fonyi', 'dyo'), ('Jola-Fonyi - Senegal', 'dyo-SN'), ('Kabuverdianu', 'kea'), ('Kabuverdianu - Cabo Verde', 'kea-CV'), ('Kabyle', 'kab'), ('Kabyle - Algeria', 'kab-DZ'), ('Kako', 'kkj'), ('Kako - Cameroon', 'kkj-CM'), ('Kalenjin', 'kln'), ('Kalenjin - Kenya', 'kln-KE'), ('Kamba', 'kam'), ('Kamba - Kenya', 'kam-KE'), ('Kannada', 'kn'), ('Kannada - India', 'kn-IN'), ('Kashmiri', 'ks'), ('Kashmiri - Perso-Arabic', 'ks-Arab'), ('Kashmiri - Perso-Arabic, IN', 'ks-Arab-IN'), ('Kazakh', 'kk'), ('Kazakh - Kazakhstan', 'kk-KZ'), ('Khmer', 'km'), ('Khmer - Cambodia', 'km-KH'), ("K'iche", 'quc'), ("K'iche - Guatemala", 'quc-Latn-GT'), ('Kikuyu', 'ki'), ('Kikuyu - Kenya', 'ki-KE'), ('Kinyarwanda', 'rw'), ('Kinyarwanda - Rwanda', 'rw-RW'), ('Kiswahili', 'sw'), ('Kiswahili - Kenya', 'sw-KE'), ('Kiswahili - Tanzania', 'sw-TZ'), ('Kiswahili - Uganda', 'sw-UG'), ('Konkani', 'kok'), ('Konkani - India', 'kok-IN'), ('Korean', 'ko'), ('Korean - Korea', 'ko-KR'), ('Korean - North Korea', 'ko-KP'), ('Koyra Chiini', 'khq'), ('Koyra Chiini - Mali', 'khq-ML'), ('Koyraboro Senni', 'ses'), ('Koyraboro Senni - Mali', 'ses-ML'), ('Kwasio', 'nmg'), ('Kwasio - Cameroon', 'nmg-CM'), ('Kyrgyz', 'ky'), ('Kyrgyz - Kyrgyzstan', 'ky-KG'), ('Kurdish - Perso-Arabic, Iran', 'ku-Arab-IR'), ('Lakota', 'lkt'), ('Lakota - United States', 'lkt-US'), ('Langi', 'lag'), ('Langi - Tanzania', 'lag-TZ'), ('Lao', 'lo'), ('Lao - Lao P.D.R.', 'lo-LA'), ('Latvian', 'lv'), ('Latvian - Latvia', 'lv-LV'), ('Lingala', 'ln'), ('Lingala - Angola', 'ln-AO'), ('Lingala - Central African Republic', 'ln-CF'), ('Lingala - Congo', 'ln-CG'), ('Lingala - Congo DRC', 'ln-CD'), ('Lithuanian', 'lt'), ('Lithuanian - Lithuania', 'lt-LT'), ('Low German', 'nds'), ('Low German - Germany', 'nds-DE'), ('Low German - Netherlands', 'nds-NL'), ('Lower Sorbian', 'dsb'), ('Lower Sorbian - Germany', 'dsb-DE'), ('Luba-Katanga', 'lu'), ('Luba-Katanga - Congo DRC', 'lu-CD'), ('Luo', 'luo'), ('Luo - Kenya', 'luo-KE'), ('Luxembourgish', 'lb'), ('Luxembourgish - Luxembourg', 'lb-LU'), ('Luyia', 'luy'), ('Luyia - Kenya', 'luy-KE'), ('Macedonian', 'mk'), ('Macedonian - North Macedonia', 'mk-MK'), ('Machame', 'jmc'), ('Machame - Tanzania', 'jmc-TZ'), ('Makhuwa-Meetto', 'mgh'), ('Makhuwa-Meetto - Mozambique', 'mgh-MZ'), ('Makonde', 'kde'), ('Makonde - Tanzania', 'kde-TZ'), ('Malagasy', 'mg'), ('Malagasy - Madagascar', 'mg-MG'), ('Malay', 'ms'), ('Malay - Brunei Darussalam', 'ms-BN'), ('Malay - Malaysia', 'ms-MY'), ('Malayalam', 'ml'), ('Malayalam - India', 'ml-IN'), ('Maltese', 'mt'), ('Maltese - Malta', 'mt-MT'), ('Manx', 'gv'), ('Manx - Isle of Man', 'gv-IM'), ('Maori', 'mi'), ('Maori - New Zealand', 'mi-NZ'), ('Mapudungun', 'arn'), ('Mapudungun - Chile', 'arn-CL'), ('Marathi', 'mr'), ('Marathi - India', 'mr-IN'), ('Masai', 'mas'), ('Masai - Kenya', 'mas-KE'), ('Masai - Tanzania', 'mas-TZ'), ('Mazanderani - Iran', 'mzn-IR'), ('Meru', 'mer'), ('Meru - Kenya', 'mer-KE'), ("Meta'", 'mgo'), ("Meta' - Cameroon", 'mgo-CM'), ('Mohawk', 'moh'), ('Mohawk - Canada', 'moh-CA'), ('Mongolian (Cyrillic)', 'mn'), ('Mongolian (Cyrillic), Cyrl', 'mn-Cyrl'), ('Mongolian (Cyrillic) - Mongolia', 'mn-MN'), ('Mongolian (Traditional Mongolian)', 'mn-Mong'), ("Mongolian (Traditional Mongolian) - People's Republic of China", 'mn-Mong-CN'), ('Mongolian (Traditional Mongolian) - Mongolia', 'mn-Mong-MN'), ('Morisyen', 'mfe'), ('Morisyen - Mauritius', 'mfe-MU'), ('Mundang', 'mua'), ('Mundang - Cameroon', 'mua-CM'), ("N'ko", 'nqo'), ("N'ko - Guinea", 'nqo-GN'), ('Nama', 'naq'), ('Nama - Namibia', 'naq-NA'), ('Nepali', 'ne'), ('Nepali - India', 'ne-IN'), ('Nepali - Nepal', 'ne-NP'), ('Ngiemboon', 'nnh'), ('Ngiemboon - Cameroon', 'nnh-CM'), ('Ngomba', 'jgo'), ('Ngomba - Cameroon', 'jgo-CM'), ('Northern Luri - Iraq', 'lrc-IQ'), ('Northern Luri - Iran', 'lrc-IR'), ('North Ndebele', 'nd'), ('North Ndebele - Zimbabwe', 'nd-ZW'), ('Norwegian (Bokmal)', 'no'), ('Norwegian (Bokmal), nb', 'nb'), ('Norwegian (Bokmal) - Norway', 'nb-NO'), ('Norwegian (Nynorsk)', 'nn'), ('Norwegian (Nynorsk) - Norway', 'nn-NO'), ('Norwegian Bokmål - Svalbard and Jan Mayen', 'nb-SJ'), ('Nuer', 'nus'), ('Nuer - Sudan', 'nus-SD'), ('Nuer - South Sudan', 'nus-SS'), ('Nyankole', 'nyn'), ('Nyankole - Uganda', 'nyn-UG'), ('Occitan', 'oc'), ('Occitan - France', 'oc-FR'), ('Odia', 'or'), ('Odia - India', 'or-IN'), ('Oromo', 'om'), ('Oromo - Ethiopia', 'om-ET'), ('Oromo - Kenya', 'om-KE'), ('Ossetian', 'os'), ('Ossetian - Cyrillic, Georgia', 'os-GE'), ('Ossetian - Cyrillic, Russia', 'os-RU'), ('Pashto', 'ps'), ('Pashto - Afghanistan', 'ps-AF'), ('Pashto - Pakistan', 'ps-PK'), ('Persian', 'fa'), ('Persian - Afghanistan', 'fa-AF'), ('Persian - Iran', 'fa-IR'), ('Polish', 'pl'), ('Polish - Poland', 'pl-PL'), ('Portuguese', 'pt'), ('Portuguese - Angola', 'pt-AO'), ('Portuguese - Brazil', 'pt-BR'), ('Portuguese - Cabo Verde', 'pt-CV'), ('Portuguese - Equatorial Guinea', 'pt-GQ'), ('Portuguese - Guinea-Bissau', 'pt-GW'), ('Portuguese - Luxembourg', 'pt-LU'), ('Portuguese - Macao SAR', 'pt-MO'), ('Portuguese - Mozambique', 'pt-MZ'), ('Portuguese - Portugal', 'pt-PT'), ('Portuguese - São Tomé and Príncipe', 'pt-ST'), ('Portuguese - Switzerland', 'pt-CH'), ('Portuguese - Timor-Leste', 'pt-TL'), ('Prussian', 'prg-001'), ('Pseudo Language - Pseudo locale for east Asian/complex script localization testing', 'qps-ploca'), ('Pseudo Language - Pseudo locale used for localization testing', 'qps-ploc'), ('Pseudo Language - Pseudo locale used for localization testing of mirroredlocales', 'qps-plocm'), ('Punjabi', 'pa'), ('Punjabi, Arab', 'pa-Arab'), ('Punjabi - India', 'pa-IN'), ('Punjabi - Islamic Republic of Pakistan', 'pa-Arab-PK'), ('Quechua', 'quz'), ('Quechua - Bolivia', 'quz-BO'), ('Quechua - Ecuador', 'quz-EC'), ('Quechua - Peru', 'quz-PE'), ('Ripuarian', 'ksh'), ('Ripuarian - Germany', 'ksh-DE'), ('Romanian', 'ro'), ('Romanian - Moldova', 'ro-MD'), ('Romanian - Romania', 'ro-RO'), ('Romansh', 'rm'), ('Romansh - Switzerland', 'rm-CH'), ('Rombo', 'rof'), ('Rombo - Tanzania', 'rof-TZ'), ('Rundi', 'rn'), ('Rundi - Burundi', 'rn-BI'), ('Russian', 'ru'), ('Russian - Belarus', 'ru-BY'), ('Russian - Kazakhstan', 'ru-KZ'), ('Russian - Kyrgyzstan', 'ru-KG'), ('Russian - Moldova', 'ru-MD'), ('Russian - Russia', 'ru-RU'), ('Russian - Ukraine', 'ru-UA'), ('Rwa', 'rwk'), ('Rwa - Tanzania', 'rwk-TZ'), ('Saho', 'ssy'), ('Saho - Eritrea', 'ssy-ER'), ('Sakha', 'sah'), ('Sakha - Russia', 'sah-RU'), ('Samburu', 'saq'), ('Samburu - Kenya', 'saq-KE'), ('Sami (Inari)', 'smn'), ('Sami (Inari) - Finland', 'smn-FI'), ('Sami (Lule)', 'smj'), ('Sami (Lule) - Norway', 'smj-NO'), ('Sami (Lule) - Sweden', 'smj-SE'), ('Sami (Northern)', 'se'), ('Sami (Northern) - Finland', 'se-FI'), ('Sami (Northern) - Norway', 'se-NO'), ('Sami (Northern) - Sweden', 'se-SE'), ('Sami (Skolt)', 'sms'), ('Sami (Skolt) - Finland', 'sms-FI'), ('Sami (Southern)', 'sma'), ('Sami (Southern) - Norway', 'sma-NO'), ('Sami (Southern) - Sweden', 'sma-SE'), ('Sango', 'sg'), ('Sango - Central African Republic', 'sg-CF'), ('Sangu', 'sbp'), ('Sangu - Tanzania', 'sbp-TZ'), ('Sanskrit', 'sa'), ('Sanskrit - India', 'sa-IN'), ('Scottish Gaelic', 'gd'), ('Scottish Gaelic - United Kingdom', 'gd-GB'), ('Sena', 'seh'), ('Sena - Mozambique', 'seh-MZ'), ('Serbian (Cyrillic)', 'sr-Cyrl'), ('Serbian (Cyrillic) - Bosnia and Herzegovina', 'sr-Cyrl-BA'), ('Serbian (Cyrillic) - Montenegro', 'sr-Cyrl-ME'), ('Serbian (Cyrillic) - Serbia', 'sr-Cyrl-RS'), ('Serbian (Cyrillic) - Serbia and Montenegro (Former)', 'sr-Cyrl-CS'), ('Serbian (Latin)', 'sr'), ('Serbian (Latin), Latn', 'sr-Latn'), ('Serbian (Latin) - Bosnia and Herzegovina', 'sr-Latn-BA'), ('Serbian (Latin) - Montenegro', 'sr-Latn-ME'), ('Serbian (Latin) - Serbia', 'sr-Latn-RS'), ('Serbian (Latin) - Serbia and Montenegro (Former)', 'sr-Latn-CS'), ('Sesotho sa Leboa', 'nso'), ('Sesotho sa Leboa - South Africa', 'nso-ZA'), ('Setswana', 'tn'), ('Setswana - Botswana', 'tn-BW'), ('Setswana - South Africa', 'tn-ZA'), ('Shambala', 'ksb'), ('Shambala - Tanzania', 'ksb-TZ'), ('Shona', 'sn'), ('Shona - Latin', 'sn-Latn'), ('Shona - Zimbabwe', 'sn-Latn-ZW'), ('Sindhi', 'sd'), ('Sindhi, Arab', 'sd-Arab'), ('Sindhi - Islamic Republic of Pakistan', 'sd-Arab-PK'), ('Sinhala', 'si'), ('Sinhala - Sri Lanka', 'si-LK'), ('Slovak', 'sk'), ('Slovak - Slovakia', 'sk-SK'), ('Slovenian', 'sl'), ('Slovenian - Slovenia', 'sl-SI'), ('Soga', 'xog'), ('Soga - Uganda', 'xog-UG'), ('Somali', 'so'), ('Somali - Djibouti', 'so-DJ'), ('Somali - Ethiopia', 'so-ET'), ('Somali - Kenya', 'so-KE'), ('Somali - Somalia', 'so-SO'), ('Sotho', 'st'), ('Sotho - South Africa', 'st-ZA'), ('South Ndebele', 'nr'), ('South Ndebele - South Africa', 'nr-ZA'), ('Southern Sotho - Lesotho', 'st-LS'), ('Spanish', 'es'), ('Spanish - Argentina', 'es-AR'), ('Spanish - Belize', 'es-BZ'), ('Spanish - Bolivarian Republic of Venezuela', 'es-VE'), ('Spanish - Bolivia', 'es-BO'), ('Spanish - Brazil', 'es-BR'), ('Spanish - Chile', 'es-CL'), ('Spanish - Colombia', 'es-CO'), ('Spanish - Costa Rica', 'es-CR'), ('Spanish - Cuba', 'es-CU'), ('Spanish - Dominican Republic', 'es-DO'), ('Spanish - Ecuador', 'es-EC'), ('Spanish - El Salvador', 'es-SV'), ('Spanish - Equatorial Guinea', 'es-GQ'), ('Spanish - Guatemala', 'es-GT'), ('Spanish - Honduras', 'es-HN'), ('Spanish - Latin America', 'es-419'), ('Spanish - Mexico', 'es-MX'), ('Spanish - Nicaragua', 'es-NI'), ('Spanish - Panama', 'es-PA'), ('Spanish - Paraguay', 'es-PY'), ('Spanish - Peru', 'es-PE'), ('Spanish - Philippines', 'es-PH'), ('Spanish - Puerto Rico', 'es-PR'), ('Spanish - Spain', 'es-ES'), ('Spanish - Spain, ES_tradnl', 'es-ES_tradnl'), ('Spanish - United - States', 'es-US'), ('Spanish - Uruguay', 'es-UY'), ('Standard Moroccan Tamazight', 'zgh'), ('Standard Moroccan Tamazight - Morocco', 'zgh-Tfng-MA'), ('Standard Moroccan Tamazight - Tifinagh', 'zgh-Tfng'), ('Swati', 'ss'), ('Swati - South Africa', 'ss-ZA'), ('Swati - Swaziland', 'ss-SZ'), ('Swedish', 'sv'), ('Swedish - Åland Islands', 'sv-AX'), ('Swedish - Finland', 'sv-FI'), ('Swedish - Sweden', 'sv-SE'), ('Syriac', 'syr'), ('Syriac - Syria', 'syr-SY'), ('Tachelhit', 'shi'), ('Tachelhit - Tifinagh', 'shi-Tfng'), ('Tachelhit - Tifinagh, Morocco', 'shi-Tfng-MA'), ('Tachelhit (Latin)', 'shi-Latn'), ('Tachelhit (Latin) - Morocco', 'shi-Latn-MA'), ('Taita', 'dav'), ('Taita - Kenya', 'dav-KE'), ('Tajik (Cyrillic)', 'tg'), ('Tajik (Cyrillic), Cyrl', 'tg-Cyrl'), ('Tajik (Cyrillic) - Tajikistan', 'tg-Cyrl-TJ'), ('Tamazight (Latin)', 'tzm'), ('Tamazight (Latin), Latn', 'tzm-Latn'), ('Tamazight (Latin) - Algeria', 'tzm-Latn-DZ'), ('Tamil', 'ta'), ('Tamil - India', 'ta-IN'), ('Tamil - Malaysia', 'ta-MY'), ('Tamil - Singapore', 'ta-SG'), ('Tamil - Sri Lanka', 'ta-LK'), ('Tasawaq', 'twq'), ('Tasawaq - Niger', 'twq-NE'), ('Tatar', 'tt'), ('Tatar - Russia', 'tt-RU'), ('Telugu', 'te'), ('Telugu - India', 'te-IN'), ('Teso', 'teo'), ('Teso - Kenya', 'teo-KE'), ('Teso - Uganda', 'teo-UG'), ('Thai', 'th'), ('Thai - Thailand', 'th-TH'), ('Tibetan', 'bo'), ('Tibetan - India', 'bo-IN'), ("Tibetan - People's Republic of China", 'bo-CN'), ('Tigre', 'tig'), ('Tigre - Eritrea', 'tig-ER'), ('Tigrinya', 'ti'), ('Tigrinya - Eritrea', 'ti-ER'), ('Tigrinya - Ethiopia', 'ti-ET'), ('Tongan', 'to'), ('Tongan - Tonga', 'to-TO'), ('Tsonga', 'ts'), ('Tsonga - South Africa', 'ts-ZA'), ('Turkish', 'tr'), ('Turkish - Cyprus', 'tr-CY'), ('Turkish - Turkey', 'tr-TR'), ('Turkmen', 'tk'), ('Turkmen - Turkmenistan', 'tk-TM'), ('Ukrainian', 'uk'), ('Ukrainian - Ukraine', 'uk-UA'), ('Upper Sorbian', 'hsb'), ('Upper Sorbian - Germany', 'hsb-DE'), ('Urdu', 'ur'), ('Urdu - India', 'ur-IN'), ('Urdu - Islamic Republic of Pakistan', 'ur-PK'), ('Uyghur', 'ug'), ("Uyghur - People's Republic of China", 'ug-CN'), ('Uzbek - Perso-Arabic', 'uz-Arab'), ('Uzbek - Perso-Arabic, Afghanistan', 'uz-Arab-AF'), ('Uzbek (Cyrillic)', 'uz-Cyrl'), ('Uzbek (Cyrillic) - Uzbekistan', 'uz-Cyrl-UZ'), ('Uzbek (Latin)', 'uz'), ('Uzbek (Latin), Latn', 'uz-Latn'), ('Uzbek (Latin) - Uzbekistan', 'uz-Latn-UZ'), ('Vai', 'vai'), ('Vai, Vaii', 'vai-Vaii'), ('Vai - Liberia', 'vai-Vaii-LR'), ('Vai (Latin) - Liberia', 'vai-Latn-LR'), ('Vai (Latin)', 'vai-Latn'), ('Valencian - Spain', 'ca-ES-valencia'), ('Venda', 've'), ('Venda - South Africa', 've-ZA'), ('Vietnamese', 'vi'), ('Vietnamese - Vietnam', 'vi-VN'), ('Volapük', 'vo'), ('Volapük - World', 'vo-001'), ('Vunjo', 'vun'), ('Vunjo - Tanzania', 'vun-TZ'), ('Walser', 'wae'), ('Walser - Switzerland', 'wae-CH'), ('Welsh', 'cy'), ('Welsh - United Kingdom', 'cy-GB'), ('Wolaytta', 'wal'), ('Wolaytta - Ethiopia', 'wal-ET'), ('Wolof', 'wo'), ('Wolof - Senegal', 'wo-SN'), ('Xhosa', 'xh'), ('Xhosa - South Africa', 'xh-ZA'), ('Yangben', 'yav'), ('Yangben - Cameroon', 'yav-CM'), ('Yi', 'ii'), ("Yi - People's Republic of China", 'ii-CN'), ('Yoruba', 'yo'), ('Yoruba - Benin', 'yo-BJ'), ('Yoruba - Nigeria', 'yo-NG'), ('Zarma', 'dje'), ('Zarma - Niger', 'dje-NE'), ('Zulu', 'zu'), ('Zulu - South Africa', 'zu-ZA')], default='en', help_text='Required if type is "Subtitle"', max_length=50, unique=True)),
('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tracks', to='app.CustomVideoModel')),
],
options={
'abstract': False,
},
),
]
...@@ -5,7 +5,7 @@ from wagtail.admin.edit_handlers import StreamFieldPanel ...@@ -5,7 +5,7 @@ from wagtail.admin.edit_handlers import StreamFieldPanel
from wagtailvideos.edit_handlers import VideoChooserPanel from wagtailvideos.edit_handlers import VideoChooserPanel
from wagtailvideos.blocks import VideoChooserBlock from wagtailvideos.blocks import VideoChooserBlock
from wagtailvideos.models import AbstractVideo, AbstractVideoTranscode from wagtailvideos.models import AbstractVideo, AbstractVideoTranscode, AbstractTrack
class CustomVideoModel(AbstractVideo): class CustomVideoModel(AbstractVideo):
...@@ -30,6 +30,9 @@ class CustomVideoTranscode(AbstractVideoTranscode): ...@@ -30,6 +30,9 @@ class CustomVideoTranscode(AbstractVideoTranscode):
) )
class CustomTrack(AbstractTrack):
video = models.ForeignKey(CustomVideoModel, related_name='tracks', on_delete=models.CASCADE)
class TestPage(Page): class TestPage(Page):
video_field = models.ForeignKey( video_field = models.ForeignKey(
'wagtailvideos.Video', related_name='+', null=True, blank=True, on_delete=models.SET_NULL) 'wagtailvideos.Video', related_name='+', null=True, blank=True, on_delete=models.SET_NULL)
......
...@@ -23,4 +23,6 @@ class WagtailVideosApp(AppConfig): ...@@ -23,4 +23,6 @@ class WagtailVideosApp(AppConfig):
verbose_name = 'Wagtail Videos' verbose_name = 'Wagtail Videos'
def ready(self): def ready(self):
from wagtailvideos.signals import register_signal_handlers
register_signal_handlers()
register(ffmpeg_check) register(ffmpeg_check)
# Generated by Django 2.2.17 on 2021-01-28 03:08
from django.db import migrations, models
import django.db.models.deletion
import wagtailvideos.models
class Migration(migrations.Migration):
dependencies = [
('wagtailvideos', '0010_video_ordering'),
]
operations = [
migrations.CreateModel(
name='Track',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('file', models.FileField(upload_to=wagtailvideos.models.get_upload_to, verbose_name='file')),
('kind', models.CharField(choices=[('subtitles', 'Subtitles'), ('captions', 'Captions'), ('descriptions', 'Descriptions'), ('chapters', 'Chapters'), ('metadata', 'Metadata')], default='subtitles', max_length=50)),
('label', models.CharField(blank=True, help_text='A user-readable title of the text track.', max_length=255)),
('language', models.CharField(blank=True, choices=[('Afar', 'aa'), ('Afar - Djibouti', 'aa-DJ'), ('Afar - Eritrea', 'aa-ER'), ('Afar - Ethiopia', 'aa-ET'), ('Afrikaans', 'af'), ('Afrikaans - Namibia', 'af-NA'), ('Afrikaans - South Africa', 'af-ZA'), ('Aghem', 'agq'), ('Aghem - Cameroon', 'agq-CM'), ('Akan', 'ak'), ('Akan - Ghana', 'ak-GH'), ('Albanian', 'sq'), ('Albanian - Albania', 'sq-AL'), ('Albanian - North Macedonia', 'sq-MK'), ('Alsatian', 'gsw'), ('Alsatian - France', 'gsw-FR'), ('Alsatian - Liechtenstein', 'gsw-LI'), ('Alsatian - Switzerland', 'gsw-CH'), ('Amharic', 'am'), ('Amharic - Ethiopia', 'am-ET'), ('Arabic', 'ar'), ('Arabic - Algeria', 'ar-DZ'), ('Arabic - Bahrain', 'ar-BH'), ('Arabic - Chad', 'ar-TD'), ('Arabic - Comoros', 'ar-KM'), ('Arabic - Djibouti', 'ar-DJ'), ('Arabic - Egypt', 'ar-EG'), ('Arabic - Eritrea', 'ar-ER'), ('Arabic - Iraq', 'ar-IQ'), ('Arabic - Israel', 'ar-IL'), ('Arabic - Jordan', 'ar-JO'), ('Arabic - Kuwait', 'ar-KW'), ('Arabic - Lebanon', 'ar-LB'), ('Arabic - Libya', 'ar-LY'), ('Arabic - Mauritania', 'ar-MR'), ('Arabic - Morocco', 'ar-MA'), ('Arabic - Oman', 'ar-OM'), ('Arabic - Palestinian Authority', 'ar-PS'), ('Arabic - Qatar', 'ar-QA'), ('Arabic - Saudi Arabia', 'ar-SA'), ('Arabic - Somalia', 'ar-SO'), ('Arabic - South Sudan', 'ar-SS'), ('Arabic - Sudan', 'ar-SD'), ('Arabic - Syria', 'ar-SY'), ('Arabic - Tunisia', 'ar-TN'), ('Arabic - U.A.E.', 'ar-AE'), ('Arabic - World', 'ar-001'), ('Arabic - Yemen', 'ar-YE'), ('Armenian', 'hy'), ('Armenian - Armenia', 'hy-AM'), ('Assamese', 'as'), ('Assamese - India', 'as-IN'), ('Asturian', 'ast'), ('Asturian - Spain', 'ast-ES'), ('Asu', 'asa'), ('Asu - Tanzania', 'asa-TZ'), ('Azerbaijani (Cyrillic)', 'az-Cyrl'), ('Azerbaijani (Cyrillic) - Azerbaijan', 'az-Cyrl-AZ'), ('Azerbaijani (Latin)', 'az'), ('Azerbaijani (Latin), Latn', 'az-Latn'), ('Azerbaijani (Latin) - Azerbaijan', 'az-Latn-AZ'), ('Bafia', 'ksf'), ('Bafia - Cameroon', 'ksf-CM'), ('Bamanankan', 'bm'), ('Bamanankan (Latin) - Mali', 'bm-Latn-ML'), ('Bangla', 'bn'), ('Bangla - Bangladesh', 'bn-BD'), ('Bangla - India', 'bn-IN'), ('Basaa', 'bas'), ('Basaa - Cameroon', 'bas-CM'), ('Bashkir', 'ba'), ('Bashkir - Russia', 'ba-RU'), ('Basque', 'eu'), ('Basque - Spain', 'eu-ES'), ('Belarusian', 'be'), ('Belarusian - Belarus', 'be-BY'), ('Bemba', 'bem'), ('Bemba - Zambia', 'bem-ZM'), ('Bena', 'bez'), ('Bena - Tanzania', 'bez-TZ'), ('Blin', 'byn'), ('Blin - Eritrea', 'byn-ER'), ('Bodo', 'brx'), ('Bodo - India', 'brx-IN'), ('Bosnian (Cyrillic)', 'bs-Cyrl'), ('Bosnian (Cyrillic) - Bosnia and Herzegovina', 'bs-Cyrl-BA'), ('Bosnian (Latin)', 'bs'), ('Bosnian (Latin), Latn', 'bs-Latn'), ('Bosnian (Latin) - Bosnia and Herzegovina', 'bs-Latn-BA'), ('Breton', 'br'), ('Breton - France', 'br-FR'), ('Bulgarian', 'bg'), ('Bulgarian - Bulgaria', 'bg-BG'), ('Burmese', 'my'), ('Burmese - Myanmar', 'my-MM'), ('Catalan', 'ca'), ('Catalan - Andorra', 'ca-AD'), ('Catalan - France', 'ca-FR'), ('Catalan - Italy', 'ca-IT'), ('Catalan - Spain', 'ca-ES'), ('Cebuano', 'ceb'), ('Cebuan (Latin)', 'ceb-Latn'), ('Cebuan (Latin) - Philippines', 'ceb-Latn-PH'), ('Central Atlas Tamazight (Latin) - Morocco', 'tzm-Latn-MA'), ('Central Kurdish', 'ku'), ('Central Kurdish, Arab', 'ku-Arab'), ('Central Kurdish - Iraq', 'ku-Arab-IQ'), ('Chakma', 'ccp'), ('Chakma - Chakma', 'ccp-Cakm'), ('Chakma - Bangladesh', 'ccp-Cakm-BD'), ('Chakma - India', 'ccp-Cakm-IN'), ('Chechen - Russia', 'cd-RU'), ('Cherokee', 'chr'), ('Cherokee, Cher', 'chr-Cher'), ('Cherokee - United States', 'chr-Cher-US'), ('Chiga', 'cgg'), ('Chiga - Uganda', 'cgg-UG'), ('Chinese (Simplified)', 'zh'), ('Chinese (Simplified), Hans', 'zh-Hans'), ("Chinese (Simplified) - People's Republic of China", 'zh-CN'), ('Chinese (Simplified) - Singapore', 'zh-SG'), ('Chinese (Traditional)', 'zh-Hant'), ('Chinese (Traditional) - Hong Kong S.A.R.', 'zh-HK'), ('Chinese (Traditional) - Macao S.A.R.', 'zh-MO'), ('Chinese (Traditional) - Taiwan', 'zh-TW'), ('Church Slavic - Russia', 'cu-RU'), ('Congo Swahili', 'swc'), ('Congo Swahili - Congo DRC', 'swc-CD'), ('Cornish', 'kw'), ('Cornish - United Kingdom', 'kw-GB'), ('Corsican', 'co'), ('Corsican - France', 'co-FR'), ('Croatian', 'hr,'), ('Croatian - Croatia', 'hr-HR'), ('Croatian (Latin) - Bosnia and Herzegovina', 'hr-BA'), ('Czech', 'cs'), ('Czech - Czech Republic', 'cs-CZ'), ('Danish', 'da'), ('Danish - Denmark', 'da-DK'), ('Danish - Greenland', 'da-GL'), ('Dari', 'prs'), ('Dari - Afghanistan', 'prs-AF'), ('Divehi', 'dv'), ('Divehi - Maldives', 'dv-MV'), ('Duala', 'dua'), ('Duala - Cameroon', 'dua-CM'), ('Dutch', 'nl'), ('Dutch - Aruba', 'nl-AW'), ('Dutch - Belgium', 'nl-BE'), ('Dutch - Bonaire, Sint Eustatius and Saba', 'nl-BQ'), ('Dutch - Curaçao', 'nl-CW'), ('Dutch - Netherlands', 'nl-NL'), ('Dutch - Sint Maarten', 'nl-SX'), ('Dutch - Suriname', 'nl-SR'), ('Dzongkha', 'dz'), ('Dzongkha - Bhutan', 'dz-BT'), ('Embu', 'ebu'), ('Embu - Kenya', 'ebu-KE'), ('English', 'en'), ('English - American Samoa', 'en-AS'), ('English - Anguilla', 'en-AI'), ('English - Antigua and Barbuda', 'en-AG'), ('English - Australia', 'en-AU'), ('English - Austria', 'en-AT'), ('English - Bahamas', 'en-BS'), ('English - Barbados', 'en-BB'), ('English - Belgium', 'en-BE'), ('English - Belize', 'en-BZ'), ('English - Bermuda', 'en-BM'), ('English - Botswana', 'en-BW'), ('English - British Indian Ocean Territory', 'en-IO'), ('English - British Virgin Islands', 'en-VG'), ('English - Burundi', 'en-BI'), ('English - Cameroon', 'en-CM'), ('English - Canada', 'en-CA'), ('English - Caribbean', 'en-029'), ('English - Cayman Islands', 'en-KY'), ('English - Christmas Island', 'en-CX'), ('English - Cocos [Keeling] Islands', 'en-CC'), ('English - Cook Islands', 'en-CK'), ('English - Cyprus', 'en-CY'), ('English - Denmark', 'en-DK'), ('English - Dominica', 'en-DM'), ('English - Eritrea', 'en-ER'), ('English - Europe', 'en-150'), ('English - Falkland Islands', 'en-FK'), ('English - Finland', 'en-FI'), ('English - Fiji', 'en-FJ'), ('English - Gambia', 'en-GM'), ('English - Germany', 'en-DE'), ('English - Ghana', 'en-GH'), ('English - Gibraltar', 'en-GI'), ('English - Grenada', 'en-GD'), ('English - Guam', 'en-GU'), ('English - Guernsey', 'en-GG'), ('English - Guyana', 'en-GY'), ('English - Hong Kong', 'en-HK'), ('English - India', 'en-IN'), ('English - Ireland', 'en-IE'), ('English - Isle of Man', 'en-IM'), ('English - Israel', 'en-IL'), ('English - Jamaica', 'en-JM'), ('English - Jersey', 'en-JE'), ('English - Kenya', 'en-KE'), ('English - Kiribati', 'en-KI'), ('English - Lesotho', 'en-LS'), ('English - Liberia', 'en-LR'), ('English - Macao SAR', 'en-MO'), ('English - Madagascar', 'en-MG'), ('English - Malawi', 'en-MW'), ('English - Malaysia', 'en-MY'), ('English - Malta', 'en-MT'), ('English - Marshall Islands', 'en-MH'), ('English - Mauritius', 'en-MU'), ('English - Micronesia', 'en-FM'), ('English - Montserrat', 'en-MS'), ('English - Namibia', 'en-NA'), ('English - Nauru', 'en-NR'), ('English - Netherlands', 'en-NL'), ('English - New Zealand', 'en-NZ'), ('English - Nigeria', 'en-NG'), ('English - Niue', 'en-NU'), ('English - Norfolk Island', 'en-NF'), ('English - Northern Mariana Islands', 'en-MP'), ('English - Pakistan', 'en-PK'), ('English - Palau', 'en-PW'), ('English - Papua New Guinea', 'en-PG'), ('English - Pitcairn Islands', 'en-PN'), ('English - Puerto Rico', 'en-PR'), ('English - Republic of the Philippines', 'en-PH'), ('English - Rwanda', 'en-RW'), ('English - Saint Kitts and Nevis', 'en-KN'), ('English - Saint Lucia', 'en-LC'), ('English - Saint Vincent and the Grenadines', 'en-VC'), ('English - Samoa', 'en-WS'), ('English - Seychelles', 'en-SC'), ('English - Sierra Leone', 'en-SL'), ('English - Singapore', 'en-SG'), ('English - Sint Maarten', 'en-SX'), ('English - Slovenia', 'en-SI'), ('English - Solomon Islands', 'en-SB'), ('English - South Africa', 'en-ZA'), ('English - South Sudan', 'en-SS'), ('English - St Helena, Ascension, Tristan da Cunha', 'en-SH'), ('English - Sudan', 'en-SD'), ('English - Swaziland', 'en-SZ'), ('English - Sweden', 'en-SE'), ('English - Switzerland', 'en-CH'), ('English - Tanzania', 'en-TZ'), ('English - Tokelau', 'en-TK'), ('English - Tonga', 'en-TO'), ('English - Trinidad and Tobago', 'en-TT'), ('English - Turks and Caicos Islands', 'en-TC'), ('English - Tuvalu', 'en-TV'), ('English - Uganda', 'en-UG'), ('English - United Arab Emirates', 'en-AE'), ('English - United Kingdom', 'en-GB'), ('English - United States', 'en-US'), ('English - US Minor Outlying Islands', 'en-UM'), ('English - US Virgin Islands', 'en-VI'), ('English - Vanuatu', 'en-VU'), ('English - World', 'en-001'), ('English - Zambia', 'en-ZM'), ('English - Zimbabwe', 'en-ZW'), ('Esperanto', 'eo'), ('Esperanto - World', 'eo-001'), ('Estonian', 'et'), ('Estonian - Estonia', 'et-EE'), ('Ewe', 'ee'), ('Ewe - Ghana', 'ee-GH'), ('Ewe - Togo', 'ee-TG'), ('Ewondo', 'ewo'), ('Ewondo - Cameroon', 'ewo-CM'), ('Faroese', 'fo'), ('Faroese - Denmark', 'fo-DK'), ('Faroese - Faroe Islands', 'fo-FO'), ('Filipino', 'fil'), ('Filipino - Philippines', 'fil-PH'), ('Finnish', 'fi'), ('Finnish - Finland', 'fi-FI'), ('French', 'fr'), ('French - Algeria', 'fr-DZ'), ('French - Belgium', 'fr-BE'), ('French - Benin', 'fr-BJ'), ('French - Burkina Faso', 'fr-BF'), ('French - Burundi', 'fr-BI'), ('French - Cameroon', 'fr-CM'), ('French - Canada', 'fr-CA'), ('French - Central African Republic', 'fr-CF'), ('French - Chad', 'fr-TD'), ('French - Comoros', 'fr-KM'), ('French - Congo', 'fr-CG'), ('French - Congo, DRC', 'fr-CD'), ("French - Côte d'Ivoire", 'fr-CI'), ('French - Djibouti', 'fr-DJ'), ('French - Equatorial Guinea', 'fr-GQ'), ('French - France', 'fr-FR'), ('French - French Guiana', 'fr-GF'), ('French - French Polynesia', 'fr-PF'), ('French - Gabon', 'fr-GA'), ('French - Guadeloupe', 'fr-GP'), ('French - Guinea', 'fr-GN'), ('French - Haiti', 'fr-HT'), ('French - Luxembourg', 'fr-LU'), ('French - Madagascar', 'fr-MG'), ('French - Mali', 'fr-ML'), ('French - Martinique', 'fr-MQ'), ('French - Mauritania', 'fr-MR'), ('French - Mauritius', 'fr-MU'), ('French - Mayotte', 'fr-YT'), ('French - Morocco', 'fr-MA'), ('French - New Caledonia', 'fr-NC'), ('French - Niger', 'fr-NE'), ('French - Principality of Monaco', 'fr-MC'), ('French - Reunion', 'fr-RE'), ('French - Rwanda', 'fr-RW'), ('French - Saint Barthélemy', 'fr-BL'), ('French - Saint Martin', 'fr-MF'), ('French - Saint Pierre and Miquelon', 'fr-PM'), ('French - Senegal', 'fr-SN'), ('French - Seychelles', 'fr-SC'), ('French - Switzerland', 'fr-CH'), ('French - Syria', 'fr-SY'), ('French - Togo', 'fr-TG'), ('French - Tunisia', 'fr-TN'), ('French - Vanuatu', 'fr-VU'), ('French - Wallis and Futuna', 'fr-WF'), ('Frisian', 'fy'), ('Frisian - Netherlands', 'fy-NL'), ('Friulian', 'fur'), ('Friulian - Italy', 'fur-IT'), ('Fulah', 'ff'), ('Fulah (Latin)', 'ff-Latn'), ('Fulah (Latin) - Burkina Faso', 'ff-Latn-BF'), ('Fulah - Cameroon', 'ff-CM'), ('Fulah (Latin) - Cameroon', 'ff-Latn-CM'), ('Fulah (Latin) - Gambia', 'ff-Latn-GM'), ('Fulah (Latin) - Ghana', 'ff-Latn-GH'), ('Fulah - Guinea', 'ff-GN'), ('Fulah (Latin) - Guinea', 'ff-Latn-GN'), ('Fulah (Latin) - Guinea-Bissau', 'ff-Latn-GW'), ('Fulah (Latin) - Liberia', 'ff-Latn-LR'), ('Fulah - Mauritania', 'ff-MR'), ('Fulah (Latin) - Mauritania', 'ff-Latn-MR'), ('Fulah (Latin) - Niger', 'ff-Latn-NE'), ('Fulah - Nigeria', 'ff-NG'), ('Fulah (Latin) - Nigeria', 'ff-Latn-NG'), ('Fulah - Senegal', 'ff-Latn-SN'), ('Fulah (Latin) - Sierra Leone', 'ff-Latn-SL'), ('Galician', 'gl'), ('Galician - Spain', 'gl-ES'), ('Ganda', 'lg'), ('Ganda - Uganda', 'lg-UG'), ('Georgian', 'ka'), ('Georgian - Georgia', 'ka-GE'), ('German', 'de'), ('German - Austria', 'de-AT'), ('German - Belgium', 'de-BE'), ('German - Germany', 'de-DE'), ('German - Italy', 'de-IT'), ('German - Liechtenstein', 'de-LI'), ('German - Luxembourg', 'de-LU'), ('German - Switzerland', 'de-CH'), ('Greek', 'el'), ('Greek - Cyprus', 'el-CY'), ('Greek - Greece', 'el-GR'), ('Greenlandic', 'kl'), ('Greenlandic - Greenland', 'kl-GL'), ('Guarani', 'gn'), ('Guarani - Paraguay', 'gn-PY'), ('Gujarati', 'gu'), ('Gujarati - India', 'gu-IN'), ('Gusii', 'guz'), ('Gusii - Kenya', 'guz-KE'), ('Hausa (Latin)', 'ha'), ('Hausa (Latin), Latn', 'ha-Latn'), ('Hausa (Latin) - Ghana', 'ha-Latn-GH'), ('Hausa (Latin) - Niger', 'ha-Latn-NE'), ('Hausa (Latin) - Nigeria', 'ha-Latn-NG'), ('Hawaiian', 'haw'), ('Hawaiian - United States', 'haw-US'), ('Hebrew', 'he'), ('Hebrew - Israel', 'he-IL'), ('Hindi', 'hi'), ('Hindi - India', 'hi-IN'), ('Hungarian', 'hu'), ('Hungarian - Hungary', 'hu-HU'), ('Icelandic', 'is'), ('Icelandic - Iceland', 'is-IS'), ('Igbo', 'ig'), ('Igbo - Nigeria', 'ig-NG'), ('Indonesian', 'id'), ('Indonesian - Indonesia', 'id-ID'), ('Interlingua', 'ia'), ('Interlingua - France', 'ia-FR'), ('Interlingua - World', 'ia-001'), ('Inuktitut (Latin)', 'iu'), ('Inuktitut (Latin), Latn', 'iu-Latn'), ('Inuktitut (Latin) - Canada', 'iu-Latn-CA'), ('Inuktitut (Syllabics)', 'iu-Cans'), ('Inuktitut (Syllabics) - Canada', 'iu-Cans-CA'), ('Irish', 'ga'), ('Irish - Ireland', 'ga-IE'), ('Italian', 'it'), ('Italian - Italy', 'it-IT'), ('Italian - San Marino', 'it-SM'), ('Italian - Switzerland', 'it-CH'), ('Italian - Vatican City', 'it-VA'), ('Japanese', 'ja'), ('Japanese - Japan', 'ja-JP'), ('Javanese', 'jv'), ('Javanese - Latin', 'jv-Latn'), ('Javanese - Latin, Indonesia', 'jv-Latn-ID'), ('Jola-Fonyi', 'dyo'), ('Jola-Fonyi - Senegal', 'dyo-SN'), ('Kabuverdianu', 'kea'), ('Kabuverdianu - Cabo Verde', 'kea-CV'), ('Kabyle', 'kab'), ('Kabyle - Algeria', 'kab-DZ'), ('Kako', 'kkj'), ('Kako - Cameroon', 'kkj-CM'), ('Kalenjin', 'kln'), ('Kalenjin - Kenya', 'kln-KE'), ('Kamba', 'kam'), ('Kamba - Kenya', 'kam-KE'), ('Kannada', 'kn'), ('Kannada - India', 'kn-IN'), ('Kashmiri', 'ks'), ('Kashmiri - Perso-Arabic', 'ks-Arab'), ('Kashmiri - Perso-Arabic, IN', 'ks-Arab-IN'), ('Kazakh', 'kk'), ('Kazakh - Kazakhstan', 'kk-KZ'), ('Khmer', 'km'), ('Khmer - Cambodia', 'km-KH'), ("K'iche", 'quc'), ("K'iche - Guatemala", 'quc-Latn-GT'), ('Kikuyu', 'ki'), ('Kikuyu - Kenya', 'ki-KE'), ('Kinyarwanda', 'rw'), ('Kinyarwanda - Rwanda', 'rw-RW'), ('Kiswahili', 'sw'), ('Kiswahili - Kenya', 'sw-KE'), ('Kiswahili - Tanzania', 'sw-TZ'), ('Kiswahili - Uganda', 'sw-UG'), ('Konkani', 'kok'), ('Konkani - India', 'kok-IN'), ('Korean', 'ko'), ('Korean - Korea', 'ko-KR'), ('Korean - North Korea', 'ko-KP'), ('Koyra Chiini', 'khq'), ('Koyra Chiini - Mali', 'khq-ML'), ('Koyraboro Senni', 'ses'), ('Koyraboro Senni - Mali', 'ses-ML'), ('Kwasio', 'nmg'), ('Kwasio - Cameroon', 'nmg-CM'), ('Kyrgyz', 'ky'), ('Kyrgyz - Kyrgyzstan', 'ky-KG'), ('Kurdish - Perso-Arabic, Iran', 'ku-Arab-IR'), ('Lakota', 'lkt'), ('Lakota - United States', 'lkt-US'), ('Langi', 'lag'), ('Langi - Tanzania', 'lag-TZ'), ('Lao', 'lo'), ('Lao - Lao P.D.R.', 'lo-LA'), ('Latvian', 'lv'), ('Latvian - Latvia', 'lv-LV'), ('Lingala', 'ln'), ('Lingala - Angola', 'ln-AO'), ('Lingala - Central African Republic', 'ln-CF'), ('Lingala - Congo', 'ln-CG'), ('Lingala - Congo DRC', 'ln-CD'), ('Lithuanian', 'lt'), ('Lithuanian - Lithuania', 'lt-LT'), ('Low German', 'nds'), ('Low German - Germany', 'nds-DE'), ('Low German - Netherlands', 'nds-NL'), ('Lower Sorbian', 'dsb'), ('Lower Sorbian - Germany', 'dsb-DE'), ('Luba-Katanga', 'lu'), ('Luba-Katanga - Congo DRC', 'lu-CD'), ('Luo', 'luo'), ('Luo - Kenya', 'luo-KE'), ('Luxembourgish', 'lb'), ('Luxembourgish - Luxembourg', 'lb-LU'), ('Luyia', 'luy'), ('Luyia - Kenya', 'luy-KE'), ('Macedonian', 'mk'), ('Macedonian - North Macedonia', 'mk-MK'), ('Machame', 'jmc'), ('Machame - Tanzania', 'jmc-TZ'), ('Makhuwa-Meetto', 'mgh'), ('Makhuwa-Meetto - Mozambique', 'mgh-MZ'), ('Makonde', 'kde'), ('Makonde - Tanzania', 'kde-TZ'), ('Malagasy', 'mg'), ('Malagasy - Madagascar', 'mg-MG'), ('Malay', 'ms'), ('Malay - Brunei Darussalam', 'ms-BN'), ('Malay - Malaysia', 'ms-MY'), ('Malayalam', 'ml'), ('Malayalam - India', 'ml-IN'), ('Maltese', 'mt'), ('Maltese - Malta', 'mt-MT'), ('Manx', 'gv'), ('Manx - Isle of Man', 'gv-IM'), ('Maori', 'mi'), ('Maori - New Zealand', 'mi-NZ'), ('Mapudungun', 'arn'), ('Mapudungun - Chile', 'arn-CL'), ('Marathi', 'mr'), ('Marathi - India', 'mr-IN'), ('Masai', 'mas'), ('Masai - Kenya', 'mas-KE'), ('Masai - Tanzania', 'mas-TZ'), ('Mazanderani - Iran', 'mzn-IR'), ('Meru', 'mer'), ('Meru - Kenya', 'mer-KE'), ("Meta'", 'mgo'), ("Meta' - Cameroon", 'mgo-CM'), ('Mohawk', 'moh'), ('Mohawk - Canada', 'moh-CA'), ('Mongolian (Cyrillic)', 'mn'), ('Mongolian (Cyrillic), Cyrl', 'mn-Cyrl'), ('Mongolian (Cyrillic) - Mongolia', 'mn-MN'), ('Mongolian (Traditional Mongolian)', 'mn-Mong'), ("Mongolian (Traditional Mongolian) - People's Republic of China", 'mn-Mong-CN'), ('Mongolian (Traditional Mongolian) - Mongolia', 'mn-Mong-MN'), ('Morisyen', 'mfe'), ('Morisyen - Mauritius', 'mfe-MU'), ('Mundang', 'mua'), ('Mundang - Cameroon', 'mua-CM'), ("N'ko", 'nqo'), ("N'ko - Guinea", 'nqo-GN'), ('Nama', 'naq'), ('Nama - Namibia', 'naq-NA'), ('Nepali', 'ne'), ('Nepali - India', 'ne-IN'), ('Nepali - Nepal', 'ne-NP'), ('Ngiemboon', 'nnh'), ('Ngiemboon - Cameroon', 'nnh-CM'), ('Ngomba', 'jgo'), ('Ngomba - Cameroon', 'jgo-CM'), ('Northern Luri - Iraq', 'lrc-IQ'), ('Northern Luri - Iran', 'lrc-IR'), ('North Ndebele', 'nd'), ('North Ndebele - Zimbabwe', 'nd-ZW'), ('Norwegian (Bokmal)', 'no'), ('Norwegian (Bokmal), nb', 'nb'), ('Norwegian (Bokmal) - Norway', 'nb-NO'), ('Norwegian (Nynorsk)', 'nn'), ('Norwegian (Nynorsk) - Norway', 'nn-NO'), ('Norwegian Bokmål - Svalbard and Jan Mayen', 'nb-SJ'), ('Nuer', 'nus'), ('Nuer - Sudan', 'nus-SD'), ('Nuer - South Sudan', 'nus-SS'), ('Nyankole', 'nyn'), ('Nyankole - Uganda', 'nyn-UG'), ('Occitan', 'oc'), ('Occitan - France', 'oc-FR'), ('Odia', 'or'), ('Odia - India', 'or-IN'), ('Oromo', 'om'), ('Oromo - Ethiopia', 'om-ET'), ('Oromo - Kenya', 'om-KE'), ('Ossetian', 'os'), ('Ossetian - Cyrillic, Georgia', 'os-GE'), ('Ossetian - Cyrillic, Russia', 'os-RU'), ('Pashto', 'ps'), ('Pashto - Afghanistan', 'ps-AF'), ('Pashto - Pakistan', 'ps-PK'), ('Persian', 'fa'), ('Persian - Afghanistan', 'fa-AF'), ('Persian - Iran', 'fa-IR'), ('Polish', 'pl'), ('Polish - Poland', 'pl-PL'), ('Portuguese', 'pt'), ('Portuguese - Angola', 'pt-AO'), ('Portuguese - Brazil', 'pt-BR'), ('Portuguese - Cabo Verde', 'pt-CV'), ('Portuguese - Equatorial Guinea', 'pt-GQ'), ('Portuguese - Guinea-Bissau', 'pt-GW'), ('Portuguese - Luxembourg', 'pt-LU'), ('Portuguese - Macao SAR', 'pt-MO'), ('Portuguese - Mozambique', 'pt-MZ'), ('Portuguese - Portugal', 'pt-PT'), ('Portuguese - São Tomé and Príncipe', 'pt-ST'), ('Portuguese - Switzerland', 'pt-CH'), ('Portuguese - Timor-Leste', 'pt-TL'), ('Prussian', 'prg-001'), ('Pseudo Language - Pseudo locale for east Asian/complex script localization testing', 'qps-ploca'), ('Pseudo Language - Pseudo locale used for localization testing', 'qps-ploc'), ('Pseudo Language - Pseudo locale used for localization testing of mirroredlocales', 'qps-plocm'), ('Punjabi', 'pa'), ('Punjabi, Arab', 'pa-Arab'), ('Punjabi - India', 'pa-IN'), ('Punjabi - Islamic Republic of Pakistan', 'pa-Arab-PK'), ('Quechua', 'quz'), ('Quechua - Bolivia', 'quz-BO'), ('Quechua - Ecuador', 'quz-EC'), ('Quechua - Peru', 'quz-PE'), ('Ripuarian', 'ksh'), ('Ripuarian - Germany', 'ksh-DE'), ('Romanian', 'ro'), ('Romanian - Moldova', 'ro-MD'), ('Romanian - Romania', 'ro-RO'), ('Romansh', 'rm'), ('Romansh - Switzerland', 'rm-CH'), ('Rombo', 'rof'), ('Rombo - Tanzania', 'rof-TZ'), ('Rundi', 'rn'), ('Rundi - Burundi', 'rn-BI'), ('Russian', 'ru'), ('Russian - Belarus', 'ru-BY'), ('Russian - Kazakhstan', 'ru-KZ'), ('Russian - Kyrgyzstan', 'ru-KG'), ('Russian - Moldova', 'ru-MD'), ('Russian - Russia', 'ru-RU'), ('Russian - Ukraine', 'ru-UA'), ('Rwa', 'rwk'), ('Rwa - Tanzania', 'rwk-TZ'), ('Saho', 'ssy'), ('Saho - Eritrea', 'ssy-ER'), ('Sakha', 'sah'), ('Sakha - Russia', 'sah-RU'), ('Samburu', 'saq'), ('Samburu - Kenya', 'saq-KE'), ('Sami (Inari)', 'smn'), ('Sami (Inari) - Finland', 'smn-FI'), ('Sami (Lule)', 'smj'), ('Sami (Lule) - Norway', 'smj-NO'), ('Sami (Lule) - Sweden', 'smj-SE'), ('Sami (Northern)', 'se'), ('Sami (Northern) - Finland', 'se-FI'), ('Sami (Northern) - Norway', 'se-NO'), ('Sami (Northern) - Sweden', 'se-SE'), ('Sami (Skolt)', 'sms'), ('Sami (Skolt) - Finland', 'sms-FI'), ('Sami (Southern)', 'sma'), ('Sami (Southern) - Norway', 'sma-NO'), ('Sami (Southern) - Sweden', 'sma-SE'), ('Sango', 'sg'), ('Sango - Central African Republic', 'sg-CF'), ('Sangu', 'sbp'), ('Sangu - Tanzania', 'sbp-TZ'), ('Sanskrit', 'sa'), ('Sanskrit - India', 'sa-IN'), ('Scottish Gaelic', 'gd'), ('Scottish Gaelic - United Kingdom', 'gd-GB'), ('Sena', 'seh'), ('Sena - Mozambique', 'seh-MZ'), ('Serbian (Cyrillic)', 'sr-Cyrl'), ('Serbian (Cyrillic) - Bosnia and Herzegovina', 'sr-Cyrl-BA'), ('Serbian (Cyrillic) - Montenegro', 'sr-Cyrl-ME'), ('Serbian (Cyrillic) - Serbia', 'sr-Cyrl-RS'), ('Serbian (Cyrillic) - Serbia and Montenegro (Former)', 'sr-Cyrl-CS'), ('Serbian (Latin)', 'sr'), ('Serbian (Latin), Latn', 'sr-Latn'), ('Serbian (Latin) - Bosnia and Herzegovina', 'sr-Latn-BA'), ('Serbian (Latin) - Montenegro', 'sr-Latn-ME'), ('Serbian (Latin) - Serbia', 'sr-Latn-RS'), ('Serbian (Latin) - Serbia and Montenegro (Former)', 'sr-Latn-CS'), ('Sesotho sa Leboa', 'nso'), ('Sesotho sa Leboa - South Africa', 'nso-ZA'), ('Setswana', 'tn'), ('Setswana - Botswana', 'tn-BW'), ('Setswana - South Africa', 'tn-ZA'), ('Shambala', 'ksb'), ('Shambala - Tanzania', 'ksb-TZ'), ('Shona', 'sn'), ('Shona - Latin', 'sn-Latn'), ('Shona - Zimbabwe', 'sn-Latn-ZW'), ('Sindhi', 'sd'), ('Sindhi, Arab', 'sd-Arab'), ('Sindhi - Islamic Republic of Pakistan', 'sd-Arab-PK'), ('Sinhala', 'si'), ('Sinhala - Sri Lanka', 'si-LK'), ('Slovak', 'sk'), ('Slovak - Slovakia', 'sk-SK'), ('Slovenian', 'sl'), ('Slovenian - Slovenia', 'sl-SI'), ('Soga', 'xog'), ('Soga - Uganda', 'xog-UG'), ('Somali', 'so'), ('Somali - Djibouti', 'so-DJ'), ('Somali - Ethiopia', 'so-ET'), ('Somali - Kenya', 'so-KE'), ('Somali - Somalia', 'so-SO'), ('Sotho', 'st'), ('Sotho - South Africa', 'st-ZA'), ('South Ndebele', 'nr'), ('South Ndebele - South Africa', 'nr-ZA'), ('Southern Sotho - Lesotho', 'st-LS'), ('Spanish', 'es'), ('Spanish - Argentina', 'es-AR'), ('Spanish - Belize', 'es-BZ'), ('Spanish - Bolivarian Republic of Venezuela', 'es-VE'), ('Spanish - Bolivia', 'es-BO'), ('Spanish - Brazil', 'es-BR'), ('Spanish - Chile', 'es-CL'), ('Spanish - Colombia', 'es-CO'), ('Spanish - Costa Rica', 'es-CR'), ('Spanish - Cuba', 'es-CU'), ('Spanish - Dominican Republic', 'es-DO'), ('Spanish - Ecuador', 'es-EC'), ('Spanish - El Salvador', 'es-SV'), ('Spanish - Equatorial Guinea', 'es-GQ'), ('Spanish - Guatemala', 'es-GT'), ('Spanish - Honduras', 'es-HN'), ('Spanish - Latin America', 'es-419'), ('Spanish - Mexico', 'es-MX'), ('Spanish - Nicaragua', 'es-NI'), ('Spanish - Panama', 'es-PA'), ('Spanish - Paraguay', 'es-PY'), ('Spanish - Peru', 'es-PE'), ('Spanish - Philippines', 'es-PH'), ('Spanish - Puerto Rico', 'es-PR'), ('Spanish - Spain', 'es-ES'), ('Spanish - Spain, ES_tradnl', 'es-ES_tradnl'), ('Spanish - United - States', 'es-US'), ('Spanish - Uruguay', 'es-UY'), ('Standard Moroccan Tamazight', 'zgh'), ('Standard Moroccan Tamazight - Morocco', 'zgh-Tfng-MA'), ('Standard Moroccan Tamazight - Tifinagh', 'zgh-Tfng'), ('Swati', 'ss'), ('Swati - South Africa', 'ss-ZA'), ('Swati - Swaziland', 'ss-SZ'), ('Swedish', 'sv'), ('Swedish - Åland Islands', 'sv-AX'), ('Swedish - Finland', 'sv-FI'), ('Swedish - Sweden', 'sv-SE'), ('Syriac', 'syr'), ('Syriac - Syria', 'syr-SY'), ('Tachelhit', 'shi'), ('Tachelhit - Tifinagh', 'shi-Tfng'), ('Tachelhit - Tifinagh, Morocco', 'shi-Tfng-MA'), ('Tachelhit (Latin)', 'shi-Latn'), ('Tachelhit (Latin) - Morocco', 'shi-Latn-MA'), ('Taita', 'dav'), ('Taita - Kenya', 'dav-KE'), ('Tajik (Cyrillic)', 'tg'), ('Tajik (Cyrillic), Cyrl', 'tg-Cyrl'), ('Tajik (Cyrillic) - Tajikistan', 'tg-Cyrl-TJ'), ('Tamazight (Latin)', 'tzm'), ('Tamazight (Latin), Latn', 'tzm-Latn'), ('Tamazight (Latin) - Algeria', 'tzm-Latn-DZ'), ('Tamil', 'ta'), ('Tamil - India', 'ta-IN'), ('Tamil - Malaysia', 'ta-MY'), ('Tamil - Singapore', 'ta-SG'), ('Tamil - Sri Lanka', 'ta-LK'), ('Tasawaq', 'twq'), ('Tasawaq - Niger', 'twq-NE'), ('Tatar', 'tt'), ('Tatar - Russia', 'tt-RU'), ('Telugu', 'te'), ('Telugu - India', 'te-IN'), ('Teso', 'teo'), ('Teso - Kenya', 'teo-KE'), ('Teso - Uganda', 'teo-UG'), ('Thai', 'th'), ('Thai - Thailand', 'th-TH'), ('Tibetan', 'bo'), ('Tibetan - India', 'bo-IN'), ("Tibetan - People's Republic of China", 'bo-CN'), ('Tigre', 'tig'), ('Tigre - Eritrea', 'tig-ER'), ('Tigrinya', 'ti'), ('Tigrinya - Eritrea', 'ti-ER'), ('Tigrinya - Ethiopia', 'ti-ET'), ('Tongan', 'to'), ('Tongan - Tonga', 'to-TO'), ('Tsonga', 'ts'), ('Tsonga - South Africa', 'ts-ZA'), ('Turkish', 'tr'), ('Turkish - Cyprus', 'tr-CY'), ('Turkish - Turkey', 'tr-TR'), ('Turkmen', 'tk'), ('Turkmen - Turkmenistan', 'tk-TM'), ('Ukrainian', 'uk'), ('Ukrainian - Ukraine', 'uk-UA'), ('Upper Sorbian', 'hsb'), ('Upper Sorbian - Germany', 'hsb-DE'), ('Urdu', 'ur'), ('Urdu - India', 'ur-IN'), ('Urdu - Islamic Republic of Pakistan', 'ur-PK'), ('Uyghur', 'ug'), ("Uyghur - People's Republic of China", 'ug-CN'), ('Uzbek - Perso-Arabic', 'uz-Arab'), ('Uzbek - Perso-Arabic, Afghanistan', 'uz-Arab-AF'), ('Uzbek (Cyrillic)', 'uz-Cyrl'), ('Uzbek (Cyrillic) - Uzbekistan', 'uz-Cyrl-UZ'), ('Uzbek (Latin)', 'uz'), ('Uzbek (Latin), Latn', 'uz-Latn'), ('Uzbek (Latin) - Uzbekistan', 'uz-Latn-UZ'), ('Vai', 'vai'), ('Vai, Vaii', 'vai-Vaii'), ('Vai - Liberia', 'vai-Vaii-LR'), ('Vai (Latin) - Liberia', 'vai-Latn-LR'), ('Vai (Latin)', 'vai-Latn'), ('Valencian - Spain', 'ca-ES-valencia'), ('Venda', 've'), ('Venda - South Africa', 've-ZA'), ('Vietnamese', 'vi'), ('Vietnamese - Vietnam', 'vi-VN'), ('Volapük', 'vo'), ('Volapük - World', 'vo-001'), ('Vunjo', 'vun'), ('Vunjo - Tanzania', 'vun-TZ'), ('Walser', 'wae'), ('Walser - Switzerland', 'wae-CH'), ('Welsh', 'cy'), ('Welsh - United Kingdom', 'cy-GB'), ('Wolaytta', 'wal'), ('Wolaytta - Ethiopia', 'wal-ET'), ('Wolof', 'wo'), ('Wolof - Senegal', 'wo-SN'), ('Xhosa', 'xh'), ('Xhosa - South Africa', 'xh-ZA'), ('Yangben', 'yav'), ('Yangben - Cameroon', 'yav-CM'), ('Yi', 'ii'), ("Yi - People's Republic of China", 'ii-CN'), ('Yoruba', 'yo'), ('Yoruba - Benin', 'yo-BJ'), ('Yoruba - Nigeria', 'yo-NG'), ('Zarma', 'dje'), ('Zarma - Niger', 'dje-NE'), ('Zulu', 'zu'), ('Zulu - South Africa', 'zu-ZA')], default='en', help_text='Required if type is "Subtitle"', max_length=50, unique=True)),
('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tracks', to='wagtailvideos.Video')),
],
options={
'abstract': False,
},
),
]
...@@ -6,17 +6,14 @@ import shutil ...@@ -6,17 +6,14 @@ import shutil
import subprocess import subprocess
import tempfile import tempfile
import threading import threading
from contextlib import contextmanager
from distutils.version import LooseVersion from distutils.version import LooseVersion
import bcp47
import wagtail import wagtail
from django.conf import settings from django.conf import settings
from django.core.exceptions import SuspiciousFileOperation from django.core.exceptions import SuspiciousFileOperation
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.core.files.temp import NamedTemporaryFile
from django.db import models from django.db import models
from django.db.models.signals import post_save, pre_delete
from django.dispatch.dispatcher import receiver
from django.forms.utils import flatatt from django.forms.utils import flatatt
from django.urls import reverse from django.urls import reverse
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
...@@ -27,8 +24,6 @@ from wagtail.core.models import CollectionMember ...@@ -27,8 +24,6 @@ from wagtail.core.models import CollectionMember
from wagtail.search import index from wagtail.search import index
from wagtail.search.queryset import SearchableQuerySetMixin from wagtail.search.queryset import SearchableQuerySetMixin
from wagtailvideos import ffmpeg
if LooseVersion(wagtail.__version__) >= LooseVersion('2.7'): if LooseVersion(wagtail.__version__) >= LooseVersion('2.7'):
from wagtail.admin.models import get_object_usage from wagtail.admin.models import get_object_usage
else: else:
...@@ -180,12 +175,9 @@ class AbstractVideo(CollectionMember, index.Indexed, models.Model): ...@@ -180,12 +175,9 @@ class AbstractVideo(CollectionMember, index.Indexed, models.Model):
def get_transcode_model(cls): def get_transcode_model(cls):
return cls.transcodes.rel.related_model return cls.transcodes.rel.related_model
def get_transcode(self, media_format): @classmethod
Transcode = self.get_transcode_model() def get_track_model(cls):
try: return cls.tracks.rel.related_model
return self.transcodes.get(media_format=media_format)
except Transcode.DoesNotExist:
return self.do_transcode(media_format)
def video_tag(self, attrs=None): def video_tag(self, attrs=None):
if attrs is None: if attrs is None:
...@@ -212,7 +204,7 @@ class AbstractVideo(CollectionMember, index.Indexed, models.Model): ...@@ -212,7 +204,7 @@ class AbstractVideo(CollectionMember, index.Indexed, models.Model):
transcode, created = self.transcodes.get_or_create( transcode, created = self.transcodes.get_or_create(
media_format=media_format, media_format=media_format,
) )
if transcode.processing is False: if created or transcode.processing is False:
transcode.processing = True transcode.processing = True
transcode.error_messages = '' transcode.error_messages = ''
transcode.quality = quality transcode.quality = quality
...@@ -292,61 +284,6 @@ class TranscodingThread(threading.Thread): ...@@ -292,61 +284,6 @@ class TranscodingThread(threading.Thread):
shutil.rmtree(output_dir, ignore_errors=True) shutil.rmtree(output_dir, ignore_errors=True)
@contextmanager
def get_local_file(file):
"""
Get a local version of the file, downloading it from the remote storage if
required. The returned value should be used as a context manager to
ensure any temporary files are cleaned up afterwards.
"""
try:
with open(file.path):
yield file.path
except NotImplementedError:
_, ext = os.path.splitext(file.name)
with NamedTemporaryFile(prefix='wagtailvideo-', suffix=ext) as tmp:
try:
file.open('rb')
for chunk in file.chunks():
tmp.write(chunk)
finally:
file.close()
tmp.flush()
yield tmp.name
# Delete files when model is deleted
@receiver(pre_delete, sender=Video)
def video_delete(sender, instance, **kwargs):
instance.thumbnail.delete(False)
instance.file.delete(False)
# Fields that need the actual video file to create
@receiver(post_save, sender=Video)
def video_saved(sender, instance, **kwargs):
if not ffmpeg.installed():
return
if hasattr(instance, '_from_signal'):
return
has_changed = instance._initial_file is not instance.file
filled_out = instance.thumbnail is not None and instance.duration is not None
if has_changed or not filled_out:
with get_local_file(instance.file) as file_path:
if has_changed or instance.thumbnail is None:
instance.thumbnail = ffmpeg.get_thumbnail(file_path)
if has_changed or instance.duration is None:
instance.duration = ffmpeg.get_duration(file_path)
instance.file_size = instance.file.size
instance._from_signal = True
instance.save()
del instance._from_signal
class AbstractVideoTranscode(models.Model): class AbstractVideoTranscode(models.Model):
media_format = EnumChoiceField(MediaFormats) media_format = EnumChoiceField(MediaFormats)
quality = EnumChoiceField(VideoQuality, default=VideoQuality.default) quality = EnumChoiceField(VideoQuality, default=VideoQuality.default)
...@@ -377,7 +314,41 @@ class VideoTranscode(AbstractVideoTranscode): ...@@ -377,7 +314,41 @@ class VideoTranscode(AbstractVideoTranscode):
) )
# Delete files when model is deleted class AbstractTrack(models.Model):
@receiver(pre_delete, sender=VideoTranscode) # TODO move to TextChoices once djangp < 2 is dropped
def transcode_delete(sender, instance, **kwargs): track_kinds = [
instance.file.delete(False) ('subtitles', 'Subtitles'),
('captions', 'Captions'),
('descriptions', 'Descriptions'),
('chapters', 'Chapters'),
('metadata', 'Metadata'),
]
file = models.FileField(
verbose_name=_('file'),
upload_to=get_upload_to
)
kind = models.CharField(max_length=50, choices=track_kinds, default=track_kinds[0][0])
label = models.CharField(
max_length=255, blank=True,
help_text='A user-readable title of the text track.')
language = models.CharField(
max_length=50,
choices=[(k, v) for k, v in bcp47.languages.items()],
default='en', blank=True, help_text='Required if type is "Subtitle"', unique=True)
@property
def url(self):
return self.file.url
def get_upload_to(self, filename):
folder_name = 'video_tracks'
filename = self.file.field.storage.get_valid_name(filename)
return os.path.join(folder_name, filename)
class Meta:
abstract = True
class Track(AbstractTrack):
video = models.ForeignKey(Video, related_name='tracks', on_delete=models.CASCADE)
import os
from contextlib import contextmanager
from django.core.files.temp import NamedTemporaryFile
from django.db import transaction
from django.db.models.signals import post_delete, post_save
from wagtailvideos import ffmpeg, get_video_model
@contextmanager
def get_local_file(file):
"""
Get a local version of the file, downloading it from the remote storage if
required. The returned value should be used as a context manager to
ensure any temporary files are cleaned up afterwards.
"""
try:
with open(file.path):
yield file.path
except NotImplementedError:
_, ext = os.path.splitext(file.name)
with NamedTemporaryFile(prefix='wagtailvideo-', suffix=ext) as tmp:
try:
file.open('rb')
for chunk in file.chunks():
tmp.write(chunk)
finally:
file.close()
tmp.flush()
yield tmp.name
def post_delete_file_cleanup(instance, **kwargs):
# Pass false so FileField doesn't save the model.
transaction.on_commit(lambda: instance.file.delete(False))
if hasattr(instance, 'thumbnail'):
# Delete the thumbnail for videos too
transaction.on_commit(lambda: instance.thumbnail.delete(False))
# Fields that need the actual video file to create using ffmpeg
def video_post_save(instance, **kwargs):
if not ffmpeg.installed():
return
if hasattr(instance, '_from_signal'):
# Sender was us, don't run post save
return
has_changed = instance._initial_file is not instance.file
filled_out = instance.thumbnail is not None and instance.duration is not None
if has_changed or not filled_out:
with get_local_file(instance.file) as file_path:
if has_changed or instance.thumbnail is None:
instance.thumbnail = ffmpeg.get_thumbnail(file_path)
if has_changed or instance.duration is None:
instance.duration = ffmpeg.get_duration(file_path)
instance.file_size = instance.file.size
instance._from_signal = True
instance.save()
del instance._from_signal
def register_signal_handlers():
Video = get_video_model()
VideoTranscode = Video.get_transcode_model()
VideoTrack = Video.get_track_model()
post_save.connect(video_post_save, sender=Video)
post_delete.connect(post_delete_file_cleanup, sender=Video)
post_delete.connect(post_delete_file_cleanup, sender=VideoTranscode)
post_delete.connect(post_delete_file_cleanup, sender=VideoTrack)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment