From fd0f169a5561134b28ed336bfa398c5c459ba5a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonel=20C=C3=A2mara?= Date: Tue, 14 Nov 2017 18:20:13 +0000 Subject: [PATCH 1/7] Update list of TLDs --- gluon/validators.py | 391 +++++++++++++++++++++++++++++--------------- 1 file changed, 255 insertions(+), 136 deletions(-) diff --git a/gluon/validators.py b/gluon/validators.py index 21de1ce2..718758ce 100644 --- a/gluon/validators.py +++ b/gluon/validators.py @@ -1656,173 +1656,292 @@ class IS_GENERIC_URL(Validator): # else the URL is not valid return (value, translate(self.error_message)) -# Sources (obtained 2015-Feb-24): +# Sources (obtained 2017-Nov-11): # http://data.iana.org/TLD/tlds-alpha-by-domain.txt # see scripts/parse_top_level_domains.py for an easy update official_top_level_domains = [ # a - 'abogado', 'ac', 'academy', 'accountants', 'active', 'actor', - 'ad', 'adult', 'ae', 'aero', 'af', 'ag', 'agency', 'ai', - 'airforce', 'al', 'allfinanz', 'alsace', 'am', 'amsterdam', 'an', - 'android', 'ao', 'apartments', 'aq', 'aquarelle', 'ar', 'archi', - 'army', 'arpa', 'as', 'asia', 'associates', 'at', 'attorney', - 'au', 'auction', 'audio', 'autos', 'aw', 'ax', 'axa', 'az', + 'aaa', 'aarp', 'abarth', 'abb', 'abbott', 'abbvie', 'abc', + 'able', 'abogado', 'abudhabi', 'ac', 'academy', 'accenture', + 'accountant', 'accountants', 'aco', 'active', 'actor', 'ad', + 'adac', 'ads', 'adult', 'ae', 'aeg', 'aero', 'aetna', 'af', + 'afamilycompany', 'afl', 'africa', 'ag', 'agakhan', 'agency', + 'ai', 'aig', 'aigo', 'airbus', 'airforce', 'airtel', 'akdn', + 'al', 'alfaromeo', 'alibaba', 'alipay', 'allfinanz', 'allstate', + 'ally', 'alsace', 'alstom', 'am', 'americanexpress', + 'americanfamily', 'amex', 'amfam', 'amica', 'amsterdam', + 'analytics', 'android', 'anquan', 'anz', 'ao', 'aol', + 'apartments', 'app', 'apple', 'aq', 'aquarelle', 'ar', 'arab', + 'aramco', 'archi', 'army', 'arpa', 'art', 'arte', 'as', 'asda', + 'asia', 'associates', 'at', 'athleta', 'attorney', 'au', + 'auction', 'audi', 'audible', 'audio', 'auspost', 'author', + 'auto', 'autos', 'avianca', 'aw', 'aws', 'ax', 'axa', 'az', + 'azure', # b - 'ba', 'band', 'bank', 'bar', 'barclaycard', 'barclays', - 'bargains', 'bayern', 'bb', 'bd', 'be', 'beer', 'berlin', 'best', - 'bf', 'bg', 'bh', 'bi', 'bid', 'bike', 'bingo', 'bio', 'biz', - 'bj', 'black', 'blackfriday', 'bloomberg', 'blue', 'bm', 'bmw', - 'bn', 'bnpparibas', 'bo', 'boo', 'boutique', 'br', 'brussels', - 'bs', 'bt', 'budapest', 'build', 'builders', 'business', 'buzz', - 'bv', 'bw', 'by', 'bz', 'bzh', + 'ba', 'baby', 'baidu', 'banamex', 'bananarepublic', 'band', + 'bank', 'bar', 'barcelona', 'barclaycard', 'barclays', + 'barefoot', 'bargains', 'baseball', 'basketball', 'bauhaus', + 'bayern', 'bb', 'bbc', 'bbt', 'bbva', 'bcg', 'bcn', 'bd', 'be', + 'beats', 'beauty', 'beer', 'bentley', 'berlin', 'best', + 'bestbuy', 'bet', 'bf', 'bg', 'bh', 'bharti', 'bi', 'bible', + 'bid', 'bike', 'bing', 'bingo', 'bio', 'biz', 'bj', 'black', + 'blackfriday', 'blanco', 'blockbuster', 'blog', 'bloomberg', + 'blue', 'bm', 'bms', 'bmw', 'bn', 'bnl', 'bnpparibas', 'bo', + 'boats', 'boehringer', 'bofa', 'bom', 'bond', 'boo', 'book', + 'booking', 'boots', 'bosch', 'bostik', 'boston', 'bot', + 'boutique', 'box', 'br', 'bradesco', 'bridgestone', 'broadway', + 'broker', 'brother', 'brussels', 'bs', 'bt', 'budapest', + 'bugatti', 'build', 'builders', 'business', 'buy', 'buzz', 'bv', + 'bw', 'by', 'bz', 'bzh', # c - 'ca', 'cab', 'cal', 'camera', 'camp', 'cancerresearch', 'canon', - 'capetown', 'capital', 'caravan', 'cards', 'care', 'career', - 'careers', 'cartier', 'casa', 'cash', 'casino', 'cat', - 'catering', 'cbn', 'cc', 'cd', 'center', 'ceo', 'cern', 'cf', - 'cg', 'ch', 'channel', 'chat', 'cheap', 'christmas', 'chrome', - 'church', 'ci', 'citic', 'city', 'ck', 'cl', 'claims', - 'cleaning', 'click', 'clinic', 'clothing', 'club', 'cm', 'cn', - 'co', 'coach', 'codes', 'coffee', 'college', 'cologne', 'com', - 'community', 'company', 'computer', 'condos', 'construction', - 'consulting', 'contractors', 'cooking', 'cool', 'coop', - 'country', 'cr', 'credit', 'creditcard', 'cricket', 'crs', - 'cruises', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', - 'cz', + 'ca', 'cab', 'cafe', 'cal', 'call', 'calvinklein', 'cam', + 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', + 'capital', 'capitalone', 'car', 'caravan', 'cards', 'care', + 'career', 'careers', 'cars', 'cartier', 'casa', 'case', 'caseih', + 'cash', 'casino', 'cat', 'catering', 'catholic', 'cba', 'cbn', + 'cbre', 'cbs', 'cc', 'cd', 'ceb', 'center', 'ceo', 'cern', 'cf', + 'cfa', 'cfd', 'cg', 'ch', 'chanel', 'channel', 'chase', 'chat', + 'cheap', 'chintai', 'christmas', 'chrome', 'chrysler', 'church', + 'ci', 'cipriani', 'circle', 'cisco', 'citadel', 'citi', 'citic', + 'city', 'cityeats', 'ck', 'cl', 'claims', 'cleaning', 'click', + 'clinic', 'clinique', 'clothing', 'cloud', 'club', 'clubmed', + 'cm', 'cn', 'co', 'coach', 'codes', 'coffee', 'college', + 'cologne', 'com', 'comcast', 'commbank', 'community', 'company', + 'compare', 'computer', 'comsec', 'condos', 'construction', + 'consulting', 'contact', 'contractors', 'cooking', + 'cookingchannel', 'cool', 'coop', 'corsica', 'country', 'coupon', + 'coupons', 'courses', 'cr', 'credit', 'creditcard', + 'creditunion', 'cricket', 'crown', 'crs', 'cruise', 'cruises', + 'csc', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', + 'cyou', 'cz', # d - 'dabur', 'dad', 'dance', 'dating', 'day', 'dclk', 'de', 'deals', - 'degree', 'delivery', 'democrat', 'dental', 'dentist', 'desi', - 'design', 'dev', 'diamonds', 'diet', 'digital', 'direct', - 'directory', 'discount', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs', - 'domains', 'doosan', 'durban', 'dvag', 'dz', + 'dabur', 'dad', 'dance', 'data', 'date', 'dating', 'datsun', + 'day', 'dclk', 'dds', 'de', 'deal', 'dealer', 'deals', 'degree', + 'delivery', 'dell', 'deloitte', 'delta', 'democrat', 'dental', + 'dentist', 'desi', 'design', 'dev', 'dhl', 'diamonds', 'diet', + 'digital', 'direct', 'directory', 'discount', 'discover', 'dish', + 'diy', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs', 'doctor', 'dodge', + 'dog', 'doha', 'domains', 'dot', 'download', 'drive', 'dtv', + 'dubai', 'duck', 'dunlop', 'duns', 'dupont', 'durban', 'dvag', + 'dvr', 'dz', # e - 'eat', 'ec', 'edu', 'education', 'ee', 'eg', 'email', 'emerck', - 'energy', 'engineer', 'engineering', 'enterprises', 'equipment', - 'er', 'es', 'esq', 'estate', 'et', 'eu', 'eurovision', 'eus', - 'events', 'everbank', 'exchange', 'expert', 'exposed', + 'earth', 'eat', 'ec', 'eco', 'edeka', 'edu', 'education', 'ee', + 'eg', 'email', 'emerck', 'energy', 'engineer', 'engineering', + 'enterprises', 'epost', 'epson', 'equipment', 'er', 'ericsson', + 'erni', 'es', 'esq', 'estate', 'esurance', 'et', 'etisalat', + 'eu', 'eurovision', 'eus', 'events', 'everbank', 'exchange', + 'expert', 'exposed', 'express', 'extraspace', # f - 'fail', 'fans', 'farm', 'fashion', 'feedback', 'fi', 'finance', - 'financial', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', - 'fj', 'fk', 'flights', 'florist', 'flowers', 'flsmidth', 'fly', - 'fm', 'fo', 'foo', 'football', 'forsale', 'foundation', 'fr', - 'frl', 'frogans', 'fund', 'furniture', 'futbol', + 'fage', 'fail', 'fairwinds', 'faith', 'family', 'fan', 'fans', + 'farm', 'farmers', 'fashion', 'fast', 'fedex', 'feedback', + 'ferrari', 'ferrero', 'fi', 'fiat', 'fidelity', 'fido', 'film', + 'final', 'finance', 'financial', 'fire', 'firestone', 'firmdale', + 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk', 'flickr', + 'flights', 'flir', 'florist', 'flowers', 'fly', 'fm', 'fo', + 'foo', 'food', 'foodnetwork', 'football', 'ford', 'forex', + 'forsale', 'forum', 'foundation', 'fox', 'fr', 'free', + 'fresenius', 'frl', 'frogans', 'frontdoor', 'frontier', 'ftr', + 'fujitsu', 'fujixerox', 'fun', 'fund', 'furniture', 'futbol', + 'fyi', # g - 'ga', 'gal', 'gallery', 'garden', 'gb', 'gbiz', 'gd', 'gdn', - 'ge', 'gent', 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', - 'gives', 'gl', 'glass', 'gle', 'global', 'globo', 'gm', 'gmail', - 'gmo', 'gmx', 'gn', 'goldpoint', 'goog', 'google', 'gop', 'gov', - 'gp', 'gq', 'gr', 'graphics', 'gratis', 'green', 'gripe', 'gs', - 'gt', 'gu', 'guide', 'guitars', 'guru', 'gw', 'gy', + 'ga', 'gal', 'gallery', 'gallo', 'gallup', 'game', 'games', + 'gap', 'garden', 'gb', 'gbiz', 'gd', 'gdn', 'ge', 'gea', 'gent', + 'genting', 'george', 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', + 'gifts', 'gives', 'giving', 'gl', 'glade', 'glass', 'gle', + 'global', 'globo', 'gm', 'gmail', 'gmbh', 'gmo', 'gmx', 'gn', + 'godaddy', 'gold', 'goldpoint', 'golf', 'goo', 'goodhands', + 'goodyear', 'goog', 'google', 'gop', 'got', 'gov', 'gp', 'gq', + 'gr', 'grainger', 'graphics', 'gratis', 'green', 'gripe', + 'grocery', 'group', 'gs', 'gt', 'gu', 'guardian', 'gucci', + 'guge', 'guide', 'guitars', 'guru', 'gw', 'gy', # h - 'hamburg', 'hangout', 'haus', 'healthcare', 'help', 'here', - 'hermes', 'hiphop', 'hiv', 'hk', 'hm', 'hn', 'holdings', - 'holiday', 'homes', 'horse', 'host', 'hosting', 'house', 'how', - 'hr', 'ht', 'hu', + 'hair', 'hamburg', 'hangout', 'haus', 'hbo', 'hdfc', 'hdfcbank', + 'health', 'healthcare', 'help', 'helsinki', 'here', 'hermes', + 'hgtv', 'hiphop', 'hisamitsu', 'hitachi', 'hiv', 'hk', 'hkt', + 'hm', 'hn', 'hockey', 'holdings', 'holiday', 'homedepot', + 'homegoods', 'homes', 'homesense', 'honda', 'honeywell', 'horse', + 'hospital', 'host', 'hosting', 'hot', 'hoteles', 'hotels', + 'hotmail', 'house', 'how', 'hr', 'hsbc', 'ht', 'hu', 'hughes', + 'hyatt', 'hyundai', # i - 'ibm', 'id', 'ie', 'ifm', 'il', 'im', 'immo', 'immobilien', 'in', - 'industries', 'info', 'ing', 'ink', 'institute', 'insure', 'int', - 'international', 'investments', 'io', 'iq', 'ir', 'irish', 'is', - 'it', 'iwc', + 'ibm', 'icbc', 'ice', 'icu', 'id', 'ie', 'ieee', 'ifm', 'ikano', + 'il', 'im', 'imamat', 'imdb', 'immo', 'immobilien', 'in', + 'industries', 'infiniti', 'info', 'ing', 'ink', 'institute', + 'insurance', 'insure', 'int', 'intel', 'international', 'intuit', + 'investments', 'io', 'ipiranga', 'iq', 'ir', 'irish', 'is', + 'iselect', 'ismaili', 'ist', 'istanbul', 'it', 'itau', 'itv', + 'iveco', 'iwc', # j - 'jcb', 'je', 'jetzt', 'jm', 'jo', 'jobs', 'joburg', 'jp', - 'juegos', + 'jaguar', 'java', 'jcb', 'jcp', 'je', 'jeep', 'jetzt', 'jewelry', + 'jio', 'jlc', 'jll', 'jm', 'jmp', 'jnj', 'jo', 'jobs', 'joburg', + 'jot', 'joy', 'jp', 'jpmorgan', 'jprs', 'juegos', 'juniper', # k - 'kaufen', 'kddi', 'ke', 'kg', 'kh', 'ki', 'kim', 'kitchen', - 'kiwi', 'km', 'kn', 'koeln', 'kp', 'kr', 'krd', 'kred', 'kw', - 'ky', 'kyoto', 'kz', + 'kaufen', 'kddi', 'ke', 'kerryhotels', 'kerrylogistics', + 'kerryproperties', 'kfh', 'kg', 'kh', 'ki', 'kia', 'kim', + 'kinder', 'kindle', 'kitchen', 'kiwi', 'km', 'kn', 'koeln', + 'komatsu', 'kosher', 'kp', 'kpmg', 'kpn', 'kr', 'krd', 'kred', + 'kuokgroup', 'kw', 'ky', 'kyoto', 'kz', # l - 'la', 'lacaixa', 'land', 'lat', 'latrobe', 'lawyer', 'lb', 'lc', - 'lds', 'lease', 'legal', 'lgbt', 'li', 'lidl', 'life', - 'lighting', 'limited', 'limo', 'link', 'lk', 'loans', - 'localhost', 'london', 'lotte', 'lotto', 'lr', 'ls', 'lt', - 'ltda', 'lu', 'luxe', 'luxury', 'lv', 'ly', + 'la', 'lacaixa', 'ladbrokes', 'lamborghini', 'lamer', + 'lancaster', 'lancia', 'lancome', 'land', 'landrover', 'lanxess', + 'lasalle', 'lat', 'latino', 'latrobe', 'law', 'lawyer', 'lb', + 'lc', 'lds', 'lease', 'leclerc', 'lefrak', 'legal', 'lego', + 'lexus', 'lgbt', 'li', 'liaison', 'lidl', 'life', + 'lifeinsurance', 'lifestyle', 'lighting', 'like', 'lilly', + 'limited', 'limo', 'lincoln', 'linde', 'link', 'lipsy', 'live', + 'living', 'lixil', 'lk', 'loan', 'loans', 'localhost', 'locker', + 'locus', 'loft', 'lol', 'london', 'lotte', 'lotto', 'love', + 'lpl', 'lplfinancial', 'lr', 'ls', 'lt', 'ltd', 'ltda', 'lu', + 'lundbeck', 'lupin', 'luxe', 'luxury', 'lv', 'ly', # m - 'ma', 'madrid', 'maison', 'management', 'mango', 'market', - 'marketing', 'marriott', 'mc', 'md', 'me', 'media', 'meet', - 'melbourne', 'meme', 'memorial', 'menu', 'mg', 'mh', 'miami', - 'mil', 'mini', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'moda', - 'moe', 'monash', 'money', 'mormon', 'mortgage', 'moscow', - 'motorcycles', 'mov', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', - 'museum', 'mv', 'mw', 'mx', 'my', 'mz', + 'ma', 'macys', 'madrid', 'maif', 'maison', 'makeup', 'man', + 'management', 'mango', 'map', 'market', 'marketing', 'markets', + 'marriott', 'marshalls', 'maserati', 'mattel', 'mba', 'mc', + 'mckinsey', 'md', 'me', 'med', 'media', 'meet', 'melbourne', + 'meme', 'memorial', 'men', 'menu', 'meo', 'merckmsd', 'metlife', + 'mg', 'mh', 'miami', 'microsoft', 'mil', 'mini', 'mint', 'mit', + 'mitsubishi', 'mk', 'ml', 'mlb', 'mls', 'mm', 'mma', 'mn', 'mo', + 'mobi', 'mobile', 'mobily', 'moda', 'moe', 'moi', 'mom', + 'monash', 'money', 'monster', 'mopar', 'mormon', 'mortgage', + 'moscow', 'moto', 'motorcycles', 'mov', 'movie', 'movistar', + 'mp', 'mq', 'mr', 'ms', 'msd', 'mt', 'mtn', 'mtr', 'mu', + 'museum', 'mutual', 'mv', 'mw', 'mx', 'my', 'mz', # n - 'na', 'nagoya', 'name', 'navy', 'nc', 'ne', 'net', 'network', - 'neustar', 'new', 'nexus', 'nf', 'ng', 'ngo', 'nhk', 'ni', - 'nico', 'ninja', 'nl', 'no', 'np', 'nr', 'nra', 'nrw', 'ntt', - 'nu', 'nyc', 'nz', + 'na', 'nab', 'nadex', 'nagoya', 'name', 'nationwide', 'natura', + 'navy', 'nba', 'nc', 'ne', 'nec', 'net', 'netbank', 'netflix', + 'network', 'neustar', 'new', 'newholland', 'news', 'next', + 'nextdirect', 'nexus', 'nf', 'nfl', 'ng', 'ngo', 'nhk', 'ni', + 'nico', 'nike', 'nikon', 'ninja', 'nissan', 'nissay', 'nl', 'no', + 'nokia', 'northwesternmutual', 'norton', 'now', 'nowruz', + 'nowtv', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', # o - 'okinawa', 'om', 'one', 'ong', 'onl', 'ooo', 'org', 'organic', - 'osaka', 'otsuka', 'ovh', + 'obi', 'observer', 'off', 'office', 'okinawa', 'olayan', + 'olayangroup', 'oldnavy', 'ollo', 'om', 'omega', 'one', 'ong', + 'onl', 'online', 'onyourside', 'ooo', 'open', 'oracle', 'orange', + 'org', 'organic', 'origins', 'osaka', 'otsuka', 'ott', 'ovh', # p - 'pa', 'paris', 'partners', 'parts', 'party', 'pe', 'pf', 'pg', - 'ph', 'pharmacy', 'photo', 'photography', 'photos', 'physio', - 'pics', 'pictures', 'pink', 'pizza', 'pk', 'pl', 'place', - 'plumbing', 'pm', 'pn', 'pohl', 'poker', 'porn', 'post', 'pr', - 'praxi', 'press', 'pro', 'prod', 'productions', 'prof', - 'properties', 'property', 'ps', 'pt', 'pub', 'pw', 'py', + 'pa', 'page', 'panasonic', 'panerai', 'paris', 'pars', + 'partners', 'parts', 'party', 'passagens', 'pay', 'pccw', 'pe', + 'pet', 'pf', 'pfizer', 'pg', 'ph', 'pharmacy', 'phd', 'philips', + 'phone', 'photo', 'photography', 'photos', 'physio', 'piaget', + 'pics', 'pictet', 'pictures', 'pid', 'pin', 'ping', 'pink', + 'pioneer', 'pizza', 'pk', 'pl', 'place', 'play', 'playstation', + 'plumbing', 'plus', 'pm', 'pn', 'pnc', 'pohl', 'poker', + 'politie', 'porn', 'post', 'pr', 'pramerica', 'praxi', 'press', + 'prime', 'pro', 'prod', 'productions', 'prof', 'progressive', + 'promo', 'properties', 'property', 'protection', 'pru', + 'prudential', 'ps', 'pt', 'pub', 'pw', 'pwc', 'py', # q - 'qa', 'qpon', 'quebec', + 'qa', 'qpon', 'quebec', 'quest', 'qvc', # r - 're', 'realtor', 'recipes', 'red', 'rehab', 'reise', 'reisen', - 'reit', 'ren', 'rentals', 'repair', 'report', 'republican', - 'rest', 'restaurant', 'reviews', 'rich', 'rio', 'rip', 'ro', - 'rocks', 'rodeo', 'rs', 'rsvp', 'ru', 'ruhr', 'rw', 'ryukyu', + 'racing', 'radio', 'raid', 're', 'read', 'realestate', 'realtor', + 'realty', 'recipes', 'red', 'redstone', 'redumbrella', 'rehab', + 'reise', 'reisen', 'reit', 'reliance', 'ren', 'rent', 'rentals', + 'repair', 'report', 'republican', 'rest', 'restaurant', 'review', + 'reviews', 'rexroth', 'rich', 'richardli', 'ricoh', + 'rightathome', 'ril', 'rio', 'rip', 'rmit', 'ro', 'rocher', + 'rocks', 'rodeo', 'rogers', 'room', 'rs', 'rsvp', 'ru', 'rugby', + 'ruhr', 'run', 'rw', 'rwe', 'ryukyu', # s - 'sa', 'saarland', 'sale', 'samsung', 'sarl', 'saxo', 'sb', 'sc', - 'sca', 'scb', 'schmidt', 'school', 'schule', 'schwarz', - 'science', 'scot', 'sd', 'se', 'services', 'sew', 'sexy', 'sg', - 'sh', 'shiksha', 'shoes', 'shriram', 'si', 'singles', 'sj', 'sk', - 'sky', 'sl', 'sm', 'sn', 'so', 'social', 'software', 'sohu', - 'solar', 'solutions', 'soy', 'space', 'spiegel', 'sr', 'st', - 'style', 'su', 'supplies', 'supply', 'support', 'surf', - 'surgery', 'suzuki', 'sv', 'sx', 'sy', 'sydney', 'systems', 'sz', + 'sa', 'saarland', 'safe', 'safety', 'sakura', 'sale', 'salon', + 'samsclub', 'samsung', 'sandvik', 'sandvikcoromant', 'sanofi', + 'sap', 'sapo', 'sarl', 'sas', 'save', 'saxo', 'sb', 'sbi', 'sbs', + 'sc', 'sca', 'scb', 'schaeffler', 'schmidt', 'scholarships', + 'school', 'schule', 'schwarz', 'science', 'scjohnson', 'scor', + 'scot', 'sd', 'se', 'search', 'seat', 'secure', 'security', + 'seek', 'select', 'sener', 'services', 'ses', 'seven', 'sew', + 'sex', 'sexy', 'sfr', 'sg', 'sh', 'shangrila', 'sharp', 'shaw', + 'shell', 'shia', 'shiksha', 'shoes', 'shop', 'shopping', + 'shouji', 'show', 'showtime', 'shriram', 'si', 'silk', 'sina', + 'singles', 'site', 'sj', 'sk', 'ski', 'skin', 'sky', 'skype', + 'sl', 'sling', 'sm', 'smart', 'smile', 'sn', 'sncf', 'so', + 'soccer', 'social', 'softbank', 'software', 'sohu', 'solar', + 'solutions', 'song', 'sony', 'soy', 'space', 'spiegel', 'spot', + 'spreadbetting', 'sr', 'srl', 'srt', 'st', 'stada', 'staples', + 'star', 'starhub', 'statebank', 'statefarm', 'statoil', 'stc', + 'stcgroup', 'stockholm', 'storage', 'store', 'stream', 'studio', + 'study', 'style', 'su', 'sucks', 'supplies', 'supply', 'support', + 'surf', 'surgery', 'suzuki', 'sv', 'swatch', 'swiftcover', + 'swiss', 'sx', 'sy', 'sydney', 'symantec', 'systems', 'sz', # t - 'taipei', 'tatar', 'tattoo', 'tax', 'tc', 'td', 'technology', - 'tel', 'temasek', 'tennis', 'tf', 'tg', 'th', 'tienda', 'tips', - 'tires', 'tirol', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'today', - 'tokyo', 'tools', 'top', 'toshiba', 'town', 'toys', 'tp', 'tr', - 'trade', 'training', 'travel', 'trust', 'tt', 'tui', 'tv', 'tw', - 'tz', + 'tab', 'taipei', 'talk', 'taobao', 'target', 'tatamotors', + 'tatar', 'tattoo', 'tax', 'taxi', 'tc', 'tci', 'td', 'tdk', + 'team', 'tech', 'technology', 'tel', 'telecity', 'telefonica', + 'temasek', 'tennis', 'teva', 'tf', 'tg', 'th', 'thd', 'theater', + 'theatre', 'tiaa', 'tickets', 'tienda', 'tiffany', 'tips', + 'tires', 'tirol', 'tj', 'tjmaxx', 'tjx', 'tk', 'tkmaxx', 'tl', + 'tm', 'tmall', 'tn', 'to', 'today', 'tokyo', 'tools', 'top', + 'toray', 'toshiba', 'total', 'tours', 'town', 'toyota', 'toys', + 'tr', 'trade', 'trading', 'training', 'travel', 'travelchannel', + 'travelers', 'travelersinsurance', 'trust', 'trv', 'tt', 'tube', + 'tui', 'tunes', 'tushu', 'tv', 'tvs', 'tw', 'tz', # u - 'ua', 'ug', 'uk', 'university', 'uno', 'uol', 'us', 'uy', 'uz', + 'ua', 'ubank', 'ubs', 'uconnect', 'ug', 'uk', 'unicom', + 'university', 'uno', 'uol', 'ups', 'us', 'uy', 'uz', # v - 'va', 'vacations', 'vc', 've', 'vegas', 'ventures', - 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'villas', - 'vision', 'vlaanderen', 'vn', 'vodka', 'vote', 'voting', 'voto', - 'voyage', 'vu', + 'va', 'vacations', 'vana', 'vanguard', 'vc', 've', 'vegas', + 'ventures', 'verisign', 'versicherung', 'vet', 'vg', 'vi', + 'viajes', 'video', 'vig', 'viking', 'villas', 'vin', 'vip', + 'virgin', 'visa', 'vision', 'vista', 'vistaprint', 'viva', + 'vivo', 'vlaanderen', 'vn', 'vodka', 'volkswagen', 'volvo', + 'vote', 'voting', 'voto', 'voyage', 'vu', 'vuelos', # w - 'wales', 'wang', 'watch', 'webcam', 'website', 'wed', 'wedding', - 'wf', 'whoswho', 'wien', 'wiki', 'williamhill', 'wme', 'work', - 'works', 'world', 'ws', 'wtc', 'wtf', + 'wales', 'walmart', 'walter', 'wang', 'wanggou', 'warman', + 'watch', 'watches', 'weather', 'weatherchannel', 'webcam', + 'weber', 'website', 'wed', 'wedding', 'weibo', 'weir', 'wf', + 'whoswho', 'wien', 'wiki', 'williamhill', 'win', 'windows', + 'wine', 'winners', 'wme', 'wolterskluwer', 'woodside', 'work', + 'works', 'world', 'wow', 'ws', 'wtc', 'wtf', # x - 'xn--1qqw23a', 'xn--3bst00m', 'xn--3ds443g', 'xn--3e0b707e', - 'xn--45brj9c', 'xn--45q11c', 'xn--4gbrim', 'xn--55qw42g', - 'xn--55qx5d', 'xn--6frz82g', 'xn--6qq986b3xl', 'xn--80adxhks', - 'xn--80ao21a', 'xn--80asehdb', 'xn--80aswg', 'xn--90a3ac', - 'xn--90ais', 'xn--b4w605ferd', 'xn--c1avg', 'xn--cg4bki', - 'xn--clchc0ea0b2g2a9gcd', 'xn--czr694b', 'xn--czrs0t', - 'xn--czru2d', 'xn--d1acj3b', 'xn--d1alf', 'xn--fiq228c5hs', - 'xn--fiq64b', 'xn--fiqs8s', 'xn--fiqz9s', 'xn--flw351e', - 'xn--fpcrj9c3d', 'xn--fzc2c9e2c', 'xn--gecrj9c', 'xn--h2brj9c', - 'xn--hxt814e', 'xn--i1b6b1a6a2e', 'xn--io0a7i', 'xn--j1amh', - 'xn--j6w193g', 'xn--kprw13d', 'xn--kpry57d', 'xn--kput3i', - 'xn--l1acc', 'xn--lgbbat1ad8j', 'xn--mgb9awbf', - 'xn--mgba3a4f16a', 'xn--mgbaam7a8h', 'xn--mgbab2bd', - 'xn--mgbayh7gpa', 'xn--mgbbh1a71e', 'xn--mgbc0a9azcg', - 'xn--mgberp4a5d4ar', 'xn--mgbx4cd0ab', 'xn--ngbc5azd', - 'xn--node', 'xn--nqv7f', 'xn--nqv7fs00ema', 'xn--o3cw4h', - 'xn--ogbpf8fl', 'xn--p1acf', 'xn--p1ai', 'xn--pgbs0dh', - 'xn--q9jyb4c', 'xn--qcka1pmc', 'xn--rhqv96g', 'xn--s9brj9c', - 'xn--ses554g', 'xn--unup4y', 'xn--vermgensberater-ctb', - 'xn--vermgensberatung-pwb', 'xn--vhquv', 'xn--wgbh1c', + 'xbox', 'xerox', 'xfinity', 'xihuan', 'xin', 'xn--11b4c3d', + 'xn--1ck2e1b', 'xn--1qqw23a', 'xn--2scrj9c', 'xn--30rr7y', + 'xn--3bst00m', 'xn--3ds443g', 'xn--3e0b707e', 'xn--3hcrj9c', + 'xn--3oq18vl8pn36a', 'xn--3pxu8k', 'xn--42c2d9a', 'xn--45br5cyl', + 'xn--45brj9c', 'xn--45q11c', 'xn--4gbrim', 'xn--54b7fta0cc', + 'xn--55qw42g', 'xn--55qx5d', 'xn--5su34j936bgsg', 'xn--5tzm5g', + 'xn--6frz82g', 'xn--6qq986b3xl', 'xn--80adxhks', 'xn--80ao21a', + 'xn--80aqecdr1a', 'xn--80asehdb', 'xn--80aswg', 'xn--8y0a063a', + 'xn--90a3ac', 'xn--90ae', 'xn--90ais', 'xn--9dbq2a', + 'xn--9et52u', 'xn--9krt00a', 'xn--b4w605ferd', + 'xn--bck1b9a5dre4c', 'xn--c1avg', 'xn--c2br7g', 'xn--cck2b3b', + 'xn--cg4bki', 'xn--clchc0ea0b2g2a9gcd', 'xn--czr694b', + 'xn--czrs0t', 'xn--czru2d', 'xn--d1acj3b', 'xn--d1alf', + 'xn--e1a4c', 'xn--eckvdtc9d', 'xn--efvy88h', 'xn--estv75g', + 'xn--fct429k', 'xn--fhbei', 'xn--fiq228c5hs', 'xn--fiq64b', + 'xn--fiqs8s', 'xn--fiqz9s', 'xn--fjq720a', 'xn--flw351e', + 'xn--fpcrj9c3d', 'xn--fzc2c9e2c', 'xn--fzys8d69uvgm', + 'xn--g2xx48c', 'xn--gckr3f0f', 'xn--gecrj9c', 'xn--gk3at1e', + 'xn--h2breg3eve', 'xn--h2brj9c', 'xn--h2brj9c8c', 'xn--hxt814e', + 'xn--i1b6b1a6a2e', 'xn--imr513n', 'xn--io0a7i', 'xn--j1aef', + 'xn--j1amh', 'xn--j6w193g', 'xn--jlq61u9w7b', 'xn--jvr189m', + 'xn--kcrx77d1x4a', 'xn--kprw13d', 'xn--kpry57d', 'xn--kpu716f', + 'xn--kput3i', 'xn--l1acc', 'xn--lgbbat1ad8j', 'xn--mgb9awbf', + 'xn--mgba3a3ejt', 'xn--mgba3a4f16a', 'xn--mgba7c0bbn0a', + 'xn--mgbaakc7dvf', 'xn--mgbaam7a8h', 'xn--mgbab2bd', + 'xn--mgbai9azgqp6j', 'xn--mgbayh7gpa', 'xn--mgbb9fbpob', + 'xn--mgbbh1a', 'xn--mgbbh1a71e', 'xn--mgbc0a9azcg', + 'xn--mgbca7dzdo', 'xn--mgberp4a5d4ar', 'xn--mgbgu82a', + 'xn--mgbi4ecexp', 'xn--mgbpl2fh', 'xn--mgbt3dhd', 'xn--mgbtx2b', + 'xn--mgbx4cd0ab', 'xn--mix891f', 'xn--mk1bu44c', 'xn--mxtq1m', + 'xn--ngbc5azd', 'xn--ngbe9e0a', 'xn--ngbrx', 'xn--node', + 'xn--nqv7f', 'xn--nqv7fs00ema', 'xn--nyqy26a', 'xn--o3cw4h', + 'xn--ogbpf8fl', 'xn--p1acf', 'xn--p1ai', 'xn--pbt977c', + 'xn--pgbs0dh', 'xn--pssy2u', 'xn--q9jyb4c', 'xn--qcka1pmc', + 'xn--qxam', 'xn--rhqv96g', 'xn--rovu88b', 'xn--rvc1e0am3e', + 'xn--s9brj9c', 'xn--ses554g', 'xn--t60b56a', 'xn--tckwe', + 'xn--tiq49xqyj', 'xn--unup4y', 'xn--vermgensberater-ctb', + 'xn--vermgensberatung-pwb', 'xn--vhquv', 'xn--vuq861b', + 'xn--w4r85el8fhu5dnra', 'xn--w4rs40l', 'xn--wgbh1c', 'xn--wgbl6a', 'xn--xhq521b', 'xn--xkc2al3hye2a', - 'xn--xkc2dl3a5ee0h', 'xn--yfro4i67o', 'xn--ygbi2ammx', - 'xn--zfr164b', 'xxx', 'xyz', + 'xn--xkc2dl3a5ee0h', 'xn--y9a3aq', 'xn--yfro4i67o', + 'xn--ygbi2ammx', 'xn--zfr164b', 'xperia', 'xxx', 'xyz', # y - 'yachts', 'yandex', 'ye', 'yodobashi', 'yoga', 'yokohama', - 'youtube', 'yt', + 'yachts', 'yahoo', 'yamaxun', 'yandex', 'ye', 'yodobashi', + 'yoga', 'yokohama', 'you', 'youtube', 'yt', 'yun', # z - 'za', 'zip', 'zm', 'zone', 'zuerich', 'zw' + 'za', 'zappos', 'zara', 'zero', 'zip', 'zippo', 'zm', 'zone', + 'zuerich', 'zw' ] From 071622b9d99769181885e9846075f0d3cd6ab0a0 Mon Sep 17 00:00:00 2001 From: abastardi Date: Wed, 15 Nov 2017 14:52:19 -0500 Subject: [PATCH 2/7] Fix Janrain due to change in behavior Janrain has started providing the login token via a POST request in addition to including it in the query string. This results in request.vars.token being a list containing two copies of the token, which breaks the web2py code. This change keeps just a single copy of the token. --- gluon/contrib/login_methods/janrain_account.py | 7 +++++-- gluon/contrib/login_methods/rpx_account.py | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/gluon/contrib/login_methods/janrain_account.py b/gluon/contrib/login_methods/janrain_account.py index 02229ce8..1834b322 100644 --- a/gluon/contrib/login_methods/janrain_account.py +++ b/gluon/contrib/login_methods/janrain_account.py @@ -78,10 +78,13 @@ class RPXAccount(object): def get_user(self): request = self.request - if request.vars.token: + # Janrain now sends the token via both a POST body and the query + # string, so we should keep only one of these. + token = request.post_vars.token or request.get_vars.token + if token: user = Storage() data = urllib.urlencode( - dict(apiKey=self.api_key, token=request.vars.token)) + dict(apiKey=self.api_key, token=token)) auth_info_json = fetch(self.auth_url + '?' + data) auth_info = json.loads(auth_info_json) diff --git a/gluon/contrib/login_methods/rpx_account.py b/gluon/contrib/login_methods/rpx_account.py index 4d7cbf40..dcfdc114 100644 --- a/gluon/contrib/login_methods/rpx_account.py +++ b/gluon/contrib/login_methods/rpx_account.py @@ -78,10 +78,13 @@ class RPXAccount(object): def get_user(self): request = self.request - if request.vars.token: + # Janrain now sends the token via both a POST body and the query + # string, so we should keep only one of these. + token = request.post_vars.token or request.get_vars.token + if token: user = Storage() data = urllib.urlencode( - dict(apiKey=self.api_key, token=request.vars.token)) + dict(apiKey=self.api_key, token=token)) auth_info_json = fetch(self.auth_url + '?' + data) auth_info = json.loads(auth_info_json) From b732ab6d5372f47a2fd4d5b469d64f6e4659159e Mon Sep 17 00:00:00 2001 From: Tim Nyborg Date: Fri, 17 Nov 2017 16:53:27 +0000 Subject: [PATCH 3/7] Update SQLFORM deleted = False if readonly fixes the following syntax: form = SQLFORM(table, record, readonly=readonly, deletable=True) form.process() if form.deleted: pass elif form.accepted: pass --- gluon/sqlhtml.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index dbe93241..94fba499 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -1676,6 +1676,7 @@ class SQLFORM(FORM): keepvalues = True if self.record else False if self.readonly: + self.deleted = False return False if request_vars.__class__.__name__ == 'Request': From 26081782c8576da29ffe3aa7d763251a6d7ccf43 Mon Sep 17 00:00:00 2001 From: ilvalle Date: Sat, 18 Nov 2017 12:44:46 +0100 Subject: [PATCH 4/7] testing development environments --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index e7c88e7e..644e6211 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,12 +10,16 @@ python: - '2.7' - '3.5' - '3.6' + - '3.6-dev' + - '3.7-dev' - 'pypy-5.3.1' - 'pypy3.5-5.7.1-beta' matrix: allow_failures: - python: 'pypy3.5-5.7.1-beta' + - python: '3.6-dev' + - python: '3.7-dev' install: - pip install -e . From 3410810c1cc078182bcdc9af2a817fe1aedbc90a Mon Sep 17 00:00:00 2001 From: Vinyl Darkscratch Date: Mon, 20 Nov 2017 12:54:07 -0800 Subject: [PATCH 5/7] Fix update_languages script (use application folder) Admittedly after preparing this script for others to use, I kind of forgot to test it... Whoops! This is an update that should fix the script and make Gluon happy. Instead of taking the languages folder, it takes the application folder, to help resolve conflicts with Gluon. The script was also originally configured to run with the language folder being the current working directory, and as such, the changes to the language files would never be saved. --- scripts/update_languages.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/update_languages.py b/scripts/update_languages.py index 3e94cb36..ea7672c4 100644 --- a/scripts/update_languages.py +++ b/scripts/update_languages.py @@ -18,7 +18,7 @@ from gluon.utf8 import Utf8 from gluon._compat import copyreg, PY2, maketrans, iterkeys, unicodeT, to_unicode, to_bytes, iteritems, to_native, pjoin from gluon.languages import findT -# This script can be run with no arguments (which sets the language folder to the current working directory, and default language to English), one argument (which sets the default language), or two arguments (language folder path and default language). +# This script can be run with no arguments (which sets the application folder to the current working directory, and default language to English), one argument (which sets the default language), or two arguments (application folder path and default language). # When run, it will update the default language, as well as strip all of the strings found in the non-default languages but not in the default language, and add the strings found in the default language to the non-default languages it is not, making sure translators don't do additional work that will never be used. def read_dict_aux(filename): @@ -53,21 +53,21 @@ def write_file(file, contents): file.close() def update_languages(cwd, default_lang): - defaultfp = os.path.join(cwd, '%s.py' %default_lang) + defaultfp = os.path.join(cwd, "languages", '%s.py' %default_lang) findT(cwd, default_lang) default = read_dict(defaultfp) - for x in os.listdir(cwd): - if x == default_lang or x.startswith("plural-"): continue + for lang in os.listdir(os.path.join(cwd, "languages")): + if lang == default_lang or lang.startswith("plural-"): continue - i18n = read_dict(os.path.join(cwd, x)) + i18n = read_dict(os.path.join(cwd, "languages", lang)) if i18n: - nd = default - for k_d1 in i18n: - if k_d1 in default: - nd[k_d1] = i18n[k_d1] - write_file(open(x, 'w'), nd) - print x + new_dict = default + for phrase in i18n: + if phrase in default: + new_dict[phrase] = i18n[phrase] + write_file(open(os.path.join(cwd, "languages", lang), 'w'), new_dict) + print lang if __name__ == "__main__": cwd = os.getcwd() From 7bbf6b93f3623975e9be62b7c97f17f03c43579e Mon Sep 17 00:00:00 2001 From: Vinyl Darkscratch Date: Mon, 20 Nov 2017 13:02:32 -0800 Subject: [PATCH 6/7] Actually skip the default language --- scripts/update_languages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/update_languages.py b/scripts/update_languages.py index ea7672c4..a918379b 100644 --- a/scripts/update_languages.py +++ b/scripts/update_languages.py @@ -58,7 +58,7 @@ def update_languages(cwd, default_lang): default = read_dict(defaultfp) for lang in os.listdir(os.path.join(cwd, "languages")): - if lang == default_lang or lang.startswith("plural-"): continue + if lang == default_lang+".py" or lang.startswith("plural-"): continue i18n = read_dict(os.path.join(cwd, "languages", lang)) if i18n: From 622b29366adec20e1b9b6aaca274757e63b994e7 Mon Sep 17 00:00:00 2001 From: ilvalle Date: Sat, 2 Dec 2017 10:12:45 +0100 Subject: [PATCH 7/7] fix include_meta for py35, added tests. close #1816 --- gluon/globals.py | 2 +- gluon/tests/test_globals.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gluon/globals.py b/gluon/globals.py index f9f5013b..ea1c46c9 100644 --- a/gluon/globals.py +++ b/gluon/globals.py @@ -459,7 +459,7 @@ class Response(Storage): for meta in iteritems((self.meta or {})): k, v = meta if isinstance(v, dict): - s += '\n' else: s += '\n' % (k, to_native(xmlescape(v))) diff --git a/gluon/tests/test_globals.py b/gluon/tests/test_globals.py index da403dbe..666249fa 100644 --- a/gluon/tests/test_globals.py +++ b/gluon/tests/test_globals.py @@ -230,3 +230,14 @@ class testResponse(unittest.TestCase): current.session._fixup_before_save() cookie = str(current.response.cookies) self.assertTrue('httponly' not in cookie.lower()) + + def test_include_meta(self): + response = Response() + response.meta[u'web2py'] = 'web2py' + response.include_meta() + self.assertEqual(response.body.getvalue(), '\n\n') + response = Response() + response.meta[u'meta_dict'] = {u'tag_name':'tag_value'} + response.include_meta() + self.assertEqual(response.body.getvalue(), '\n\n') +