Hello community, here is the log from the commit of package python-tld for openSUSE:Factory checked in at 2019-02-01 11:44:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-tld (Old) and /work/SRC/openSUSE:Factory/.python-tld.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-tld" Fri Feb 1 11:44:29 2019 rev:5 rq:668244 version:0.9.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-tld/python-tld.changes 2018-12-24 11:45:18.449243885 +0100 +++ /work/SRC/openSUSE:Factory/.python-tld.new.28833/python-tld.changes 2019-02-01 11:44:32.448608233 +0100 @@ -1,0 +2,16 @@ +Wed Jan 23 21:26:49 UTC 2019 - Jan Engelhardt <[email protected]> + +- Use noun phrase. + +------------------------------------------------------------------- +Tue Jan 15 20:37:18 UTC 2019 - Sebastian Wagner <[email protected]> + +- Update to version 0.9.2: + * Fix an issue causing certain punycode TLDs to be deemed invalid. + * Tested against Python 3.7. + * Added tests for commands. + * Dropped Python 2.6 support. + * TLD source updated to the latest version. +- Update and extend remove-download-test.patch + +------------------------------------------------------------------- Old: ---- tld-0.9.1.tar.gz New: ---- tld-0.9.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-tld.spec ++++++ --- /var/tmp/diff_new_pack.kDMB6b/_old 2019-02-01 11:44:34.712605907 +0100 +++ /var/tmp/diff_new_pack.kDMB6b/_new 2019-02-01 11:44:34.712605907 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-tld # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,9 +18,9 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-tld -Version: 0.9.1 +Version: 0.9.2 Release: 0 -Summary: Extract the top level domain (TLD) from the URL given +Summary: URL top level domain (TLD) extraction module License: MPL-1.1 OR GPL-2.0-only OR LGPL-2.1-only Group: Development/Languages/Python Url: https://github.com/barseghyanartur/tld @@ -39,8 +39,8 @@ %python_subpackages %description -Extract the top level domain (TLD) from the URL given. List of TLD names is -taken from Mozillas public suffix list: +This module extracts the top level domain (TLD) from the URL given. +A list of TLD names is taken from Mozillas public suffix list: <https://publicsuffix.org/list/effective_tld_names.dat> %prep ++++++ remove-download-test.patch ++++++ --- /var/tmp/diff_new_pack.kDMB6b/_old 2019-02-01 11:44:34.740605879 +0100 +++ /var/tmp/diff_new_pack.kDMB6b/_new 2019-02-01 11:44:34.740605879 +0100 @@ -1,6 +1,6 @@ ---- tld-0.8/src/tld/tests1.py 2018-07-07 10:19:47.235166666 +0200 -+++ tld-0.8/src/tld/tests.py 2018-07-07 10:20:05.779258621 +0200 -@@ -266,13 +266,6 @@ +--- tld-0.9.2/src/tld/tests/test_core.py 2019-01-10 22:54:41.000000000 +0100 ++++ tld-0.9.2/src/tld/tests/test_core.py 2019-01-15 21:40:19.489828184 +0100 +@@ -296,13 +296,6 @@ return res @log_info @@ -14,3 +14,28 @@ def test_2_fld_good_patterns_pass(self): """Test good URL patterns.""" res = [] +--- tld-0.9.2/src/tld/tests/test_commands.py 2019-01-10 22:54:41.000000000 +0100 ++++ tld-0.9.2/src/tld/tests/test_commands1.py 2019-01-15 21:51:14.998679024 +0100 +@@ -23,22 +23,6 @@ + def setUp(self): + """Set up.""" + +- @log_info +- def test_1_update_tld_names_command(self): +- """Test updating the tld names (re-fetch mozilla source).""" +- res = subprocess.check_output(shlex.split('update-tld-names')).strip() +- self.assertEqual(res, b'True') +- return res +- +- @log_info +- def test_2_update_tld_names_module(self): +- """Test updating the tld names (re-fetch mozilla source).""" +- res = subprocess.check_output( +- shlex.split('python src/tld/commands/update_tld_names.py') +- ).strip() +- self.assertEqual(res, b'True') +- return res +- + + if __name__ == '__main__': + unittest.main() ++++++ tld-0.9.1.tar.gz -> tld-0.9.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/CHANGELOG.rst new/tld-0.9.2/CHANGELOG.rst --- old/tld-0.9.1/CHANGELOG.rst 2018-07-09 21:45:14.000000000 +0200 +++ new/tld-0.9.2/CHANGELOG.rst 2019-01-10 22:54:41.000000000 +0100 @@ -15,6 +15,15 @@ 0.3.4 to 0.4). - All backwards incompatible changes are mentioned in this document. +0.9.2 +----- +2019-01-10 + +- Fix an issue causing certain punycode TLDs to be deemed invalid. +- Tested against Python 3.7. +- Added tests for commands. +- Dropped Python 2.6 support. + 0.9.1 ----- 2018-07-09 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/PKG-INFO new/tld-0.9.2/PKG-INFO --- old/tld-0.9.1/PKG-INFO 2018-07-09 21:59:01.000000000 +0200 +++ new/tld-0.9.2/PKG-INFO 2019-01-10 22:57:17.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: tld -Version: 0.9.1 +Version: 0.9.2 Summary: Extract the top level domain (TLD) from the URL given. Home-page: https://github.com/barseghyanartur/tld Author: Artur Barseghyan @@ -18,7 +18,7 @@ Prerequisites ============= - - Python 2.6, 2.7, 3.4, 3.5, 3.6 and PyPy + - Python 2.7, 3.4, 3.5, 3.6, 3.7 and PyPy Documentation ============= @@ -47,6 +47,9 @@ Usage examples ============== + In addition to examples below, see the `jupyter notebook <jupyter/>`_ + workbook file. + Get the TLD name **as string** from the URL given ------------------------------------------------- .. code-block:: python @@ -216,13 +219,13 @@ Keywords: tld,top level domain names,python Platform: UNKNOWN Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: Operating System :: OS Independent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/README.rst new/tld-0.9.2/README.rst --- old/tld-0.9.1/README.rst 2018-06-14 02:10:10.000000000 +0200 +++ new/tld-0.9.2/README.rst 2019-01-10 22:54:41.000000000 +0100 @@ -10,7 +10,7 @@ Prerequisites ============= -- Python 2.6, 2.7, 3.4, 3.5, 3.6 and PyPy +- Python 2.7, 3.4, 3.5, 3.6, 3.7 and PyPy Documentation ============= @@ -39,6 +39,9 @@ Usage examples ============== +In addition to examples below, see the `jupyter notebook <jupyter/>`_ +workbook file. + Get the TLD name **as string** from the URL given ------------------------------------------------- .. code-block:: python diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/docs/changelog.rst new/tld-0.9.2/docs/changelog.rst --- old/tld-0.9.1/docs/changelog.rst 2018-07-09 21:58:18.000000000 +0200 +++ new/tld-0.9.2/docs/changelog.rst 2019-01-10 22:54:41.000000000 +0100 @@ -15,6 +15,15 @@ 0.3.4 to 0.4). - All backwards incompatible changes are mentioned in this document. +0.9.2 +----- +2019-01-10 + +- Fix an issue causing certain punycode TLDs to be deemed invalid. +- Tested against Python 3.7. +- Added tests for commands. +- Dropped Python 2.6 support. + 0.9.1 ----- 2018-07-09 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/docs/index.rst new/tld-0.9.2/docs/index.rst --- old/tld-0.9.1/docs/index.rst 2018-07-09 21:58:18.000000000 +0200 +++ new/tld-0.9.2/docs/index.rst 2019-01-10 22:54:41.000000000 +0100 @@ -10,7 +10,7 @@ Prerequisites ============= -- Python 2.6, 2.7, 3.4, 3.5, 3.6 and PyPy +- Python 2.7, 3.4, 3.5, 3.6, 3.7 and PyPy Documentation ============= @@ -39,6 +39,9 @@ Usage examples ============== +In addition to examples below, see the `jupyter notebook <jupyter/>`_ +workbook file. + Get the TLD name **as string** from the URL given ------------------------------------------------- .. code-block:: python diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/setup.py new/tld-0.9.2/setup.py --- old/tld-0.9.1/setup.py 2018-07-09 21:45:42.000000000 +0200 +++ new/tld-0.9.2/setup.py 2019-01-10 22:54:41.000000000 +0100 @@ -6,7 +6,7 @@ except: readme = '' -version = '0.9.1' +version = '0.9.2' exec_dirs = [ 'src/tld/bin/', @@ -22,13 +22,13 @@ long_description=readme, classifiers=[ "Programming Language :: Python", - "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", "Environment :: Web Environment", "Intended Audience :: Developers", "Operating System :: OS Independent", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld/__init__.py new/tld-0.9.2/src/tld/__init__.py --- old/tld-0.9.1/src/tld/__init__.py 2018-07-09 21:45:27.000000000 +0200 +++ new/tld-0.9.2/src/tld/__init__.py 2019-01-10 22:54:41.000000000 +0100 @@ -8,7 +8,7 @@ ) __title__ = 'tld' -__version__ = '0.9.1' +__version__ = '0.9.2' __author__ = 'Artur Barseghyan' __copyright__ = '2013-2018 Artur Barseghyan' __license__ = 'GPL 2.0/LGPL 2.1' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld/res/effective_tld_names.dat.txt new/tld-0.9.2/src/tld/res/effective_tld_names.dat.txt --- old/tld-0.9.1/src/tld/res/effective_tld_names.dat.txt 2018-07-09 21:38:43.000000000 +0200 +++ new/tld-0.9.2/src/tld/res/effective_tld_names.dat.txt 2019-01-10 22:54:41.000000000 +0100 @@ -381,8 +381,13 @@ net.bm org.bm -// bn : https://en.wikipedia.org/wiki/.bn -*.bn +// bn : http://www.bnnic.bn/faqs +bn +com.bn +edu.bn +gov.bn +net.bn +org.bn // bo : https://nic.bo/delegacion2015.php#h-1.10 bo @@ -546,6 +551,7 @@ not.br ntr.br odo.br +ong.br org.br osasco.br palmas.br @@ -1239,7 +1245,7 @@ utazas.hu video.hu -// id : https://register.pandi.or.id/ +// id : https://pandi.id/en/domain/registration-requirements/ id ac.id biz.id @@ -1250,6 +1256,7 @@ my.id net.id or.id +ponpes.id sch.id web.id @@ -3692,8 +3699,16 @@ seoul.kr ulsan.kr -// kw : https://en.wikipedia.org/wiki/.kw -*.kw +// kw : https://www.nic.kw/policies/ +// Confirmed by registry <[email protected]> +kw +com.kw +edu.kw +emb.kw +gov.kw +ind.kw +net.kw +org.kw // ky : http://www.icta.ky/da_ky_reg_dom.php // Confirmed by registry <[email protected]> 2008-06-17 @@ -8329,9 +8344,6 @@ // goo : 2014-12-18 NTT Resonant Inc. goo -// goodhands : 2015-07-31 Allstate Fire and Casualty Insurance Company -goodhands - // goodyear : 2015-07-02 The Goodyear Tire & Rubber Company goodyear @@ -8608,9 +8620,6 @@ // iveco : 2015-09-03 CNH Industrial N.V. iveco -// iwc : 2014-06-23 Richemont DNS Inc. -iwc - // jaguar : 2014-11-13 Jaguar Land Rover Ltd jaguar @@ -8635,9 +8644,6 @@ // jio : 2015-04-02 Reliance Industries Limited jio -// jlc : 2014-12-04 Richemont DNS Inc. -jlc - // jll : 2015-04-02 Jones Lang LaSalle Incorporated jll @@ -8989,9 +8995,6 @@ // menu : 2013-09-11 Wedding TLD2, LLC menu -// meo : 2014-11-07 MEO Servicos de Comunicacoes e Multimedia, S.A. -meo - // merckmsd : 2016-07-14 MSD Registry Holdings, Inc. merckmsd @@ -9283,9 +9286,6 @@ // panasonic : 2015-07-30 Panasonic Corporation panasonic -// panerai : 2014-11-07 Richemont DNS Inc. -panerai - // paris : 2014-01-30 City of Paris paris @@ -9634,9 +9634,6 @@ // sap : 2014-03-27 SAP AG sap -// sapo : 2014-11-07 MEO Servicos de Comunicacoes e Multimedia, S.A. -sapo - // sarl : 2014-07-03 Binky Moon, LLC sarl @@ -9991,9 +9988,6 @@ // technology : 2013-09-13 Binky Moon, LLC technology -// telecity : 2015-02-19 TelecityGroup International Limited -telecity - // telefonica : 2014-10-16 Telefónica S.A. telefonica @@ -10201,9 +10195,6 @@ // vision : 2013-12-05 Binky Moon, LLC vision -// vista : 2014-09-18 Vistaprint Limited -vista - // vistaprint : 2014-09-18 Vistaprint Limited vistaprint @@ -10642,9 +10633,6 @@ // xn--zfr164b : 2013-11-08 China Organizational Name Administration Center 政务 -// xperia : 2015-05-14 Sony Mobile Communications AB -xperia - // xyz : 2013-12-05 XYZ.COM LLC xyz @@ -10737,6 +10725,7 @@ // Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/ // Submitted by Luke Wells <[email protected]> cn-north-1.eb.amazonaws.com.cn +cn-northwest-1.eb.amazonaws.com.cn elasticbeanstalk.com ap-northeast-1.elasticbeanstalk.com ap-northeast-2.elasticbeanstalk.com @@ -10823,6 +10812,10 @@ t3l3p0rt.net tele.amune.org +// Apigee : https://apigee.com/ +// Submitted by Apigee Security Team <[email protected]> +apigee.io + // Aptible : https://www.aptible.com/ // Submitted by Thomas Orozco <[email protected]> on-aptible.com @@ -12451,10 +12444,6 @@ // Submitted by Stefan Neufeind <[email protected]> customer.speedpartner.de -// Stackspace : https://www.stackspace.io/ -// Submitted by Lina He <[email protected]> -stackspace.space - // Storj Labs Inc. : https://storj.io/ // Submitted by Philip Hutchins <[email protected]> storj.farm @@ -12533,7 +12522,7 @@ webspace.rocks lima.zone -// TransIP : htts://www.transip.nl +// TransIP : https://www.transip.nl // Submitted by Rory Breuk <[email protected]> *.transurl.be *.transurl.eu diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld/tests/base.py new/tld-0.9.2/src/tld/tests/base.py --- old/tld-0.9.1/src/tld/tests/base.py 1970-01-01 01:00:00.000000000 +0100 +++ new/tld-0.9.2/src/tld/tests/base.py 2019-01-10 22:54:41.000000000 +0100 @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +import logging + +__title__ = 'tld.tests.base' +__author__ = 'Artur Barseghyan' +__copyright__ = '2013-2018 Artur Barseghyan' +__license__ = 'GPL 2.0/LGPL 2.1' +__all__ = ( + 'log_info', +) + +LOG_INFO = True +TRACK_TIME = False + +LOGGER = logging.getLogger(__name__) + + +def log_info(func): + """Log some useful info.""" + if not LOG_INFO: + return func + + def inner(self, *args, **kwargs): + """Inner.""" + if TRACK_TIME: + import simple_timer + timer = simple_timer.Timer() # Start timer + + result = func(self, *args, **kwargs) + + if TRACK_TIME: + timer.stop() # Stop timer + + LOGGER.debug('\n\n%s', func.__name__) + LOGGER.debug('============================') + if func.__doc__: + LOGGER.debug('""" %s """', func.__doc__.strip()) + LOGGER.debug('----------------------------') + if result is not None: + LOGGER.debug(result) + if TRACK_TIME: + LOGGER.debug('done in %s seconds', timer.duration) + LOGGER.debug('\n++++++++++++++++++++++++++++') + + return result + return inner diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld/tests/test_commands.py new/tld-0.9.2/src/tld/tests/test_commands.py --- old/tld-0.9.1/src/tld/tests/test_commands.py 1970-01-01 01:00:00.000000000 +0100 +++ new/tld-0.9.2/src/tld/tests/test_commands.py 2019-01-10 22:54:41.000000000 +0100 @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +import logging +import unittest + +import shlex +import subprocess + +from .base import log_info + +__title__ = 'tld.tests.test_commands' +__author__ = 'Artur Barseghyan' +__copyright__ = '2013-2018 Artur Barseghyan' +__license__ = 'GPL 2.0/LGPL 2.1' +__all__ = ('TestCommands',) + +LOGGER = logging.getLogger(__name__) + + +class TestCommands(unittest.TestCase): + """Tld commands tests.""" + + def setUp(self): + """Set up.""" + + @log_info + def test_1_update_tld_names_command(self): + """Test updating the tld names (re-fetch mozilla source).""" + res = subprocess.check_output(shlex.split('update-tld-names')).strip() + self.assertEqual(res, b'True') + return res + + @log_info + def test_2_update_tld_names_module(self): + """Test updating the tld names (re-fetch mozilla source).""" + res = subprocess.check_output( + shlex.split('python src/tld/commands/update_tld_names.py') + ).strip() + self.assertEqual(res, b'True') + return res + + +if __name__ == '__main__': + unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld/tests/test_core.py new/tld-0.9.2/src/tld/tests/test_core.py --- old/tld-0.9.1/src/tld/tests/test_core.py 1970-01-01 01:00:00.000000000 +0100 +++ new/tld-0.9.2/src/tld/tests/test_core.py 2019-01-10 22:54:41.000000000 +0100 @@ -0,0 +1,467 @@ +# -*- coding: utf-8 -*- + +import copy +import logging +import os +import unittest + +import six + +from .. import defaults +from ..conf import get_setting, set_setting +from ..exceptions import ( + TldBadUrl, + TldDomainNotFound, + TldImproperlyConfigured, + TldIOError, +) +from ..helpers import project_dir +from ..utils import ( + get_fld, + get_tld, + parse_tld, + update_tld_names, +) + +from .base import log_info + +__title__ = 'tld.tests.test_core' +__author__ = 'Artur Barseghyan' +__copyright__ = '2013-2018 Artur Barseghyan' +__license__ = 'GPL 2.0/LGPL 2.1' +__all__ = ('TestCore',) + +LOGGER = logging.getLogger(__name__) + + +class TestCore(unittest.TestCase): + """Core tld functionality tests.""" + + def setUp(self): + """Set up.""" + self.good_patterns = [ + { + 'url': 'http://www.google.co.uk', + 'fld': 'google.co.uk', + 'subdomain': 'www', + 'domain': 'google', + 'suffix': 'co.uk', + 'tld': 'co.uk', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'http://www.v2.google.co.uk', + 'fld': 'google.co.uk', + 'subdomain': 'www.v2', + 'domain': 'google', + 'suffix': 'co.uk', + 'tld': 'co.uk', + 'kwargs': {'fail_silently': True}, + }, + # No longer valid + # { + # 'url': 'http://www.me.congresodelalengua3.ar', + # 'tld': 'me.congresodelalengua3.ar', + # 'subdomain': 'www', + # 'domain': 'me', + # 'suffix': 'congresodelalengua3.ar', + # }, + { + 'url': u'http://хром.гугл.рф', + 'fld': u'гугл.рф', + 'subdomain': u'хром', + 'domain': u'гугл', + 'suffix': u'рф', + 'tld': u'рф', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'http://www.google.co.uk:8001/lorem-ipsum/', + 'fld': 'google.co.uk', + 'subdomain': 'www', + 'domain': 'google', + 'suffix': 'co.uk', + 'tld': 'co.uk', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'http://www.me.cloudfront.net', + 'fld': 'me.cloudfront.net', + 'subdomain': 'www', + 'domain': 'me', + 'suffix': 'cloudfront.net', + 'tld': 'cloudfront.net', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'http://www.v2.forum.tech.google.co.uk:8001/' + 'lorem-ipsum/', + 'fld': 'google.co.uk', + 'subdomain': 'www.v2.forum.tech', + 'domain': 'google', + 'suffix': 'co.uk', + 'tld': 'co.uk', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'https://pantheon.io/', + 'fld': 'pantheon.io', + 'subdomain': '', + 'domain': 'pantheon', + 'suffix': 'io', + 'tld': 'io', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'v2.www.google.com', + 'fld': 'google.com', + 'subdomain': 'v2.www', + 'domain': 'google', + 'suffix': 'com', + 'tld': 'com', + 'kwargs': {'fail_silently': True, 'fix_protocol': True}, + }, + { + 'url': '//v2.www.google.com', + 'fld': 'google.com', + 'subdomain': 'v2.www', + 'domain': 'google', + 'suffix': 'com', + 'tld': 'com', + 'kwargs': {'fail_silently': True, 'fix_protocol': True}, + }, + { + 'url': 'http://[email protected]', + 'fld': 'bar.com', + 'subdomain': '', + 'domain': 'bar', + 'suffix': 'com', + 'tld': 'com', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'http://user:[email protected]', + 'fld': 'bar.com', + 'subdomain': '', + 'domain': 'bar', + 'suffix': 'com', + 'tld': 'com', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'https://faguoren.xn--fiqs8s', + 'fld': 'faguoren.xn--fiqs8s', + 'subdomain': '', + 'domain': 'faguoren', + 'suffix': 'xn--fiqs8s', + 'tld': 'xn--fiqs8s', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'blogs.lemonde.paris', + 'fld': 'lemonde.paris', + 'subdomain': 'blogs', + 'domain': 'lemonde', + 'suffix': 'paris', + 'tld': 'paris', + 'kwargs': {'fail_silently': True, 'fix_protocol': True}, + }, + { + 'url': 'axel.brighton.ac.uk', + 'fld': 'brighton.ac.uk', + 'subdomain': 'axel', + 'domain': 'brighton', + 'suffix': 'ac.uk', + 'tld': 'ac.uk', + 'kwargs': {'fail_silently': True, 'fix_protocol': True}, + }, + { + 'url': 'm.fr.blogspot.com.au', + 'fld': 'fr.blogspot.com.au', + 'subdomain': 'm', + 'domain': 'fr', + 'suffix': 'blogspot.com.au', + 'tld': 'blogspot.com.au', + 'kwargs': {'fail_silently': True, 'fix_protocol': True}, + }, + { + 'url': u'help.www.福岡.jp', + 'fld': u'www.福岡.jp', + 'subdomain': 'help', + 'domain': 'www', + 'suffix': u'福岡.jp', + 'tld': u'福岡.jp', + 'kwargs': {'fail_silently': True, 'fix_protocol': True}, + }, + { + 'url': u'syria.arabic.variant.سوريا', + 'fld': u'variant.سوريا', + 'subdomain': 'syria.arabic', + 'domain': 'variant', + 'suffix': u'سوريا', + 'tld': u'سوريا', + 'kwargs': {'fail_silently': True, 'fix_protocol': True}, + }, + { + 'url': u'http://www.help.kawasaki.jp', + 'fld': u'www.help.kawasaki.jp', + 'subdomain': '', + 'domain': 'www', + 'suffix': u'help.kawasaki.jp', + 'tld': u'help.kawasaki.jp', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': u'http://www.city.kawasaki.jp', + 'fld': u'city.kawasaki.jp', + 'subdomain': 'www', + 'domain': 'city', + 'suffix': u'kawasaki.jp', + 'tld': u'kawasaki.jp', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': u'http://fedoraproject.org', + 'fld': u'fedoraproject.org', + 'subdomain': '', + 'domain': 'fedoraproject', + 'suffix': u'org', + 'tld': u'org', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': u'http://www.cloud.fedoraproject.org', + 'fld': u'www.cloud.fedoraproject.org', + 'subdomain': '', + 'domain': 'www', + 'suffix': u'cloud.fedoraproject.org', + 'tld': u'cloud.fedoraproject.org', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': u'https://www.john.app.os.fedoraproject.org', + 'fld': u'john.app.os.fedoraproject.org', + 'subdomain': 'www', + 'domain': 'john', + 'suffix': u'app.os.fedoraproject.org', + 'tld': u'app.os.fedoraproject.org', + 'kwargs': {'fail_silently': True}, + }, + { + 'url': 'ftp://www.xn--mxail5aa.xn--11b4c3d', + 'fld': 'xn--mxail5aa.xn--11b4c3d', + 'subdomain': 'www', + 'domain': 'xn--mxail5aa', + 'suffix': 'xn--11b4c3d', + 'tld': 'xn--11b4c3d', + 'kwargs': {'fail_silently': True}, + }, + ] + + self.bad_patterns = { + 'v2.www.google.com': { + 'exception': TldBadUrl, + }, + '/index.php?a=1&b=2': { + 'exception': TldBadUrl, + }, + 'http://www.tld.doesnotexist': { + 'exception': TldDomainNotFound, + }, + 'https://2001:0db8:0000:85a3:0000:0000:ac1f:8001': { + 'exception': TldDomainNotFound, + }, + 'http://192.169.1.1': { + 'exception': TldDomainNotFound, + }, + 'http://localhost:8080': { + 'exception': TldDomainNotFound, + }, + 'https://localhost': { + 'exception': TldDomainNotFound, + }, + 'https://localhost2': { + 'exception': TldImproperlyConfigured, + 'kwargs': {'search_public': False, 'search_private': False}, + }, + } + + @log_info + def test_0_tld_names_loaded(self): + """Test if tld names are loaded.""" + get_fld('http://www.google.co.uk') + from ..utils import tld_names + res = len(tld_names) > 0 + self.assertTrue(res) + return res + + @log_info + def test_1_update_tld_names(self): + """Test updating the tld names (re-fetch mozilla source).""" + res = update_tld_names(fail_silently=True) + self.assertTrue(res) + return res + + @log_info + def test_2_fld_good_patterns_pass(self): + """Test good URL patterns.""" + res = [] + for data in self.good_patterns: + _res = get_fld(data['url'], **data['kwargs']) + self.assertEqual(_res, data['fld']) + res.append(_res) + return res + + @log_info + def test_3_fld_bad_patterns_pass(self): + """Test bad URL patterns.""" + res = [] + for url, params in self.bad_patterns.items(): + _res = get_fld(url, fail_silently=True) + self.assertEqual(_res, None) + res.append(_res) + return res + + @log_info + def test_4_override_settings(self): + """Testing settings override.""" + def override_settings(): + """Override settings.""" + return get_setting('DEBUG') + + self.assertEqual(defaults.DEBUG, override_settings()) + + set_setting('DEBUG', True) + + self.assertEqual(True, override_settings()) + + return override_settings() + + @log_info + def test_5_tld_good_patterns_pass_parsed_object(self): + """Test good URL patterns.""" + res = [] + for data in self.good_patterns: + kwargs = copy.copy(data['kwargs']) + kwargs.update({'as_object': True}) + _res = get_tld(data['url'], **kwargs) + self.assertEqual(_res.tld, data['tld']) + self.assertEqual(_res.subdomain, data['subdomain']) + self.assertEqual(_res.domain, data['domain']) + self.assertEqual(_res.suffix, data['suffix']) + self.assertEqual(_res.fld, data['fld']) + + if six.PY3: + self.assertEqual( + str(_res).encode('utf8'), + data['tld'].encode('utf8') + ) + else: + self.assertEqual(str(_res), data['tld'].encode('utf8')) + + self.assertEqual( + _res.__dict__, + { + 'tld': _res.tld, + 'domain': _res.domain, + 'subdomain': _res.subdomain, + 'fld': _res.fld, + 'parsed_url': _res.parsed_url, + } + ) + + res.append(_res) + return res + + @log_info + def test_6_override_full_names_path(self): + default = project_dir('dummy.txt') + override_base = '/tmp/test' + set_setting('NAMES_LOCAL_PATH_PARENT', override_base) + modified = project_dir('dummy.txt') + self.assertNotEqual(default, modified) + self.assertEqual(modified, os.path.abspath('/tmp/test/dummy.txt')) + + @log_info + def test_7_public_private(self): + res = get_fld( + 'http://silly.cc.ua', + fail_silently=True, + search_private=False + ) + + self.assertEqual(res, None) + + res = get_fld( + 'http://silly.cc.ua', + fail_silently=True, + search_private=True + ) + + self.assertEqual(res, 'silly.cc.ua') + + res = get_fld( + 'mercy.compute.amazonaws.com', + fail_silently=True, + search_private=False, + fix_protocol=True + ) + + self.assertEqual(res, None) + + res = get_fld( + 'http://whatever.com', + fail_silently=True, + search_public=False + ) + + self.assertEqual(res, None) + + @log_info + def test_8_fld_bad_patterns_exceptions(self): + """Test exceptions.""" + res = [] + for url, params in self.bad_patterns.items(): + kwargs = params['kwargs'] if 'kwargs' in params else {} + kwargs.update({'fail_silently': False}) + with self.assertRaises(params['exception']): + _res = get_fld(url, **kwargs) + res.append(_res) + return res + + @log_info + def test_9_tld_good_patterns_pass(self): + """Test `get_tld` good URL patterns.""" + res = [] + for data in self.good_patterns: + _res = get_tld(data['url'], **data['kwargs']) + self.assertEqual(_res, data['tld']) + res.append(_res) + return res + + @log_info + def test_10_tld_bad_patterns_pass(self): + """Test `get_tld` bad URL patterns.""" + res = [] + for url, params in self.bad_patterns.items(): + _res = get_tld(url, fail_silently=True) + self.assertEqual(_res, None) + res.append(_res) + return res + + @log_info + def test_11_parse_tld_good_patterns(self): + """Test `parse_tld` good URL patterns.""" + res = [] + for data in self.good_patterns: + _res = parse_tld(data['url'], **data['kwargs']) + self.assertEqual( + _res, + (data['tld'], data['domain'], data['subdomain']) + ) + res.append(_res) + return res + + +if __name__ == '__main__': + unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld/tests.py new/tld-0.9.2/src/tld/tests.py --- old/tld-0.9.1/src/tld/tests.py 2018-07-09 21:05:52.000000000 +0200 +++ new/tld-0.9.2/src/tld/tests.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,467 +0,0 @@ -# -*- coding: utf-8 -*- - -import copy -import logging -import os -import unittest - -from . import defaults -from .conf import get_setting, set_setting -from .exceptions import ( - TldBadUrl, - TldDomainNotFound, - TldImproperlyConfigured, - TldIOError, -) -from .helpers import project_dir -from .utils import ( - get_fld, - get_tld, - parse_tld, - update_tld_names, -) - -__title__ = 'tld.tests' -__author__ = 'Artur Barseghyan' -__copyright__ = '2013-2018 Artur Barseghyan' -__license__ = 'GPL 2.0/LGPL 2.1' -__all__ = ('TldTest',) - -LOG_INFO = True -TRACK_TIME = False -LOGGER = logging.getLogger(__name__) - - -def log_info(func): - """Log some useful info.""" - if not LOG_INFO: - return func - - def inner(self, *args, **kwargs): - """Inner.""" - if TRACK_TIME: - import simple_timer - timer = simple_timer.Timer() # Start timer - - result = func(self, *args, **kwargs) - - if TRACK_TIME: - timer.stop() # Stop timer - - LOGGER.debug('\n\n%s', func.__name__) - LOGGER.debug('============================') - if func.__doc__: - LOGGER.debug('""" %s """', func.__doc__.strip()) - LOGGER.debug('----------------------------') - if result is not None: - LOGGER.debug(result) - if TRACK_TIME: - LOGGER.debug('done in %s seconds', timer.duration) - LOGGER.debug('\n++++++++++++++++++++++++++++') - - return result - return inner - - -class TldTest(unittest.TestCase): - """Tld tests.""" - - def setUp(self): - """Set up.""" - self.good_patterns = [ - { - 'url': 'http://www.google.co.uk', - 'fld': 'google.co.uk', - 'subdomain': 'www', - 'domain': 'google', - 'suffix': 'co.uk', - 'tld': 'co.uk', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'http://www.v2.google.co.uk', - 'fld': 'google.co.uk', - 'subdomain': 'www.v2', - 'domain': 'google', - 'suffix': 'co.uk', - 'tld': 'co.uk', - 'kwargs': {'fail_silently': True}, - }, - # No longer valid - # { - # 'url': 'http://www.me.congresodelalengua3.ar', - # 'tld': 'me.congresodelalengua3.ar', - # 'subdomain': 'www', - # 'domain': 'me', - # 'suffix': 'congresodelalengua3.ar', - # }, - { - 'url': u'http://хром.гугл.рф', - 'fld': u'гугл.рф', - 'subdomain': u'хром', - 'domain': u'гугл', - 'suffix': u'рф', - 'tld': u'рф', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'http://www.google.co.uk:8001/lorem-ipsum/', - 'fld': 'google.co.uk', - 'subdomain': 'www', - 'domain': 'google', - 'suffix': 'co.uk', - 'tld': 'co.uk', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'http://www.me.cloudfront.net', - 'fld': 'me.cloudfront.net', - 'subdomain': 'www', - 'domain': 'me', - 'suffix': 'cloudfront.net', - 'tld': 'cloudfront.net', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'http://www.v2.forum.tech.google.co.uk:8001/' - 'lorem-ipsum/', - 'fld': 'google.co.uk', - 'subdomain': 'www.v2.forum.tech', - 'domain': 'google', - 'suffix': 'co.uk', - 'tld': 'co.uk', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'https://pantheon.io/', - 'fld': 'pantheon.io', - 'subdomain': '', - 'domain': 'pantheon', - 'suffix': 'io', - 'tld': 'io', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'v2.www.google.com', - 'fld': 'google.com', - 'subdomain': 'v2.www', - 'domain': 'google', - 'suffix': 'com', - 'tld': 'com', - 'kwargs': {'fail_silently': True, 'fix_protocol': True}, - }, - { - 'url': '//v2.www.google.com', - 'fld': 'google.com', - 'subdomain': 'v2.www', - 'domain': 'google', - 'suffix': 'com', - 'tld': 'com', - 'kwargs': {'fail_silently': True, 'fix_protocol': True}, - }, - { - 'url': 'http://[email protected]', - 'fld': 'bar.com', - 'subdomain': '', - 'domain': 'bar', - 'suffix': 'com', - 'tld': 'com', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'http://user:[email protected]', - 'fld': 'bar.com', - 'subdomain': '', - 'domain': 'bar', - 'suffix': 'com', - 'tld': 'com', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'https://faguoren.xn--fiqs8s', - 'fld': 'faguoren.xn--fiqs8s', - 'subdomain': '', - 'domain': 'faguoren', - 'suffix': 'xn--fiqs8s', - 'tld': 'xn--fiqs8s', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': 'blogs.lemonde.paris', - 'fld': 'lemonde.paris', - 'subdomain': 'blogs', - 'domain': 'lemonde', - 'suffix': 'paris', - 'tld': 'paris', - 'kwargs': {'fail_silently': True, 'fix_protocol': True}, - }, - { - 'url': 'axel.brighton.ac.uk', - 'fld': 'brighton.ac.uk', - 'subdomain': 'axel', - 'domain': 'brighton', - 'suffix': 'ac.uk', - 'tld': 'ac.uk', - 'kwargs': {'fail_silently': True, 'fix_protocol': True}, - }, - { - 'url': 'm.fr.blogspot.com.au', - 'fld': 'fr.blogspot.com.au', - 'subdomain': 'm', - 'domain': 'fr', - 'suffix': 'blogspot.com.au', - 'tld': 'blogspot.com.au', - 'kwargs': {'fail_silently': True, 'fix_protocol': True}, - }, - { - 'url': u'help.www.福岡.jp', - 'fld': u'www.福岡.jp', - 'subdomain': 'help', - 'domain': 'www', - 'suffix': u'福岡.jp', - 'tld': u'福岡.jp', - 'kwargs': {'fail_silently': True, 'fix_protocol': True}, - }, - { - 'url': u'syria.arabic.variant.سوريا', - 'fld': u'variant.سوريا', - 'subdomain': 'syria.arabic', - 'domain': 'variant', - 'suffix': u'سوريا', - 'tld': u'سوريا', - 'kwargs': {'fail_silently': True, 'fix_protocol': True}, - }, - { - 'url': u'http://www.help.kawasaki.jp', - 'fld': u'www.help.kawasaki.jp', - 'subdomain': '', - 'domain': 'www', - 'suffix': u'help.kawasaki.jp', - 'tld': u'help.kawasaki.jp', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': u'http://www.city.kawasaki.jp', - 'fld': u'city.kawasaki.jp', - 'subdomain': 'www', - 'domain': 'city', - 'suffix': u'kawasaki.jp', - 'tld': u'kawasaki.jp', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': u'http://fedoraproject.org', - 'fld': u'fedoraproject.org', - 'subdomain': '', - 'domain': 'fedoraproject', - 'suffix': u'org', - 'tld': u'org', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': u'http://www.cloud.fedoraproject.org', - 'fld': u'www.cloud.fedoraproject.org', - 'subdomain': '', - 'domain': 'www', - 'suffix': u'cloud.fedoraproject.org', - 'tld': u'cloud.fedoraproject.org', - 'kwargs': {'fail_silently': True}, - }, - { - 'url': u'https://www.john.app.os.fedoraproject.org', - 'fld': u'john.app.os.fedoraproject.org', - 'subdomain': 'www', - 'domain': 'john', - 'suffix': u'app.os.fedoraproject.org', - 'tld': u'app.os.fedoraproject.org', - 'kwargs': {'fail_silently': True}, - }, - ] - - self.bad_patterns = { - 'v2.www.google.com': { - 'exception': TldBadUrl, - }, - '/index.php?a=1&b=2': { - 'exception': TldBadUrl, - }, - 'http://www.tld.doesnotexist': { - 'exception': TldDomainNotFound, - }, - 'https://2001:0db8:0000:85a3:0000:0000:ac1f:8001': { - 'exception': TldDomainNotFound, - }, - 'http://192.169.1.1': { - 'exception': TldDomainNotFound, - }, - 'http://localhost:8080': { - 'exception': TldDomainNotFound, - }, - 'https://localhost': { - 'exception': TldDomainNotFound, - }, - 'https://localhost2': { - 'exception': TldImproperlyConfigured, - 'kwargs': {'search_public': False, 'search_private': False}, - }, - } - - @log_info - def test_0_tld_names_loaded(self): - """Test if tld names are loaded.""" - get_fld('http://www.google.co.uk') - from .utils import tld_names - res = len(tld_names) > 0 - self.assertTrue(res) - return res - - @log_info - def test_1_update_tld_names(self): - """Test updating the tld names (re-fetch mozilla source).""" - res = update_tld_names(fail_silently=True) - self.assertTrue(res) - return res - - @log_info - def test_2_fld_good_patterns_pass(self): - """Test good URL patterns.""" - res = [] - for data in self.good_patterns: - _res = get_fld(data['url'], **data['kwargs']) - self.assertEqual(_res, data['fld']) - res.append(_res) - return res - - @log_info - def test_3_fld_bad_patterns_pass(self): - """Test bad URL patterns.""" - res = [] - for url, params in self.bad_patterns.items(): - _res = get_fld(url, fail_silently=True) - self.assertEqual(_res, None) - res.append(_res) - return res - - @log_info - def test_4_override_settings(self): - """Testing settings override.""" - def override_settings(): - """Override settings.""" - return get_setting('DEBUG') - - self.assertEqual(defaults.DEBUG, override_settings()) - - set_setting('DEBUG', True) - - self.assertEqual(True, override_settings()) - - return override_settings() - - @log_info - def test_5_tld_good_patterns_pass_parsed_object(self): - """Test good URL patterns.""" - res = [] - for data in self.good_patterns: - kwargs = copy.copy(data['kwargs']) - kwargs.update({'as_object': True}) - _res = get_tld(data['url'], **kwargs) - self.assertEqual(_res.tld, data['tld']) - self.assertEqual(_res.subdomain, data['subdomain']) - self.assertEqual(_res.domain, data['domain']) - self.assertEqual(_res.suffix, data['suffix']) - self.assertEqual(_res.fld, data['fld']) - res.append(_res) - return res - - @log_info - def test_6_override_full_names_path(self): - default = project_dir('dummy.txt') - override_base = '/tmp/test' - set_setting('NAMES_LOCAL_PATH_PARENT', override_base) - modified = project_dir('dummy.txt') - self.assertNotEqual(default, modified) - self.assertEqual(modified, os.path.abspath('/tmp/test/dummy.txt')) - - @log_info - def test_7_public_private(self): - res = get_fld( - 'http://silly.cc.ua', - fail_silently=True, - search_private=False - ) - - self.assertEqual(res, None) - - res = get_fld( - 'http://silly.cc.ua', - fail_silently=True, - search_private=True - ) - - self.assertEqual(res, 'silly.cc.ua') - - res = get_fld( - 'mercy.compute.amazonaws.com', - fail_silently=True, - search_private=False, - fix_protocol=True - ) - - self.assertEqual(res, None) - - res = get_fld( - 'http://whatever.com', - fail_silently=True, - search_public=False - ) - - self.assertEqual(res, None) - - @log_info - def test_8_fld_bad_patterns_exceptions(self): - """Test exceptions.""" - res = [] - for url, params in self.bad_patterns.items(): - kwargs = params['kwargs'] if 'kwargs' in params else {} - kwargs.update({'fail_silently': False}) - with self.assertRaises(params['exception']): - _res = get_fld(url, **kwargs) - res.append(_res) - return res - - @log_info - def test_9_tld_good_patterns_pass(self): - """Test `get_tld` good URL patterns.""" - res = [] - for data in self.good_patterns: - _res = get_tld(data['url'], **data['kwargs']) - self.assertEqual(_res, data['tld']) - res.append(_res) - return res - - @log_info - def test_10_tld_bad_patterns_pass(self): - """Test `get_tld` bad URL patterns.""" - res = [] - for url, params in self.bad_patterns.items(): - _res = get_tld(url, fail_silently=True) - self.assertEqual(_res, None) - res.append(_res) - return res - - @log_info - def test_11_parse_tld_good_patterns(self): - """Test `parse_tld` good URL patterns.""" - res = [] - for data in self.good_patterns: - _res = parse_tld(data['url'], **data['kwargs']) - self.assertEqual( - _res, - (data['tld'], data['domain'], data['subdomain']) - ) - res.append(_res) - return res - - -if __name__ == '__main__': - unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld/utils.py new/tld-0.9.2/src/tld/utils.py --- old/tld-0.9.1/src/tld/utils.py 2018-07-09 21:05:52.000000000 +0200 +++ new/tld-0.9.2/src/tld/utils.py 2019-01-10 22:54:41.000000000 +0100 @@ -214,7 +214,7 @@ # Puny code tlds if '// xn--' in line: - line = line.split(' (', 1)[0][3:] + line = line.split()[1] if line[0] == '/' or line[0] == '\n': continue diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld.egg-info/PKG-INFO new/tld-0.9.2/src/tld.egg-info/PKG-INFO --- old/tld-0.9.1/src/tld.egg-info/PKG-INFO 2018-07-09 21:59:01.000000000 +0200 +++ new/tld-0.9.2/src/tld.egg-info/PKG-INFO 2019-01-10 22:57:17.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: tld -Version: 0.9.1 +Version: 0.9.2 Summary: Extract the top level domain (TLD) from the URL given. Home-page: https://github.com/barseghyanartur/tld Author: Artur Barseghyan @@ -18,7 +18,7 @@ Prerequisites ============= - - Python 2.6, 2.7, 3.4, 3.5, 3.6 and PyPy + - Python 2.7, 3.4, 3.5, 3.6, 3.7 and PyPy Documentation ============= @@ -47,6 +47,9 @@ Usage examples ============== + In addition to examples below, see the `jupyter notebook <jupyter/>`_ + workbook file. + Get the TLD name **as string** from the URL given ------------------------------------------------- .. code-block:: python @@ -216,13 +219,13 @@ Keywords: tld,top level domain names,python Platform: UNKNOWN Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: Operating System :: OS Independent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tld-0.9.1/src/tld.egg-info/SOURCES.txt new/tld-0.9.2/src/tld.egg-info/SOURCES.txt --- old/tld-0.9.1/src/tld.egg-info/SOURCES.txt 2018-07-09 21:59:01.000000000 +0200 +++ new/tld-0.9.2/src/tld.egg-info/SOURCES.txt 2019-01-10 22:57:17.000000000 +0100 @@ -23,7 +23,6 @@ src/tld/defaults.py src/tld/exceptions.py src/tld/helpers.py -src/tld/tests.py src/tld/utils.py src/tld.egg-info/PKG-INFO src/tld.egg-info/SOURCES.txt @@ -38,4 +37,8 @@ src/tld/res/old/effective_tld_names-2015-07-19.dat.txt src/tld/res/old/effective_tld_names-2015-11-22.dat.txt src/tld/sources/__init__.py -src/tld/sources/mozilla.py \ No newline at end of file +src/tld/sources/mozilla.py +src/tld/tests/__init__.py +src/tld/tests/base.py +src/tld/tests/test_commands.py +src/tld/tests/test_core.py \ No newline at end of file
