Hello community, here is the log from the commit of package python-geoip2 for openSUSE:Factory checked in at 2020-11-06 23:43:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-geoip2 (Old) and /work/SRC/openSUSE:Factory/.python-geoip2.new.11331 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-geoip2" Fri Nov 6 23:43:10 2020 rev:11 rq:846048 version:4.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-geoip2/python-geoip2.changes 2020-08-13 10:12:21.318573514 +0200 +++ /work/SRC/openSUSE:Factory/.python-geoip2.new.11331/python-geoip2.changes 2020-11-06 23:43:13.355480056 +0100 @@ -1,0 +2,9 @@ +Wed Nov 4 15:56:32 UTC 2020 - Paolo Stivanin <[email protected]> + +- update to version 4.1.0: + * Added the is_residential_proxy attribute to geoip2.model.AnonymousIP + and geoip2.record.Traits. + * HTTPError now provides the decoded response content in the + decoded_content attribute. + +------------------------------------------------------------------- Old: ---- python-geoip2-4.0.2.tar.gz New: ---- python-geoip2-4.1.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-geoip2.spec ++++++ --- /var/tmp/diff_new_pack.J3J4M5/_old 2020-11-06 23:43:14.131478564 +0100 +++ /var/tmp/diff_new_pack.J3J4M5/_new 2020-11-06 23:43:14.131478564 +0100 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %bcond_without test Name: python-geoip2 -Version: 4.0.2 +Version: 4.1.0 Release: 0 Summary: MaxMind GeoIP2 Python API License: Apache-2.0 ++++++ python-geoip2-4.0.2.tar.gz -> python-geoip2-4.1.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/HISTORY.rst new/geoip2-4.1.0/HISTORY.rst --- old/geoip2-4.0.2/HISTORY.rst 2020-07-28 19:38:41.000000000 +0200 +++ new/geoip2-4.1.0/HISTORY.rst 2020-09-25 17:55:47.000000000 +0200 @@ -3,6 +3,14 @@ History ------- +4.1.0 (2020-09-25) +++++++++++++++++++ + +* Added the ``is_residential_proxy`` attribute to ``geoip2.model.AnonymousIP`` + and ``geoip2.record.Traits``. +* ``HTTPError`` now provides the decoded response content in the + ``decoded_content`` attribute. Requested by Oleg Serbokryl. GitHub #95. + 4.0.2 (2020-07-28) ++++++++++++++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/PKG-INFO new/geoip2-4.1.0/PKG-INFO --- old/geoip2-4.0.2/PKG-INFO 2020-07-28 19:39:05.857445000 +0200 +++ new/geoip2-4.1.0/PKG-INFO 2020-09-25 17:56:48.259738700 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: geoip2 -Version: 4.0.2 +Version: 4.1.0 Summary: MaxMind GeoIP2 API Home-page: http://www.maxmind.com/ Author: Gregory Oschwald @@ -237,6 +237,8 @@ False >>> response.is_public_proxy False + >>> response.is_residential_proxy + False >>> response.is_tor_exit_node True >>> response.ip_address diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/README.rst new/geoip2-4.1.0/README.rst --- old/geoip2-4.0.2/README.rst 2020-07-21 19:58:09.000000000 +0200 +++ new/geoip2-4.1.0/README.rst 2020-09-25 17:00:20.000000000 +0200 @@ -229,6 +229,8 @@ False >>> response.is_public_proxy False + >>> response.is_residential_proxy + False >>> response.is_tor_exit_node True >>> response.ip_address diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/docs/html/.buildinfo new/geoip2-4.1.0/docs/html/.buildinfo --- old/geoip2-4.0.2/docs/html/.buildinfo 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/docs/html/.buildinfo 2020-09-25 17:56:48.000000000 +0200 @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 5eac69c34ea0e542508a51f71d7af248 +config: 6ecb4ed3c94588e953ede0156ccf7b3b tags: 645f666f9bcd5a90fca523b33c5a78b7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/docs/html/_static/documentation_options.js new/geoip2-4.1.0/docs/html/_static/documentation_options.js --- old/geoip2-4.0.2/docs/html/_static/documentation_options.js 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/docs/html/_static/documentation_options.js 2020-09-25 17:56:48.000000000 +0200 @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '4.0.2', + VERSION: '4.1.0', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/docs/html/genindex.html new/geoip2-4.1.0/docs/html/genindex.html --- old/geoip2-4.0.2/docs/html/genindex.html 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/docs/html/genindex.html 2020-09-25 17:56:48.000000000 +0200 @@ -5,7 +5,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Index — geoip2 4.0.2 documentation</title> + <title>Index — geoip2 4.1.0 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> @@ -25,7 +25,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.0.2 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.1.0 documentation</a> »</li> <li class="nav-item nav-item-this"><a href="">Index</a></li> </ul> </div> @@ -369,6 +369,12 @@ <li><a href="index.html#geoip2.records.Traits.is_public_proxy">(geoip2.records.Traits attribute)</a> </li> </ul></li> + <li><a href="index.html#geoip2.models.AnonymousIP.is_residential_proxy">is_residential_proxy (geoip2.models.AnonymousIP attribute)</a> + + <ul> + <li><a href="index.html#geoip2.records.Traits.is_residential_proxy">(geoip2.records.Traits attribute)</a> +</li> + </ul></li> <li><a href="index.html#geoip2.records.Traits.is_satellite_provider">is_satellite_provider (geoip2.records.Traits attribute)</a> </li> <li><a href="index.html#geoip2.models.AnonymousIP.is_tor_exit_node">is_tor_exit_node (geoip2.models.AnonymousIP attribute)</a> @@ -684,7 +690,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.0.2 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.1.0 documentation</a> »</li> <li class="nav-item nav-item-this"><a href="">Index</a></li> </ul> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/docs/html/index.html new/geoip2-4.1.0/docs/html/index.html --- old/geoip2-4.0.2/docs/html/index.html 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/docs/html/index.html 2020-09-25 17:56:48.000000000 +0200 @@ -5,7 +5,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>MaxMind GeoIP2 Python API — geoip2 4.0.2 documentation</title> + <title>MaxMind GeoIP2 Python API — geoip2 4.1.0 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> @@ -25,7 +25,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="#">geoip2 4.0.2 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="#">geoip2 4.1.0 documentation</a> »</li> <li class="nav-item nav-item-this"><a href="">MaxMind GeoIP2 Python API</a></li> </ul> </div> @@ -241,6 +241,8 @@ <span class="go">False</span> <span class="gp">>>> </span> <span class="n">response</span><span class="o">.</span><span class="n">is_public_proxy</span> <span class="go">False</span> +<span class="gp">>>> </span> <span class="n">response</span><span class="o">.</span><span class="n">is_residential_proxy</span> +<span class="go">False</span> <span class="gp">>>> </span> <span class="n">response</span><span class="o">.</span><span class="n">is_tor_exit_node</span> <span class="go">True</span> <span class="gp">>>> </span> <span class="n">response</span><span class="o">.</span><span class="n">ip_address</span> @@ -953,6 +955,18 @@ </dd></dl> <dl class="py attribute"> +<dt id="geoip2.models.AnonymousIP.is_residential_proxy"> +<code class="sig-name descname">is_residential_proxy</code><a class="headerlink" href="#geoip2.models.AnonymousIP.is_residential_proxy" title="Permalink to this definition">¶</a></dt> +<dd><p>This is true if the IP address is on a suspected anonymizing network +and belongs to a residential ISP.</p> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></p> +</dd> +</dl> +</dd></dl> + +<dl class="py attribute"> <dt id="geoip2.models.AnonymousIP.is_tor_exit_node"> <code class="sig-name descname">is_tor_exit_node</code><a class="headerlink" href="#geoip2.models.AnonymousIP.is_tor_exit_node" title="Permalink to this definition">¶</a></dt> <dd><p>This is true if the IP address is a Tor exit node.</p> @@ -2136,7 +2150,7 @@ <dl class="py class"> <dt id="geoip2.records.Traits"> -<em class="property">class </em><code class="sig-prename descclassname">geoip2.records.</code><code class="sig-name descname">Traits</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">autonomous_system_number</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)">int</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">autonomous_system_organization</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">connection_type</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">domain</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">is_anonymous</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_anonymous_proxy</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_anonymous_vpn</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_hosting_provider</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_legitimate_proxy</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_public_proxy</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_satellite_provider</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_tor_exit_node</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">isp</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">ip_address</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">network</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">organization</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">prefix_len</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)">int</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">static_ip_score</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#float" title="(in Python v3.8)">float</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">user_count</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)">int</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">user_type</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_</span></em><span class="sig-paren">)</span><a class="headerlink" href="#geoip2.records.Traits" title="Permalink to this definition">¶</a></dt> +<em class="property">class </em><code class="sig-prename descclassname">geoip2.records.</code><code class="sig-name descname">Traits</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">autonomous_system_number</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)">int</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">autonomous_system_organization</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">connection_type</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">domain</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">is_anonymous</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_anonymous_proxy</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_anonymous_vpn</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_hosting_provider</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_legitimate_proxy</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_public_proxy</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_residential_proxy</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_satellite_provider</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">is_tor_exit_node</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></span> <span class="o">=</span> <span class="default_value">False</span></em>, <em class="sig-param"><span class="n">isp</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">ip_address</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">network</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">organization</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">prefix_len</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)">int</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">static_ip_score</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#float" title="(in Python v3.8)">float</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">user_count</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)">int</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">user_type</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">_</span></em><span class="sig-paren">)</span><a class="headerlink" href="#geoip2.records.Traits" title="Permalink to this definition">¶</a></dt> <dd><p>Contains data for the traits record associated with an IP address.</p> <p>This class contains the traits data associated with an IP address.</p> <p>This class has the following attributes:</p> @@ -2302,6 +2316,19 @@ </dd></dl> <dl class="py attribute"> +<dt id="geoip2.records.Traits.is_residential_proxy"> +<code class="sig-name descname">is_residential_proxy</code><a class="headerlink" href="#geoip2.records.Traits.is_residential_proxy" title="Permalink to this definition">¶</a></dt> +<dd><p>This is true if the IP address is on a suspected anonymizing network +and belongs to a residential ISP. This attribute is only available from +GeoIP2 Precision Insights.</p> +<dl class="field-list simple"> +<dt class="field-odd">Type</dt> +<dd class="field-odd"><p><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)">bool</a></p> +</dd> +</dl> +</dd></dl> + +<dl class="py attribute"> <dt id="geoip2.records.Traits.is_satellite_provider"> <code class="sig-name descname">is_satellite_provider</code><a class="headerlink" href="#geoip2.records.Traits.is_satellite_provider" title="Permalink to this definition">¶</a></dt> <dd><p>This is true if the IP address is from a satellite provider that @@ -2466,7 +2493,7 @@ <dl class="py exception"> <dt id="geoip2.errors.HTTPError"> -<em class="property">exception </em><code class="sig-prename descclassname">geoip2.errors.</code><code class="sig-name descname">HTTPError</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a></span></em>, <em class="sig-param"><span class="n">http_status</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)">int</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">uri</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#geoip2.errors.HTTPError" title="Permalink to this definition">¶</a></dt> +<em class="property">exception </em><code class="sig-prename descclassname">geoip2.errors.</code><code class="sig-name descname">HTTPError</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span><span class="p">:</span> <span class="n"><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a></span></em>, <em class="sig-param"><span class="n">http_status</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)">int</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">uri</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em>, <em class="sig-param"><span class="n">decoded_content</span><span class="p">:</span> <span class="n">Optional<span class="p">[</span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)">str</a><span class="p">]</span></span> <span class="o">=</span> <span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#geoip2.errors.HTTPError" title="Permalink to this definition">¶</a></dt> <dd><p>There was an error when making your HTTP request.</p> <p>This class represents an HTTP transport error. It extends <a class="reference internal" href="#geoip2.errors.GeoIP2Error" title="geoip2.errors.GeoIP2Error"><code class="xref py py-exc docutils literal notranslate"><span class="pre">GeoIP2Error</span></code></a> and adds attributes of its own.</p> @@ -2475,6 +2502,7 @@ <dd class="field-odd"><ul class="simple"> <li><p><strong>http_status</strong> – The HTTP status code returned</p></li> <li><p><strong>uri</strong> – The URI queried</p></li> +<li><p><strong>decoded_content</strong> – The decoded response content</p></li> </ul> </dd> </dl> @@ -2603,7 +2631,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="#">geoip2 4.0.2 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="#">geoip2 4.1.0 documentation</a> »</li> <li class="nav-item nav-item-this"><a href="">MaxMind GeoIP2 Python API</a></li> </ul> </div> Binary files old/geoip2-4.0.2/docs/html/objects.inv and new/geoip2-4.1.0/docs/html/objects.inv differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/docs/html/py-modindex.html new/geoip2-4.1.0/docs/html/py-modindex.html --- old/geoip2-4.0.2/docs/html/py-modindex.html 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/docs/html/py-modindex.html 2020-09-25 17:56:48.000000000 +0200 @@ -5,7 +5,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Python Module Index — geoip2 4.0.2 documentation</title> + <title>Python Module Index — geoip2 4.1.0 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> @@ -28,7 +28,7 @@ <li class="right" > <a href="#" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.0.2 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.1.0 documentation</a> »</li> <li class="nav-item nav-item-this"><a href="">Python Module Index</a></li> </ul> </div> @@ -112,7 +112,7 @@ <li class="right" > <a href="#" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.0.2 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.1.0 documentation</a> »</li> <li class="nav-item nav-item-this"><a href="">Python Module Index</a></li> </ul> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/docs/html/search.html new/geoip2-4.1.0/docs/html/search.html --- old/geoip2-4.0.2/docs/html/search.html 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/docs/html/search.html 2020-09-25 17:56:48.000000000 +0200 @@ -5,7 +5,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Search — geoip2 4.0.2 documentation</title> + <title>Search — geoip2 4.1.0 documentation</title> <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> @@ -30,7 +30,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.0.2 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.1.0 documentation</a> »</li> <li class="nav-item nav-item-this"><a href="">Search</a></li> </ul> </div> @@ -81,7 +81,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.0.2 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">geoip2 4.1.0 documentation</a> »</li> <li class="nav-item nav-item-this"><a href="">Search</a></li> </ul> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/docs/html/searchindex.js new/geoip2-4.1.0/docs/html/searchindex.js --- old/geoip2-4.0.2/docs/html/searchindex.js 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/docs/html/searchindex.js 2020-09-25 17:56:48.000000000 +0200 @@ -1 +1 @@ -Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["index.rst"],objects:{"":{geoip2:[0,0,0,"-"]},"geoip2.database":{Reader:[0,1,1,""]},"geoip2.database.Reader":{anonymous_ip:[0,2,1,""],asn:[0,2,1,""],city:[0,2,1,""],close:[0,2,1,""],connection_type:[0,2,1,""],country:[0,2,1,""],domain:[0,2,1,""],enterprise:[0,2,1,""],isp:[0,2,1,""],metadata:[0,2,1,""]},"geoip2.errors":{AddressNotFoundError:[0,3,1,""],AuthenticationError:[0,3,1,""],GeoIP2Error:[0,3,1,""],HTTPError:[0,3,1,""],InvalidRequestError:[0,3,1,""],OutOfQueriesError:[0,3,1,""],PermissionRequiredError:[0,3,1,""]},"geoip2.models":{ASN:[0,1,1,""],AnonymousIP:[0,1,1,""],City:[0,1,1,""],ConnectionType:[0,1,1,""],Country:[0,1,1,""],Domain:[0,1,1,""],Enterprise:[0,1,1,""],ISP:[0,1,1,""],Insights:[0,1,1,""],SimpleModel:[0,1,1,""]},"geoip2.models.ASN":{autonomous_system_number:[0,4,1,""],autonomous_system_organization:[0,4,1,""],ip_address:[0,4,1,""],network:[0,4,1,""]},"geoip2.models.AnonymousIP":{ip_address:[0,4,1,""],is_anonymous:[0,4,1,""],is_anonymous_vpn:[0,4,1,""],is_hosting_provider:[0,4,1,""],is_public_proxy:[0,4,1,""],is_tor_exit_node:[0,4,1,""],network:[0,4,1,""]},"geoip2.models.City":{city:[0,4,1,""],continent:[0,4,1,""],country:[0,4,1,""],location:[0,4,1,""],maxmind:[0,4,1,""],postal:[0,4,1,""],registered_country:[0,4,1,""],represented_country:[0,4,1,""],subdivisions:[0,4,1,""],traits:[0,4,1,""]},"geoip2.models.ConnectionType":{connection_type:[0,4,1,""],ip_address:[0,4,1,""],network:[0,4,1,""]},"geoip2.models.Country":{continent:[0,4,1,""],country:[0,4,1,""],maxmind:[0,4,1,""],registered_country:[0,4,1,""],represented_country:[0,4,1,""],traits:[0,4,1,""]},"geoip2.models.Domain":{domain:[0,4,1,""],ip_address:[0,4,1,""],network:[0,4,1,""]},"geoip2.models.Enterprise":{city:[0,4,1,""],continent:[0,4,1,""],country:[0,4,1,""],location:[0,4,1,""],maxmind:[0,4,1,""],registered_country:[0,4,1,""],represented_country:[0,4,1,""],subdivisions:[0,4,1,""],traits:[0,4,1,""]},"geoip2.models.ISP":{autonomous_system_number:[0,4,1,""],autonomous_system_organization:[0,4,1,""],ip_address:[0,4,1,""],isp:[0,4,1,""],network:[0,4,1,""],organization:[0,4,1,""]},"geoip2.models.Insights":{city:[0,4,1,""],continent:[0,4,1,""],country:[0,4,1,""],location:[0,4,1,""],maxmind:[0,4,1,""],registered_country:[0,4,1,""],represented_country:[0,4,1,""],subdivisions:[0,4,1,""],traits:[0,4,1,""]},"geoip2.models.SimpleModel":{network:[0,2,1,""]},"geoip2.records":{City:[0,1,1,""],Continent:[0,1,1,""],Country:[0,1,1,""],Location:[0,1,1,""],MaxMind:[0,1,1,""],PlaceRecord:[0,1,1,""],Postal:[0,1,1,""],Record:[0,1,1,""],RepresentedCountry:[0,1,1,""],Subdivision:[0,1,1,""],Subdivisions:[0,1,1,""],Traits:[0,1,1,""]},"geoip2.records.City":{confidence:[0,4,1,""],geoname_id:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""]},"geoip2.records.Continent":{code:[0,4,1,""],geoname_id:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""]},"geoip2.records.Country":{confidence:[0,4,1,""],geoname_id:[0,4,1,""],is_in_european_union:[0,4,1,""],iso_code:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""]},"geoip2.records.Location":{accuracy_radius:[0,4,1,""],average_income:[0,4,1,""],latitude:[0,4,1,""],longitude:[0,4,1,""],metro_code:[0,4,1,""],population_density:[0,4,1,""],time_zone:[0,4,1,""]},"geoip2.records.MaxMind":{queries_remaining:[0,4,1,""]},"geoip2.records.PlaceRecord":{name:[0,2,1,""]},"geoip2.records.Postal":{code:[0,4,1,""],confidence:[0,4,1,""]},"geoip2.records.RepresentedCountry":{confidence:[0,4,1,""],geoname_id:[0,4,1,""],is_in_european_union:[0,4,1,""],iso_code:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""],type:[0,4,1,""]},"geoip2.records.Subdivision":{confidence:[0,4,1,""],geoname_id:[0,4,1,""],iso_code:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""]},"geoip2.records.Subdivisions":{most_specific:[0,2,1,""]},"geoip2.records.Traits":{autonomous_system_number:[0,4,1,""],autonomous_system_organization:[0,4,1,""],connection_type:[0,4,1,""],domain:[0,4,1,""],ip_address:[0,4,1,""],is_anonymous:[0,4,1,""],is_anonymous_proxy:[0,4,1,""],is_anonymous_vpn:[0,4,1,""],is_hosting_provider:[0,4,1,""],is_legitimate_proxy:[0,4,1,""],is_public_proxy:[0,4,1,""],is_satellite_provider:[0,4,1,""],is_tor_exit_node:[0,4,1,""],isp:[0,4,1,""],network:[0,2,1,"id0"],organization:[0,4,1,""],static_ip_score:[0,4,1,""],user_count:[0,4,1,""],user_type:[0,4,1,""]},"geoip2.webservice":{AsyncClient:[0,1,1,""],Client:[0,1,1,""]},"geoip2.webservice.AsyncClient":{city:[0,2,1,""],close:[0,2,1,""],country:[0,2,1,""],insights:[0,2,1,""]},"geoip2.webservice.Client":{city:[0,2,1,""],close:[0,2,1,""],country:[0,2,1,""],insights:[0,2,1,""]},geoip2:{database:[0,0,0,"-"],errors:[0,0,0,"-"],models:[0,0,0,"-"],records:[0,0,0,"-"],webservice:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:attribute"},terms:{"4xx":0,"5xx":0,"\u7f8e\u56fd":0,"abstract":0,"case":0,"class":0,"default":0,"final":0,"float":0,"import":0,"int":0,"long":0,"public":0,"static":0,"throw":0,"true":0,"while":0,For:0,IPs:0,The:0,There:0,These:0,Use:0,abl:0,about:0,abov:0,accent:0,accept:0,access:0,account:0,account_id:0,accuraci:0,accuracy_radiu:0,across:0,add:0,added:0,addit:0,address:0,addressnotfounderror:0,adword:0,after:0,against:0,all:0,alpha:0,also:0,altern:0,alwai:0,america:0,ani:0,anonproxi:0,anonymous_ip:0,anonymousip:0,anoth:0,apach:0,appropri:0,approxim:0,argument:0,around:0,ascii:0,assign:0,assist:0,associ:0,asynccli:0,attribut:0,authent:0,authenticationerror:0,automat:0,autonom:0,autonomous_system_numb:0,autonomous_system_organ:0,avail:0,averag:0,average_incom:0,await:0,base:0,basic:0,becaus:0,becom:0,behind:0,believ:0,belong:0,besid:0,between:0,block:0,bodi:0,bool:0,both:0,brazilian:0,bug:0,busi:0,cabl:0,cafe:0,call:0,can:0,carrier:0,cellular:0,center:0,chang:0,charact:0,check:0,chines:0,circl:0,close:0,code:0,collect:0,colleg:0,com:0,confid:0,connection_typ:0,connectiontyp:0,constructor:0,contact:0,contain:0,content_delivery_network:0,contin:0,copyright:0,corpor:0,correct:0,correspond:0,corrupt:0,could:0,count:0,countri:0,coverag:0,creat:0,creation:0,current:0,custom:0,decid:0,deprec:0,descriptor:0,detail:0,dev:0,devic:0,dialup:0,dict:0,differ:0,directori:0,discourag:0,distribut:0,doc:0,document:0,doe:0,doing:0,dollar:0,download:0,dsl:0,due:0,dure:0,dynam:0,each:0,easy_instal:0,edit:0,edu:0,either:0,element:0,empti:0,end:0,endpoint:0,england:0,english:0,ensur:0,entir:0,entiti:0,estim:0,etc:0,european:0,even:0,event:0,everi:0,exist:0,exit:0,expand:0,expens:0,explicit:0,explicitli:0,extend:0,extern:0,factor:0,fail:0,fals:0,faq:0,featur:0,few:0,field:0,file:0,fileish:0,filenotfounderror:0,find:0,first:0,flag:0,follow:0,foo:0,format:0,found:0,free:0,french:0,from:0,fund:0,further:0,futur:0,gener:0,geograph:0,geoip2error:0,geoip:0,geolite2:0,geoname_id:0,german:0,get:0,github:0,given:0,googl:0,govern:0,greater:0,has:0,have:0,help:0,higher:0,host:0,hostnam:0,hour:0,household:0,how:0,http:0,http_statu:0,httperror:0,iana:0,identifi:0,imprecis:0,inc:0,includ:0,incom:0,incorpor:0,incorrect:0,incorrectli:0,increas:0,index:0,individu:0,inform:0,inher:0,insight:0,instanc:0,instead:0,instruct:0,integ:0,intern:0,internet:0,invalid:0,invaliddatabaseerror:0,invalidrequesterror:0,ip_address:0,ipaddress:0,ipv4:0,ipv4address:0,ipv4network:0,ipv6:0,ipv6address:0,ipv6network:0,is_anonym:0,is_anonymous_proxi:0,is_anonymous_vpn:0,is_hosting_provid:0,is_in_european_union:0,is_legitimate_proxi:0,is_public_proxi:0,is_satellite_provid:0,is_tor_exit_nod:0,iso:0,iso_cod:0,issu:0,its:0,itself:0,japanes:0,keyword:0,kilomet:0,kingdom:0,largest:0,latitud:0,least:0,legitim:0,level:0,libmaxminddb:0,librari:0,licens:0,license_kei:0,lifetim:0,like:0,link:0,list:0,local:0,locat:0,longitud:0,look:0,lookup:0,loop:0,ltd:0,made:0,mai:0,maintain:0,make:0,mani:0,map:0,maxminddb:0,mean:0,member:0,messag:0,metadata:0,method:0,metro:0,metro_cod:0,militari:0,minneapoli:0,minnesota:0,mistak:0,mmdb:0,mobil:0,mode:0,more:0,most:0,most_specif:0,move:0,multipl:0,must:0,my_license_kei:0,name:0,nat:0,need:0,network:0,new_york:0,node:0,non:0,none:0,north:0,note:0,now:0,number:0,object:0,occur:0,oceania:0,offer:0,often:0,older:0,onc:0,one:0,onli:0,open:0,option:0,order:0,org:0,organ:0,other:0,our:0,out:0,outofquerieserror:0,output:0,over:0,oversea:0,own:0,oxford:0,oxfordshir:0,packag:0,page:0,pai:0,paid:0,paramet:0,part:0,particular:0,pass:0,past:0,path:0,per:0,perform:0,permiss:0,permissionrequirederror:0,piec:0,pip:0,place:0,placerecord:0,pleas:0,point:0,popul:0,population_dens:0,portion:0,portugues:0,possibl:0,postal:0,precis:0,prefix_len:0,premium:0,present:0,properti:0,provid:0,proxi:0,pty:0,queri:0,queries_remain:0,radiu:0,rais:0,rang:0,raw:0,raw_respons:0,read:0,readabl:0,recommend:0,region:0,regist:0,registered_countri:0,relat:0,releas:0,relev:0,remain:0,replac:0,repres:0,represented_countri:0,representedcountri:0,request:0,resid:0,residenti:0,respons:0,result:0,reus:0,routabl:0,router:0,run:0,runtimeerror:0,russian:0,same:0,satellit:0,school:0,search:0,search_engine_spid:0,second:0,secont:0,see:0,semant:0,serv:0,session:0,set:0,share:0,should:0,signific:0,similar:0,simplemodel:0,simplifi:0,sinc:0,site:0,smallest:0,some:0,someth:0,sort:0,sourc:0,spanish:0,specif:0,specifi:0,spell:0,squar:0,state:0,static_ip_scor:0,statu:0,still:0,str:0,string:0,strongli:0,subclass:0,subdivis:0,submit:0,subnet:0,succe:0,suffici:0,sure:0,synchron:0,system:0,take:0,telstra:0,than:0,thei:0,them:0,thi:0,thing:0,thirti:0,three:0,thrown:0,time:0,time_zon:0,timeout:0,tor:0,tracker:0,trait:0,transport:0,travel:0,tupl:0,turn:0,two:0,typic:0,umn:0,unanticip:0,under:0,underli:0,unicod:0,union:0,uniqu:0,unit:0,unpopul:0,uri:0,used:0,useful:0,user:0,user_count:0,user_typ:0,uses:0,using:0,valid:0,valueerror:0,vari:0,variabl:0,veri:0,view:0,vpn:0,wait:0,want:0,were:0,when:0,where:0,whether:0,which:0,wish:0,within:0,word:0,work:0,world:0,would:0,www:0,you:0,your:0,zone:0},titles:["MaxMind GeoIP2 Python API"],titleterms:{"return":0,anonym:0,api:0,asn:0,async:0,citi:0,client:0,connect:0,data:0,databas:0,descript:0,dictionari:0,domain:0,enterpris:0,error:0,exampl:0,except:0,extens:0,geoip2:0,geoloc:0,geonam:0,indic:0,instal:0,integr:0,isp:0,kei:0,maxmind:0,model:0,modul:0,problem:0,python:0,reader:0,record:0,report:0,requir:0,servic:0,ssl:0,support:0,sync:0,tabl:0,type:0,usag:0,use:0,valu:0,version:0,web:0,webservic:0,what:0}}) \ No newline at end of file +Search.setIndex({docnames:["index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["index.rst"],objects:{"":{geoip2:[0,0,0,"-"]},"geoip2.database":{Reader:[0,1,1,""]},"geoip2.database.Reader":{anonymous_ip:[0,2,1,""],asn:[0,2,1,""],city:[0,2,1,""],close:[0,2,1,""],connection_type:[0,2,1,""],country:[0,2,1,""],domain:[0,2,1,""],enterprise:[0,2,1,""],isp:[0,2,1,""],metadata:[0,2,1,""]},"geoip2.errors":{AddressNotFoundError:[0,3,1,""],AuthenticationError:[0,3,1,""],GeoIP2Error:[0,3,1,""],HTTPError:[0,3,1,""],InvalidRequestError:[0,3,1,""],OutOfQueriesError:[0,3,1,""],PermissionRequiredError:[0,3,1,""]},"geoip2.models":{ASN:[0,1,1,""],AnonymousIP:[0,1,1,""],City:[0,1,1,""],ConnectionType:[0,1,1,""],Country:[0,1,1,""],Domain:[0,1,1,""],Enterprise:[0,1,1,""],ISP:[0,1,1,""],Insights:[0,1,1,""],SimpleModel:[0,1,1,""]},"geoip2.models.ASN":{autonomous_system_number:[0,4,1,""],autonomous_system_organization:[0,4,1,""],ip_address:[0,4,1,""],network:[0,4,1,""]},"geoip2.models.AnonymousIP":{ip_address:[0,4,1,""],is_anonymous:[0,4,1,""],is_anonymous_vpn:[0,4,1,""],is_hosting_provider:[0,4,1,""],is_public_proxy:[0,4,1,""],is_residential_proxy:[0,4,1,""],is_tor_exit_node:[0,4,1,""],network:[0,4,1,""]},"geoip2.models.City":{city:[0,4,1,""],continent:[0,4,1,""],country:[0,4,1,""],location:[0,4,1,""],maxmind:[0,4,1,""],postal:[0,4,1,""],registered_country:[0,4,1,""],represented_country:[0,4,1,""],subdivisions:[0,4,1,""],traits:[0,4,1,""]},"geoip2.models.ConnectionType":{connection_type:[0,4,1,""],ip_address:[0,4,1,""],network:[0,4,1,""]},"geoip2.models.Country":{continent:[0,4,1,""],country:[0,4,1,""],maxmind:[0,4,1,""],registered_country:[0,4,1,""],represented_country:[0,4,1,""],traits:[0,4,1,""]},"geoip2.models.Domain":{domain:[0,4,1,""],ip_address:[0,4,1,""],network:[0,4,1,""]},"geoip2.models.Enterprise":{city:[0,4,1,""],continent:[0,4,1,""],country:[0,4,1,""],location:[0,4,1,""],maxmind:[0,4,1,""],registered_country:[0,4,1,""],represented_country:[0,4,1,""],subdivisions:[0,4,1,""],traits:[0,4,1,""]},"geoip2.models.ISP":{autonomous_system_number:[0,4,1,""],autonomous_system_organization:[0,4,1,""],ip_address:[0,4,1,""],isp:[0,4,1,""],network:[0,4,1,""],organization:[0,4,1,""]},"geoip2.models.Insights":{city:[0,4,1,""],continent:[0,4,1,""],country:[0,4,1,""],location:[0,4,1,""],maxmind:[0,4,1,""],registered_country:[0,4,1,""],represented_country:[0,4,1,""],subdivisions:[0,4,1,""],traits:[0,4,1,""]},"geoip2.models.SimpleModel":{network:[0,2,1,""]},"geoip2.records":{City:[0,1,1,""],Continent:[0,1,1,""],Country:[0,1,1,""],Location:[0,1,1,""],MaxMind:[0,1,1,""],PlaceRecord:[0,1,1,""],Postal:[0,1,1,""],Record:[0,1,1,""],RepresentedCountry:[0,1,1,""],Subdivision:[0,1,1,""],Subdivisions:[0,1,1,""],Traits:[0,1,1,""]},"geoip2.records.City":{confidence:[0,4,1,""],geoname_id:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""]},"geoip2.records.Continent":{code:[0,4,1,""],geoname_id:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""]},"geoip2.records.Country":{confidence:[0,4,1,""],geoname_id:[0,4,1,""],is_in_european_union:[0,4,1,""],iso_code:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""]},"geoip2.records.Location":{accuracy_radius:[0,4,1,""],average_income:[0,4,1,""],latitude:[0,4,1,""],longitude:[0,4,1,""],metro_code:[0,4,1,""],population_density:[0,4,1,""],time_zone:[0,4,1,""]},"geoip2.records.MaxMind":{queries_remaining:[0,4,1,""]},"geoip2.records.PlaceRecord":{name:[0,2,1,""]},"geoip2.records.Postal":{code:[0,4,1,""],confidence:[0,4,1,""]},"geoip2.records.RepresentedCountry":{confidence:[0,4,1,""],geoname_id:[0,4,1,""],is_in_european_union:[0,4,1,""],iso_code:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""],type:[0,4,1,""]},"geoip2.records.Subdivision":{confidence:[0,4,1,""],geoname_id:[0,4,1,""],iso_code:[0,4,1,""],name:[0,4,1,""],names:[0,4,1,""]},"geoip2.records.Subdivisions":{most_specific:[0,2,1,""]},"geoip2.records.Traits":{autonomous_system_number:[0,4,1,""],autonomous_system_organization:[0,4,1,""],connection_type:[0,4,1,""],domain:[0,4,1,""],ip_address:[0,4,1,""],is_anonymous:[0,4,1,""],is_anonymous_proxy:[0,4,1,""],is_anonymous_vpn:[0,4,1,""],is_hosting_provider:[0,4,1,""],is_legitimate_proxy:[0,4,1,""],is_public_proxy:[0,4,1,""],is_residential_proxy:[0,4,1,""],is_satellite_provider:[0,4,1,""],is_tor_exit_node:[0,4,1,""],isp:[0,4,1,""],network:[0,2,1,"id0"],organization:[0,4,1,""],static_ip_score:[0,4,1,""],user_count:[0,4,1,""],user_type:[0,4,1,""]},"geoip2.webservice":{AsyncClient:[0,1,1,""],Client:[0,1,1,""]},"geoip2.webservice.AsyncClient":{city:[0,2,1,""],close:[0,2,1,""],country:[0,2,1,""],insights:[0,2,1,""]},"geoip2.webservice.Client":{city:[0,2,1,""],close:[0,2,1,""],country:[0,2,1,""],insights:[0,2,1,""]},geoip2:{database:[0,0,0,"-"],errors:[0,0,0,"-"],models:[0,0,0,"-"],records:[0,0,0,"-"],webservice:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:attribute"},terms:{"4xx":0,"5xx":0,"\u7f8e\u56fd":0,"abstract":0,"case":0,"class":0,"default":0,"final":0,"float":0,"import":0,"int":0,"long":0,"public":0,"static":0,"throw":0,"true":0,"while":0,For:0,IPs:0,The:0,There:0,These:0,Use:0,abl:0,about:0,abov:0,accent:0,accept:0,access:0,account:0,account_id:0,accuraci:0,accuracy_radiu:0,across:0,add:0,added:0,addit:0,address:0,addressnotfounderror:0,adword:0,after:0,against:0,all:0,alpha:0,also:0,altern:0,alwai:0,america:0,ani:0,anonproxi:0,anonymous_ip:0,anonymousip:0,anoth:0,apach:0,appropri:0,approxim:0,argument:0,around:0,ascii:0,assign:0,assist:0,associ:0,asynccli:0,attribut:0,authent:0,authenticationerror:0,automat:0,autonom:0,autonomous_system_numb:0,autonomous_system_organ:0,avail:0,averag:0,average_incom:0,await:0,base:0,basic:0,becaus:0,becom:0,behind:0,believ:0,belong:0,besid:0,between:0,block:0,bodi:0,bool:0,both:0,brazilian:0,bug:0,busi:0,cabl:0,cafe:0,call:0,can:0,carrier:0,cellular:0,center:0,chang:0,charact:0,check:0,chines:0,circl:0,close:0,code:0,collect:0,colleg:0,com:0,confid:0,connection_typ:0,connectiontyp:0,constructor:0,contact:0,contain:0,content:0,content_delivery_network:0,contin:0,copyright:0,corpor:0,correct:0,correspond:0,corrupt:0,could:0,count:0,countri:0,coverag:0,creat:0,creation:0,current:0,custom:0,decid:0,decod:0,decoded_cont:0,deprec:0,descriptor:0,detail:0,dev:0,devic:0,dialup:0,dict:0,differ:0,directori:0,discourag:0,distribut:0,doc:0,document:0,doe:0,doing:0,dollar:0,download:0,dsl:0,due:0,dure:0,dynam:0,each:0,easy_instal:0,edit:0,edu:0,either:0,element:0,empti:0,end:0,endpoint:0,england:0,english:0,ensur:0,entir:0,entiti:0,estim:0,etc:0,european:0,even:0,event:0,everi:0,exist:0,exit:0,expand:0,expens:0,explicit:0,explicitli:0,extend:0,extern:0,factor:0,fail:0,fals:0,faq:0,featur:0,few:0,field:0,file:0,fileish:0,filenotfounderror:0,find:0,first:0,flag:0,follow:0,foo:0,format:0,found:0,free:0,french:0,from:0,fund:0,further:0,futur:0,gener:0,geograph:0,geoip2error:0,geoip:0,geolite2:0,geoname_id:0,german:0,get:0,github:0,given:0,googl:0,govern:0,greater:0,has:0,have:0,help:0,higher:0,host:0,hostnam:0,hour:0,household:0,how:0,http:0,http_statu:0,httperror:0,iana:0,identifi:0,imprecis:0,inc:0,includ:0,incom:0,incorpor:0,incorrect:0,incorrectli:0,increas:0,index:0,individu:0,inform:0,inher:0,insight:0,instanc:0,instead:0,instruct:0,integ:0,intern:0,internet:0,invalid:0,invaliddatabaseerror:0,invalidrequesterror:0,ip_address:0,ipaddress:0,ipv4:0,ipv4address:0,ipv4network:0,ipv6:0,ipv6address:0,ipv6network:0,is_anonym:0,is_anonymous_proxi:0,is_anonymous_vpn:0,is_hosting_provid:0,is_in_european_union:0,is_legitimate_proxi:0,is_public_proxi:0,is_residential_proxi:0,is_satellite_provid:0,is_tor_exit_nod:0,iso:0,iso_cod:0,issu:0,its:0,itself:0,japanes:0,keyword:0,kilomet:0,kingdom:0,largest:0,latitud:0,least:0,legitim:0,level:0,libmaxminddb:0,librari:0,licens:0,license_kei:0,lifetim:0,like:0,link:0,list:0,local:0,locat:0,longitud:0,look:0,lookup:0,loop:0,ltd:0,made:0,mai:0,maintain:0,make:0,mani:0,map:0,maxminddb:0,mean:0,member:0,messag:0,metadata:0,method:0,metro:0,metro_cod:0,militari:0,minneapoli:0,minnesota:0,mistak:0,mmdb:0,mobil:0,mode:0,more:0,most:0,most_specif:0,move:0,multipl:0,must:0,my_license_kei:0,name:0,nat:0,need:0,network:0,new_york:0,node:0,non:0,none:0,north:0,note:0,now:0,number:0,object:0,occur:0,oceania:0,offer:0,often:0,older:0,onc:0,one:0,onli:0,open:0,option:0,order:0,org:0,organ:0,other:0,our:0,out:0,outofquerieserror:0,output:0,over:0,oversea:0,own:0,oxford:0,oxfordshir:0,packag:0,page:0,pai:0,paid:0,paramet:0,part:0,particular:0,pass:0,past:0,path:0,per:0,perform:0,permiss:0,permissionrequirederror:0,piec:0,pip:0,place:0,placerecord:0,pleas:0,point:0,popul:0,population_dens:0,portion:0,portugues:0,possibl:0,postal:0,precis:0,prefix_len:0,premium:0,present:0,properti:0,provid:0,proxi:0,pty:0,queri:0,queries_remain:0,radiu:0,rais:0,rang:0,raw:0,raw_respons:0,read:0,readabl:0,recommend:0,region:0,regist:0,registered_countri:0,relat:0,releas:0,relev:0,remain:0,replac:0,repres:0,represented_countri:0,representedcountri:0,request:0,resid:0,residenti:0,respons:0,result:0,reus:0,routabl:0,router:0,run:0,runtimeerror:0,russian:0,same:0,satellit:0,school:0,search:0,search_engine_spid:0,second:0,secont:0,see:0,semant:0,serv:0,session:0,set:0,share:0,should:0,signific:0,similar:0,simplemodel:0,simplifi:0,sinc:0,site:0,smallest:0,some:0,someth:0,sort:0,sourc:0,spanish:0,specif:0,specifi:0,spell:0,squar:0,state:0,static_ip_scor:0,statu:0,still:0,str:0,string:0,strongli:0,subclass:0,subdivis:0,submit:0,subnet:0,succe:0,suffici:0,sure:0,suspect:0,synchron:0,system:0,take:0,telstra:0,than:0,thei:0,them:0,thi:0,thing:0,thirti:0,three:0,thrown:0,time:0,time_zon:0,timeout:0,tor:0,tracker:0,trait:0,transport:0,travel:0,tupl:0,turn:0,two:0,typic:0,umn:0,unanticip:0,under:0,underli:0,unicod:0,union:0,uniqu:0,unit:0,unpopul:0,uri:0,used:0,useful:0,user:0,user_count:0,user_typ:0,uses:0,using:0,valid:0,valueerror:0,vari:0,variabl:0,veri:0,view:0,vpn:0,wait:0,want:0,were:0,when:0,where:0,whether:0,which:0,wish:0,within:0,word:0,work:0,world:0,would:0,www:0,you:0,your:0,zone:0},titles:["MaxMind GeoIP2 Python API"],titleterms:{"return":0,anonym:0,api:0,asn:0,async:0,citi:0,client:0,connect:0,data:0,databas:0,descript:0,dictionari:0,domain:0,enterpris:0,error:0,exampl:0,except:0,extens:0,geoip2:0,geoloc:0,geonam:0,indic:0,instal:0,integr:0,isp:0,kei:0,maxmind:0,model:0,modul:0,problem:0,python:0,reader:0,record:0,report:0,requir:0,servic:0,ssl:0,support:0,sync:0,tabl:0,type:0,usag:0,use:0,valu:0,version:0,web:0,webservic:0,what:0}}) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/geoip2/__init__.py new/geoip2-4.1.0/geoip2/__init__.py --- old/geoip2-4.0.2/geoip2/__init__.py 2020-07-28 19:38:52.000000000 +0200 +++ new/geoip2-4.1.0/geoip2/__init__.py 2020-09-25 17:56:29.000000000 +0200 @@ -1,7 +1,7 @@ # pylint:disable=C0111 __title__ = "geoip2" -__version__ = "4.0.2" +__version__ = "4.1.0" __author__ = "Gregory Oschwald" __license__ = "Apache License, Version 2.0" __copyright__ = "Copyright (c) 2013-2020 Maxmind, Inc." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/geoip2/database.py new/geoip2-4.1.0/geoip2/database.py --- old/geoip2-4.0.2/geoip2/database.py 2020-07-15 00:38:33.000000000 +0200 +++ new/geoip2-4.1.0/geoip2/database.py 2020-09-10 00:31:26.000000000 +0200 @@ -56,8 +56,7 @@ ``geoip2.errors.AddressNotFoundError`` exception will be thrown. If the database is corrupt or invalid, a ``maxminddb.InvalidDatabaseError`` will be thrown. - -""" + """ def __init__( self, fileish: str, locales: Optional[List[str]] = None, mode: int = MODE_AUTO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/geoip2/errors.py new/geoip2-4.1.0/geoip2/errors.py --- old/geoip2-4.0.2/geoip2/errors.py 2020-07-14 23:41:43.000000000 +0200 +++ new/geoip2-4.1.0/geoip2/errors.py 2020-09-25 17:55:47.000000000 +0200 @@ -32,15 +32,21 @@ :ivar http_status: The HTTP status code returned :ivar uri: The URI queried + :ivar decoded_content: The decoded response content """ def __init__( - self, message: str, http_status: Optional[int] = None, uri: Optional[str] = None + self, + message: str, + http_status: Optional[int] = None, + uri: Optional[str] = None, + decoded_content: Optional[str] = None, ) -> None: super().__init__(message) self.http_status = http_status self.uri = uri + self.decoded_content = decoded_content class InvalidRequestError(GeoIP2Error): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/geoip2/models.py new/geoip2-4.1.0/geoip2/models.py --- old/geoip2-4.0.2/geoip2/models.py 2020-07-16 17:19:03.000000000 +0200 +++ new/geoip2-4.1.0/geoip2/models.py 2020-09-25 17:00:20.000000000 +0200 @@ -396,6 +396,13 @@ :type: bool + .. attribute:: is_residential_proxy + + This is true if the IP address is on a suspected anonymizing network + and belongs to a residential ISP. + + :type: bool + .. attribute:: is_tor_exit_node This is true if the IP address is a Tor exit node. @@ -421,6 +428,7 @@ is_anonymous_vpn: bool is_hosting_provider: bool is_public_proxy: bool + is_residential_proxy: bool is_tor_exit_node: bool def __init__(self, raw: Dict[str, bool]) -> None: @@ -429,6 +437,7 @@ self.is_anonymous_vpn = raw.get("is_anonymous_vpn", False) self.is_hosting_provider = raw.get("is_hosting_provider", False) self.is_public_proxy = raw.get("is_public_proxy", False) + self.is_residential_proxy = raw.get("is_residential_proxy", False) self.is_tor_exit_node = raw.get("is_tor_exit_node", False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/geoip2/records.py new/geoip2-4.1.0/geoip2/records.py --- old/geoip2-4.0.2/geoip2/records.py 2020-07-16 17:19:03.000000000 +0200 +++ new/geoip2-4.1.0/geoip2/records.py 2020-09-25 17:00:20.000000000 +0200 @@ -693,6 +693,15 @@ :type: bool + .. attribute:: is_residential_proxy + + This is true if the IP address is on a suspected anonymizing network + and belongs to a residential ISP. This attribute is only available from + GeoIP2 Precision Insights. + + :type: bool + + .. attribute:: is_satellite_provider This is true if the IP address is from a satellite provider that @@ -798,6 +807,7 @@ is_hosting_provider: bool is_legitimate_proxy: bool is_public_proxy: bool + is_residential_proxy: bool is_satellite_provider: bool is_tor_exit_node: bool isp: Optional[str] @@ -821,6 +831,7 @@ is_hosting_provider: bool = False, is_legitimate_proxy: bool = False, is_public_proxy: bool = False, + is_residential_proxy: bool = False, is_satellite_provider: bool = False, is_tor_exit_node: bool = False, isp: Optional[str] = None, @@ -843,6 +854,7 @@ self.is_hosting_provider = is_hosting_provider self.is_legitimate_proxy = is_legitimate_proxy self.is_public_proxy = is_public_proxy + self.is_residential_proxy = is_residential_proxy self.is_satellite_provider = is_satellite_provider self.is_tor_exit_node = is_tor_exit_node self.isp = isp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/geoip2/webservice.py new/geoip2-4.1.0/geoip2/webservice.py --- old/geoip2-4.0.2/geoip2/webservice.py 2020-07-21 18:41:13.000000000 +0200 +++ new/geoip2-4.1.0/geoip2/webservice.py 2020-09-25 17:55:47.000000000 +0200 @@ -104,7 +104,7 @@ "JSON: " % locals() + ", ".join(ex.args), 200, uri, - ) + ) from ex def _exception_for_error( self, status: int, content_type: str, body: str, uri: str @@ -112,8 +112,8 @@ if 400 <= status < 500: return self._exception_for_4xx_status(status, content_type, body, uri) if 500 <= status < 600: - return self._exception_for_5xx_status(status, uri) - return self._exception_for_non_200_status(status, uri) + return self._exception_for_5xx_status(status, uri, body) + return self._exception_for_non_200_status(status, uri, body) def _exception_for_4xx_status( self, status: int, content_type: str, body: str, uri: str @@ -123,6 +123,7 @@ "Received a %(status)i error for %(uri)s " "with no body." % locals(), status, uri, + body, ) if content_type.find("json") == -1: return HTTPError( @@ -130,6 +131,7 @@ "body: %s" % (status, uri, str(content_type)), status, uri, + body, ) try: decoded_body = json.loads(body) @@ -139,9 +141,10 @@ " not include the expected JSON body: " % locals() + ", ".join(ex.args), status, uri, + body, ) else: - if "code" in body and "error" in body: + if "code" in decoded_body and "error" in decoded_body: return self._exception_for_web_service_error( decoded_body.get("error"), decoded_body.get("code"), status, uri ) @@ -149,6 +152,7 @@ "Response contains JSON but it does not specify " "code or error keys", status, uri, + body, ) @staticmethod @@ -180,20 +184,26 @@ return InvalidRequestError(message, code, status, uri) @staticmethod - def _exception_for_5xx_status(status: int, uri: str) -> HTTPError: + def _exception_for_5xx_status( + status: int, uri: str, body: Optional[str] + ) -> HTTPError: return HTTPError( "Received a server error (%(status)i) for " "%(uri)s" % locals(), status, uri, + body, ) @staticmethod - def _exception_for_non_200_status(status: int, uri: str) -> HTTPError: + def _exception_for_non_200_status( + status: int, uri: str, body: Optional[str] + ) -> HTTPError: return HTTPError( "Received a very surprising HTTP status " "(%(status)i) for %(uri)s" % locals(), status, uri, + body, ) @@ -254,7 +264,11 @@ timeout: float = 60, ) -> None: super().__init__( - account_id, license_key, host, locales, timeout, + account_id, + license_key, + host, + locales, + timeout, ) async def city(self, ip_address: IPAddress = "me") -> City: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/geoip2.egg-info/PKG-INFO new/geoip2-4.1.0/geoip2.egg-info/PKG-INFO --- old/geoip2-4.0.2/geoip2.egg-info/PKG-INFO 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/geoip2.egg-info/PKG-INFO 2020-09-25 17:56:48.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: geoip2 -Version: 4.0.2 +Version: 4.1.0 Summary: MaxMind GeoIP2 API Home-page: http://www.maxmind.com/ Author: Gregory Oschwald @@ -237,6 +237,8 @@ False >>> response.is_public_proxy False + >>> response.is_residential_proxy + False >>> response.is_tor_exit_node True >>> response.ip_address diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/geoip2.egg-info/SOURCES.txt new/geoip2-4.1.0/geoip2.egg-info/SOURCES.txt --- old/geoip2-4.0.2/geoip2.egg-info/SOURCES.txt 2020-07-28 19:39:05.000000000 +0200 +++ new/geoip2-4.1.0/geoip2.egg-info/SOURCES.txt 2020-09-25 17:56:48.000000000 +0200 @@ -57,6 +57,7 @@ tests/data/test-data/GeoIP2-Enterprise-Test.mmdb tests/data/test-data/GeoIP2-ISP-Test.mmdb tests/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +tests/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb tests/data/test-data/GeoIP2-User-Count-Test.mmdb tests/data/test-data/GeoLite2-ASN-Test.mmdb tests/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb @@ -74,4 +75,5 @@ tests/data/test-data/MaxMind-DB-test-mixed-24.mmdb tests/data/test-data/MaxMind-DB-test-mixed-28.mmdb tests/data/test-data/MaxMind-DB-test-mixed-32.mmdb -tests/data/test-data/MaxMind-DB-test-nested.mmdb \ No newline at end of file +tests/data/test-data/MaxMind-DB-test-nested.mmdb +tests/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/setup.py new/geoip2-4.1.0/setup.py --- old/geoip2-4.0.2/setup.py 2020-07-28 19:27:21.000000000 +0200 +++ new/geoip2-4.1.0/setup.py 2020-09-25 17:00:20.000000000 +0200 @@ -26,7 +26,7 @@ include_package_data=True, python_requires=">=3.6", install_requires=requirements, - tests_require=["mocket>=3.8.6"], + tests_require=["mocket>=3.8.9"], test_suite="tests", license=geoip2.__license__, classifiers=[ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-City-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-City-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-Connection-Type-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-Connection-Type-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-Country-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-Country-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-DensityIncome-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-DensityIncome-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-Domain-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-Domain-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-Enterprise-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-Enterprise-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-ISP-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-ISP-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoIP2-User-Count-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoIP2-User-Count-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/GeoLite2-ASN-Test.mmdb and new/geoip2-4.1.0/tests/data/test-data/GeoLite2-ASN-Test.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-string-value-entries.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-string-value-entries.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-decoder.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-decoder.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-ipv4-24.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-ipv4-24.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-ipv4-28.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-ipv4-28.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-ipv4-32.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-ipv4-32.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-ipv6-24.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-ipv6-24.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-ipv6-28.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-ipv6-28.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-ipv6-32.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-ipv6-32.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-mixed-24.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-mixed-24.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-mixed-28.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-mixed-28.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-mixed-32.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-mixed-32.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-nested.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-nested.mmdb differ Binary files old/geoip2-4.0.2/tests/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb and new/geoip2-4.1.0/tests/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/tests/database_test.py new/geoip2-4.1.0/tests/database_test.py --- old/geoip2-4.0.2/tests/database_test.py 2020-07-14 23:41:43.000000000 +0200 +++ new/geoip2-4.1.0/tests/database_test.py 2020-09-25 17:00:20.000000000 +0200 @@ -66,11 +66,29 @@ self.assertEqual(record.is_anonymous_vpn, True) self.assertEqual(record.is_hosting_provider, False) self.assertEqual(record.is_public_proxy, False) + self.assertEqual(record.is_residential_proxy, False) self.assertEqual(record.is_tor_exit_node, False) self.assertEqual(record.ip_address, ip_address) self.assertEqual(record.network, ipaddress.ip_network("1.2.0.0/16")) reader.close() + def test_anonymous_ip_all_set(self) -> None: + reader = geoip2.database.Reader( + "tests/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb" + ) + ip_address = "81.2.69.1" + + record = reader.anonymous_ip(ip_address) + self.assertEqual(record.is_anonymous, True) + self.assertEqual(record.is_anonymous_vpn, True) + self.assertEqual(record.is_hosting_provider, True) + self.assertEqual(record.is_public_proxy, True) + self.assertEqual(record.is_residential_proxy, True) + self.assertEqual(record.is_tor_exit_node, True) + self.assertEqual(record.ip_address, ip_address) + self.assertEqual(record.network, ipaddress.ip_network("81.2.69.0/24")) + reader.close() + def test_asn(self) -> None: reader = geoip2.database.Reader("tests/data/test-data/GeoLite2-ASN-Test.mmdb") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/tests/models_test.py new/geoip2-4.1.0/tests/models_test.py --- old/geoip2-4.0.2/tests/models_test.py 2020-07-14 23:41:43.000000000 +0200 +++ new/geoip2-4.1.0/tests/models_test.py 2020-09-25 17:00:20.000000000 +0200 @@ -40,7 +40,10 @@ "population_density": 1341, "time_zone": "America/Chicago", }, - "postal": {"code": "55401", "confidence": 33,}, + "postal": { + "code": "55401", + "confidence": 33, + }, "subdivisions": [ { "confidence": 88, @@ -48,7 +51,11 @@ "iso_code": "MN", "names": {"en": "Minnesota"}, }, - {"geoname_id": 123, "iso_code": "HP", "names": {"en": "Hennepin"},}, + { + "geoname_id": 123, + "iso_code": "HP", + "names": {"en": "Hennepin"}, + }, ], "registered_country": { "geoname_id": 2, @@ -72,6 +79,7 @@ "is_anonymous_vpn": True, "is_hosting_provider": True, "is_public_proxy": True, + "is_residential_proxy": True, "is_satellite_provider": True, "is_tor_exit_node": True, "isp": "Comcast", @@ -187,6 +195,7 @@ self.assertIs(model.traits.is_anonymous_vpn, True) self.assertIs(model.traits.is_hosting_provider, True) self.assertIs(model.traits.is_public_proxy, True) + self.assertIs(model.traits.is_residential_proxy, True) self.assertIs(model.traits.is_satellite_provider, True) self.assertIs(model.traits.is_tor_exit_node, True) self.assertEqual(model.traits.user_count, 2) @@ -248,7 +257,10 @@ "iso_code": "CA", "names": {"en": "Canada"}, }, - "traits": {"ip_address": "1.2.3.4", "is_satellite_provider": True,}, + "traits": { + "ip_address": "1.2.3.4", + "is_satellite_provider": True, + }, } model = geoip2.models.City(raw) self.assertEqual(type(model), geoip2.models.City, "geoip2.models.City object") @@ -331,13 +343,36 @@ model = geoip2.models.City( { "city": {"invalid": 0}, - "continent": {"invalid": 0, "names": {"invalid": 0},}, - "country": {"invalid": 0, "names": {"invalid": 0},}, + "continent": { + "invalid": 0, + "names": {"invalid": 0}, + }, + "country": { + "invalid": 0, + "names": {"invalid": 0}, + }, "location": {"invalid": 0}, "postal": {"invalid": 0}, - "subdivisions": [{"invalid": 0, "names": {"invalid": 0,},},], - "registered_country": {"invalid": 0, "names": {"invalid": 0,},}, - "represented_country": {"invalid": 0, "names": {"invalid": 0,},}, + "subdivisions": [ + { + "invalid": 0, + "names": { + "invalid": 0, + }, + }, + ], + "registered_country": { + "invalid": 0, + "names": { + "invalid": 0, + }, + }, + "represented_country": { + "invalid": 0, + "names": { + "invalid": 0, + }, + }, "traits": {"ip_address": "1.2.3.4", "invalid": "blah"}, "unk_base": {"blah": 1}, } @@ -374,7 +409,9 @@ "zh-CN": "美国", }, }, - "traits": {"ip_address": "1.2.3.4",}, + "traits": { + "ip_address": "1.2.3.4", + }, } def test_names(self) -> None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/geoip2-4.0.2/tests/webservice_test.py new/geoip2-4.1.0/tests/webservice_test.py --- old/geoip2-4.0.2/tests/webservice_test.py 2020-07-21 18:41:13.000000000 +0200 +++ new/geoip2-4.1.0/tests/webservice_test.py 2020-09-25 17:00:20.000000000 +0200 @@ -14,7 +14,7 @@ # httpretty currently doesn't work, but mocket with the compat interface # does. from mocket import Mocket # type: ignore -from mocket.plugins.httpretty import HTTPretty as httpretty, httprettified # type: ignore +from mocket.plugins.httpretty import httpretty, httprettified # type: ignore import geoip2 from geoip2.errors import ( AddressNotFoundError,
