Hello community,

here is the log from the commit of package python-geoip2 for openSUSE:Factory 
checked in at 2018-06-29 22:27:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-geoip2 (Old)
 and      /work/SRC/openSUSE:Factory/.python-geoip2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-geoip2"

Fri Jun 29 22:27:47 2018 rev:5 rq:617163 version:2.9.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-geoip2/python-geoip2.changes      
2018-05-08 13:36:38.055081346 +0200
+++ /work/SRC/openSUSE:Factory/.python-geoip2.new/python-geoip2.changes 
2018-06-29 22:27:47.702420304 +0200
@@ -1,0 +2,9 @@
+Sun May 27 08:28:33 UTC 2018 - [email protected]
+
+- update to version 2.9.0:
+ * You may now pass in the database via a file descriptor rather than a file
+   name when creating a new ``geoip2.database.Reader`` object using 
``MODE_FD``.
+   This will read the database from the file descriptor into memory. Pull
+   request by nkinkade. GitHub #53.
+
+-------------------------------------------------------------------

Old:
----
  geoip2-2.8.0.tar.gz

New:
----
  geoip2-2.9.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-geoip2.spec ++++++
--- /var/tmp/diff_new_pack.cnaad2/_old  2018-06-29 22:27:48.454419734 +0200
+++ /var/tmp/diff_new_pack.cnaad2/_new  2018-06-29 22:27:48.458419730 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %bcond_without test
 Name:           python-geoip2
-Version:        2.8.0
+Version:        2.9.0
 Release:        0
 Summary:        MaxMind GeoIP2 Python API
 License:        Apache-2.0
@@ -28,20 +28,16 @@
 Source:         
https://files.pythonhosted.org/packages/source/g/geoip2/geoip2-%{version}.tar.gz
 BuildRequires:  %{python_module devel}
 BuildRequires:  %{python_module setuptools}
+BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires:       python-maxminddb >= 1.2.1
-Requires:       python-requests >= 2.9
-BuildArch:      noarch
-%if %{with test}
+# SECTION test requirements
 BuildRequires:  %{python_module maxminddb >= 1.2.1}
 BuildRequires:  %{python_module requests >= 2.9}
-%endif
-# SECTION test requirements
-BuildRequires:  fdupes
-%if %{with test}
 BuildRequires:  %{python_module requests-mock >= 0.5}
-%endif
 # /SECTION
+Requires:       python-maxminddb >= 1.4.0
+Requires:       python-requests >= 2.9
+BuildArch:      noarch
 %ifpython2
 Recommends:     python2-ipaddress
 %endif
@@ -61,10 +57,8 @@
 %python_install
 %python_expand %fdupes %{buildroot}%{$sitearch}
 
-%if %{with test}
 %check
 %python_exec setup.py test
-%endif
 
 %files %{python_files}
 %license LICENSE

++++++ geoip2-2.8.0.tar.gz -> geoip2-2.9.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/HISTORY.rst new/geoip2-2.9.0/HISTORY.rst
--- old/geoip2-2.8.0/HISTORY.rst        2018-04-10 17:16:20.000000000 +0200
+++ new/geoip2-2.9.0/HISTORY.rst        2018-05-25 22:09:07.000000000 +0200
@@ -3,6 +3,14 @@
 History
 -------
 
+2.9.0 (2018-05-25)
+++++++++++++++++++
+
+* You may now pass in the database via a file descriptor rather than a file
+  name when creating a new ``geoip2.database.Reader`` object using ``MODE_FD``.
+  This will read the database from the file descriptor into memory. Pull
+  request by nkinkade. GitHub #53.
+
 2.8.0 (2018-04-10)
 ++++++++++++++++++
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/PKG-INFO new/geoip2-2.9.0/PKG-INFO
--- old/geoip2-2.8.0/PKG-INFO   2018-04-10 17:17:57.000000000 +0200
+++ new/geoip2-2.9.0/PKG-INFO   2018-05-25 22:10:02.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: geoip2
-Version: 2.8.0
+Version: 2.9.0
 Summary: MaxMind GeoIP2 API
 Home-page: http://www.maxmind.com/
 Author: Gregory Oschwald
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/docs/html/.buildinfo 
new/geoip2-2.9.0/docs/html/.buildinfo
--- old/geoip2-2.8.0/docs/html/.buildinfo       2018-04-10 17:17:57.000000000 
+0200
+++ new/geoip2-2.9.0/docs/html/.buildinfo       2018-05-25 22:10:02.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: 814be73c87ed7892a47ad139bc891772
+config: d356c361f731ca751f873518e0f0e70c
 tags: 645f666f9bcd5a90fca523b33c5a78b7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/geoip2-2.8.0/docs/html/_static/documentation_options.js 
new/geoip2-2.9.0/docs/html/_static/documentation_options.js
--- old/geoip2-2.8.0/docs/html/_static/documentation_options.js 2018-04-10 
17:17:57.000000000 +0200
+++ new/geoip2-2.9.0/docs/html/_static/documentation_options.js 2018-05-25 
22:10:02.000000000 +0200
@@ -1,6 +1,6 @@
 var DOCUMENTATION_OPTIONS = {
     URL_ROOT: '',
-    VERSION: '2.8.0',
+    VERSION: '2.9.0',
     LANGUAGE: 'None',
     COLLAPSE_INDEX: false,
     FILE_SUFFIX: '.html',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/docs/html/genindex.html 
new/geoip2-2.9.0/docs/html/genindex.html
--- old/geoip2-2.8.0/docs/html/genindex.html    2018-04-10 17:17:57.000000000 
+0200
+++ new/geoip2-2.9.0/docs/html/genindex.html    2018-05-25 22:10:02.000000000 
+0200
@@ -7,7 +7,7 @@
   <head>
     <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Index &#8212; geoip2 2.8.0 documentation</title>
+    <title>Index &#8212; geoip2 2.9.0 documentation</title>
     <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <script type="text/javascript" 
src="_static/documentation_options.js"></script>
@@ -26,7 +26,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 2.8.0 
documentation</a> &#187;</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">geoip2 2.9.0 
documentation</a> &#187;</li> 
       </ul>
     </div>
       <div class="sphinxsidebar" role="navigation" aria-label="main 
navigation">
@@ -81,18 +81,12 @@
 </li>
       <li><a 
href="index.html#geoip2.errors.AddressNotFoundError">AddressNotFoundError</a>
 </li>
-      <li><a 
href="index.html#geoip2.database.Reader.anonymous_ip">anonymous_ip() 
(geoip2.database.Reader method)</a>
-</li>
       <li><a href="index.html#geoip2.models.AnonymousIP">AnonymousIP (class in 
geoip2.models)</a>
 </li>
       <li><a href="index.html#geoip2.models.ASN">ASN (class in 
geoip2.models)</a>
 </li>
-      <li><a href="index.html#geoip2.database.Reader.asn">asn() 
(geoip2.database.Reader method)</a>
-</li>
       <li><a 
href="index.html#geoip2.errors.AuthenticationError">AuthenticationError</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a 
href="index.html#geoip2.models.ASN.autonomous_system_number">autonomous_system_number
 (geoip2.models.ASN attribute)</a>
 
       <ul>
@@ -101,6 +95,8 @@
         <li><a 
href="index.html#geoip2.records.Traits.autonomous_system_number">(geoip2.records.Traits
 attribute)</a>
 </li>
       </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a 
href="index.html#geoip2.models.ASN.autonomous_system_organization">autonomous_system_organization
 (geoip2.models.ASN attribute)</a>
 
       <ul>
@@ -131,16 +127,10 @@
         <li><a 
href="index.html#geoip2.models.Insights.city">(geoip2.models.Insights 
attribute)</a>
 </li>
       </ul></li>
-      <li><a href="index.html#geoip2.database.Reader.city">city() 
(geoip2.database.Reader method)</a>
-
-      <ul>
-        <li><a 
href="index.html#geoip2.webservice.Client.city">(geoip2.webservice.Client 
method)</a>
+      <li><a href="index.html#geoip2.webservice.Client.city">city() 
(geoip2.webservice.Client method)</a>
 </li>
-      </ul></li>
       <li><a href="index.html#geoip2.webservice.Client">Client (class in 
geoip2.webservice)</a>
 </li>
-      <li><a href="index.html#geoip2.database.Reader.close">close() 
(geoip2.database.Reader method)</a>
-</li>
       <li><a href="index.html#geoip2.records.Continent.code">code 
(geoip2.records.Continent attribute)</a>
 
       <ul>
@@ -167,8 +157,6 @@
         <li><a 
href="index.html#geoip2.records.Traits.connection_type">(geoip2.records.Traits 
attribute)</a>
 </li>
       </ul></li>
-      <li><a 
href="index.html#geoip2.database.Reader.connection_type">connection_type() 
(geoip2.database.Reader method)</a>
-</li>
       <li><a href="index.html#geoip2.models.ConnectionType">ConnectionType 
(class in geoip2.models)</a>
 </li>
       <li><a href="index.html#geoip2.records.Continent">Continent (class in 
geoip2.records)</a>
@@ -199,12 +187,8 @@
         <li><a 
href="index.html#geoip2.models.Insights.country">(geoip2.models.Insights 
attribute)</a>
 </li>
       </ul></li>
-      <li><a href="index.html#geoip2.database.Reader.country">country() 
(geoip2.database.Reader method)</a>
-
-      <ul>
-        <li><a 
href="index.html#geoip2.webservice.Client.country">(geoip2.webservice.Client 
method)</a>
+      <li><a href="index.html#geoip2.webservice.Client.country">country() 
(geoip2.webservice.Client method)</a>
 </li>
-      </ul></li>
   </ul></td>
 </tr></table>
 
@@ -213,6 +197,8 @@
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="index.html#geoip2.models.Domain">Domain (class in 
geoip2.models)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="index.html#geoip2.models.Domain.domain">domain 
(geoip2.models.Domain attribute)</a>
 
       <ul>
@@ -220,10 +206,6 @@
 </li>
       </ul></li>
   </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#geoip2.database.Reader.domain">domain() 
(geoip2.database.Reader method)</a>
-</li>
-  </ul></td>
 </tr></table>
 
 <h2 id="E">E</h2>
@@ -232,10 +214,6 @@
       <li><a href="index.html#geoip2.models.Enterprise">Enterprise (class in 
geoip2.models)</a>
 </li>
   </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#geoip2.database.Reader.enterprise">enterprise() 
(geoip2.database.Reader method)</a>
-</li>
-  </ul></td>
 </tr></table>
 
 <h2 id="G">G</h2>
@@ -243,8 +221,6 @@
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="index.html#module-geoip2">geoip2 (module)</a>
 </li>
-      <li><a href="index.html#module-geoip2.database">geoip2.database 
(module)</a>
-</li>
       <li><a href="index.html#module-geoip2.errors">geoip2.errors (module)</a>
 </li>
       <li><a href="index.html#module-geoip2.models">geoip2.models (module)</a>
@@ -363,8 +339,6 @@
         <li><a 
href="index.html#geoip2.records.Traits.isp">(geoip2.records.Traits 
attribute)</a>
 </li>
       </ul></li>
-      <li><a href="index.html#geoip2.database.Reader.isp">isp() 
(geoip2.database.Reader method)</a>
-</li>
   </ul></td>
 </tr></table>
 
@@ -407,8 +381,6 @@
       </ul></li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#geoip2.database.Reader.metadata">metadata() 
(geoip2.database.Reader method)</a>
-</li>
       <li><a href="index.html#geoip2.records.Location.metro_code">metro_code 
(geoip2.records.Location attribute)</a>
 </li>
       <li><a 
href="index.html#geoip2.records.Subdivisions.most_specific">most_specific 
(geoip2.records.Subdivisions attribute)</a>
@@ -493,8 +465,6 @@
 <h2 id="R">R</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="index.html#geoip2.database.Reader">Reader (class in 
geoip2.database)</a>
-</li>
       <li><a href="index.html#geoip2.records.Record">Record (class in 
geoip2.records)</a>
 </li>
       <li><a 
href="index.html#geoip2.models.City.registered_country">registered_country 
(geoip2.models.City attribute)</a>
@@ -594,7 +564,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 2.8.0 
documentation</a> &#187;</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">geoip2 2.9.0 
documentation</a> &#187;</li> 
       </ul>
     </div>
     <div class="footer" role="contentinfo">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/docs/html/index.html 
new/geoip2-2.9.0/docs/html/index.html
--- old/geoip2-2.8.0/docs/html/index.html       2018-04-10 17:17:57.000000000 
+0200
+++ new/geoip2-2.9.0/docs/html/index.html       2018-05-25 22:10:02.000000000 
+0200
@@ -6,7 +6,7 @@
   <head>
     <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>MaxMind GeoIP2 Python API &#8212; geoip2 2.8.0 documentation</title>
+    <title>MaxMind GeoIP2 Python API &#8212; geoip2 2.9.0 documentation</title>
     <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <script type="text/javascript" 
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 2.8.0 
documentation</a> &#187;</li> 
+        <li class="nav-item nav-item-0"><a href="#">geoip2 2.9.0 
documentation</a> &#187;</li> 
       </ul>
     </div>
       <div class="sphinxsidebar" role="navigation" aria-label="main 
navigation">
@@ -63,7 +63,6 @@
 </ul>
 </li>
 <li><a class="reference internal" href="#module-geoip2">Modules</a><ul>
-<li><a class="reference internal" href="#geoip2-database-reader">GeoIP2 
Database Reader</a></li>
 <li><a class="reference internal" href="#webservices-client-api">WebServices 
Client API</a><ul>
 <li><a class="reference internal" href="#ssl">SSL</a></li>
 </ul>
@@ -468,178 +467,6 @@
 </div>
 <div class="section" id="module-geoip2">
 <span id="modules"></span><h1>Modules<a class="headerlink" 
href="#module-geoip2" title="Permalink to this headline">¶</a></h1>
-<span class="target" id="module-geoip2.database"></span><div class="section" 
id="geoip2-database-reader">
-<h2>GeoIP2 Database Reader<a class="headerlink" href="#geoip2-database-reader" 
title="Permalink to this headline">¶</a></h2>
-<dl class="class">
-<dt id="geoip2.database.Reader">
-<em class="property">class </em><code 
class="descclassname">geoip2.database.</code><code 
class="descname">Reader</code><span 
class="sig-paren">(</span><em>filename</em>, <em>locales=None</em>, 
<em>mode=0</em><span class="sig-paren">)</span><a class="headerlink" 
href="#geoip2.database.Reader" title="Permalink to this definition">¶</a></dt>
-<dd><p>GeoIP2 database Reader object.</p>
-<p>Instances of this class provide a reader for the GeoIP2 database format.
-IP addresses can be looked up using the <code class="docutils literal 
notranslate"><span class="pre">country</span></code> and <code class="docutils 
literal notranslate"><span class="pre">city</span></code> methods.</p>
-<p>The basic API for this class is the same for every database. First, you
-create a reader object, specifying a file name. You then call the method
-corresponding to the specific database, passing it the IP address you want
-to look up.</p>
-<p>If the request succeeds, the method call will return a model class for the
-method you called. This model in turn contains multiple record classes,
-each of which represents part of the data returned by the database. If the
-database does not contain the requested information, the attributes on the
-record class will have a <code class="docutils literal notranslate"><span 
class="pre">None</span></code> value.</p>
-<p>If the address is not in the database, an
-<code class="docutils literal notranslate"><span 
class="pre">geoip2.errors.AddressNotFoundError</span></code> exception will be 
thrown. If the
-database is corrupt or invalid, a <code class="docutils literal 
notranslate"><span class="pre">maxminddb.InvalidDatabaseError</span></code> will
-be thrown.</p>
-<dl class="method">
-<dt id="geoip2.database.Reader.anonymous_ip">
-<code class="descname">anonymous_ip</code><span 
class="sig-paren">(</span><em>ip_address</em><span class="sig-paren">)</span><a 
class="headerlink" href="#geoip2.database.Reader.anonymous_ip" title="Permalink 
to this definition">¶</a></dt>
-<dd><p>Get the AnonymousIP object for the IP address.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td 
class="field-body"><strong>ip_address</strong> – IPv4 or IPv6 address as a 
string.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td 
class="field-body"><a class="reference internal" 
href="#geoip2.models.AnonymousIP" title="geoip2.models.AnonymousIP"><code 
class="xref py py-class docutils literal notranslate"><span 
class="pre">geoip2.models.AnonymousIP</span></code></a> object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.asn">
-<code class="descname">asn</code><span 
class="sig-paren">(</span><em>ip_address</em><span class="sig-paren">)</span><a 
class="headerlink" href="#geoip2.database.Reader.asn" title="Permalink to this 
definition">¶</a></dt>
-<dd><p>Get the ASN object for the IP address.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td 
class="field-body"><strong>ip_address</strong> – IPv4 or IPv6 address as a 
string.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td 
class="field-body"><a class="reference internal" href="#geoip2.models.ASN" 
title="geoip2.models.ASN"><code class="xref py py-class docutils literal 
notranslate"><span class="pre">geoip2.models.ASN</span></code></a> object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.city">
-<code class="descname">city</code><span 
class="sig-paren">(</span><em>ip_address</em><span class="sig-paren">)</span><a 
class="headerlink" href="#geoip2.database.Reader.city" title="Permalink to this 
definition">¶</a></dt>
-<dd><p>Get the City object for the IP address.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td 
class="field-body"><strong>ip_address</strong> – IPv4 or IPv6 address as a 
string.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td 
class="field-body"><a class="reference internal" href="#geoip2.models.City" 
title="geoip2.models.City"><code class="xref py py-class docutils literal 
notranslate"><span class="pre">geoip2.models.City</span></code></a> object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.close">
-<code class="descname">close</code><span class="sig-paren">(</span><span 
class="sig-paren">)</span><a class="headerlink" 
href="#geoip2.database.Reader.close" title="Permalink to this 
definition">¶</a></dt>
-<dd><p>Closes the GeoIP2 database.</p>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.connection_type">
-<code class="descname">connection_type</code><span 
class="sig-paren">(</span><em>ip_address</em><span class="sig-paren">)</span><a 
class="headerlink" href="#geoip2.database.Reader.connection_type" 
title="Permalink to this definition">¶</a></dt>
-<dd><p>Get the ConnectionType object for the IP address.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td 
class="field-body"><strong>ip_address</strong> – IPv4 or IPv6 address as a 
string.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td 
class="field-body"><a class="reference internal" 
href="#geoip2.models.ConnectionType" title="geoip2.models.ConnectionType"><code 
class="xref py py-class docutils literal notranslate"><span 
class="pre">geoip2.models.ConnectionType</span></code></a> object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.country">
-<code class="descname">country</code><span 
class="sig-paren">(</span><em>ip_address</em><span class="sig-paren">)</span><a 
class="headerlink" href="#geoip2.database.Reader.country" title="Permalink to 
this definition">¶</a></dt>
-<dd><p>Get the Country object for the IP address.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td 
class="field-body"><strong>ip_address</strong> – IPv4 or IPv6 address as a 
string.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td 
class="field-body"><a class="reference internal" href="#geoip2.models.Country" 
title="geoip2.models.Country"><code class="xref py py-class docutils literal 
notranslate"><span class="pre">geoip2.models.Country</span></code></a> 
object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.domain">
-<code class="descname">domain</code><span 
class="sig-paren">(</span><em>ip_address</em><span class="sig-paren">)</span><a 
class="headerlink" href="#geoip2.database.Reader.domain" title="Permalink to 
this definition">¶</a></dt>
-<dd><p>Get the Domain object for the IP address.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td 
class="field-body"><strong>ip_address</strong> – IPv4 or IPv6 address as a 
string.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td 
class="field-body"><a class="reference internal" href="#geoip2.models.Domain" 
title="geoip2.models.Domain"><code class="xref py py-class docutils literal 
notranslate"><span class="pre">geoip2.models.Domain</span></code></a> 
object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.enterprise">
-<code class="descname">enterprise</code><span 
class="sig-paren">(</span><em>ip_address</em><span class="sig-paren">)</span><a 
class="headerlink" href="#geoip2.database.Reader.enterprise" title="Permalink 
to this definition">¶</a></dt>
-<dd><p>Get the Enterprise object for the IP address.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td 
class="field-body"><strong>ip_address</strong> – IPv4 or IPv6 address as a 
string.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td 
class="field-body"><a class="reference internal" 
href="#geoip2.models.Enterprise" title="geoip2.models.Enterprise"><code 
class="xref py py-class docutils literal notranslate"><span 
class="pre">geoip2.models.Enterprise</span></code></a> object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.isp">
-<code class="descname">isp</code><span 
class="sig-paren">(</span><em>ip_address</em><span class="sig-paren">)</span><a 
class="headerlink" href="#geoip2.database.Reader.isp" title="Permalink to this 
definition">¶</a></dt>
-<dd><p>Get the ISP object for the IP address.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td 
class="field-body"><strong>ip_address</strong> – IPv4 or IPv6 address as a 
string.</td>
-</tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td 
class="field-body"><a class="reference internal" href="#geoip2.models.ISP" 
title="geoip2.models.ISP"><code class="xref py py-class docutils literal 
notranslate"><span class="pre">geoip2.models.ISP</span></code></a> object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-<dl class="method">
-<dt id="geoip2.database.Reader.metadata">
-<code class="descname">metadata</code><span class="sig-paren">(</span><span 
class="sig-paren">)</span><a class="headerlink" 
href="#geoip2.database.Reader.metadata" title="Permalink to this 
definition">¶</a></dt>
-<dd><p>The metadata for the open database.</p>
-<table class="docutils field-list" frame="void" rules="none">
-<col class="field-name" />
-<col class="field-body" />
-<tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Returns:</th><td 
class="field-body"><code class="xref py py-class docutils literal 
notranslate"><span class="pre">maxminddb.reader.Metadata</span></code> 
object</td>
-</tr>
-</tbody>
-</table>
-</dd></dl>
-
-</dd></dl>
-
-</div>
 <span class="target" id="module-geoip2.webservice"></span><div class="section" 
id="webservices-client-api">
 <h2>WebServices Client API<a class="headerlink" href="#webservices-client-api" 
title="Permalink to this headline">¶</a></h2>
 <p>This class provides a client API for all the GeoIP2 Precision web service 
end
@@ -2630,7 +2457,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 2.8.0 
documentation</a> &#187;</li> 
+        <li class="nav-item nav-item-0"><a href="#">geoip2 2.9.0 
documentation</a> &#187;</li> 
       </ul>
     </div>
     <div class="footer" role="contentinfo">
Binary files old/geoip2-2.8.0/docs/html/objects.inv and 
new/geoip2-2.9.0/docs/html/objects.inv differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/docs/html/py-modindex.html 
new/geoip2-2.9.0/docs/html/py-modindex.html
--- old/geoip2-2.8.0/docs/html/py-modindex.html 2018-04-10 17:17:57.000000000 
+0200
+++ new/geoip2-2.9.0/docs/html/py-modindex.html 2018-05-25 22:10:02.000000000 
+0200
@@ -6,7 +6,7 @@
   <head>
     <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Python Module Index &#8212; geoip2 2.8.0 documentation</title>
+    <title>Python Module Index &#8212; geoip2 2.9.0 documentation</title>
     <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <script type="text/javascript" 
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 2.8.0 
documentation</a> &#187;</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">geoip2 2.9.0 
documentation</a> &#187;</li> 
       </ul>
     </div>
       <div class="sphinxsidebar" role="navigation" aria-label="main 
navigation">
@@ -73,11 +73,6 @@
      <tr class="cg-1">
        <td></td>
        <td>&#160;&#160;&#160;
-       <a href="index.html#module-geoip2.database"><code 
class="xref">geoip2.database</code></a></td><td>
-       <em></em></td></tr>
-     <tr class="cg-1">
-       <td></td>
-       <td>&#160;&#160;&#160;
        <a href="index.html#module-geoip2.errors"><code 
class="xref">geoip2.errors</code></a></td><td>
        <em></em></td></tr>
      <tr class="cg-1">
@@ -112,7 +107,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 2.8.0 
documentation</a> &#187;</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">geoip2 2.9.0 
documentation</a> &#187;</li> 
       </ul>
     </div>
     <div class="footer" role="contentinfo">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/docs/html/search.html 
new/geoip2-2.9.0/docs/html/search.html
--- old/geoip2-2.8.0/docs/html/search.html      2018-04-10 17:17:57.000000000 
+0200
+++ new/geoip2-2.9.0/docs/html/search.html      2018-05-25 22:10:02.000000000 
+0200
@@ -6,7 +6,7 @@
   <head>
     <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>Search &#8212; geoip2 2.8.0 documentation</title>
+    <title>Search &#8212; geoip2 2.9.0 documentation</title>
     <link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <script type="text/javascript" 
src="_static/documentation_options.js"></script>
@@ -33,7 +33,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 2.8.0 
documentation</a> &#187;</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">geoip2 2.9.0 
documentation</a> &#187;</li> 
       </ul>
     </div>
       <div class="sphinxsidebar" role="navigation" aria-label="main 
navigation">
@@ -84,7 +84,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 2.8.0 
documentation</a> &#187;</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">geoip2 2.9.0 
documentation</a> &#187;</li> 
       </ul>
     </div>
     <div class="footer" role="contentinfo">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/docs/html/searchindex.js 
new/geoip2-2.9.0/docs/html/searchindex.js
--- old/geoip2-2.8.0/docs/html/searchindex.js   2018-04-10 17:17:57.000000000 
+0200
+++ new/geoip2-2.9.0/docs/html/searchindex.js   2018-05-25 22:10:02.000000000 
+0200
@@ -1 +1 @@
-Search.setIndex({docnames:["index"],envversion:53,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,""]},"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,""]},"geoip2.models.City":{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.ConnectionType":{connection_type:[0,4,1,""],ip_address:[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,""]},"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,""],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.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,4,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,4,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,""],organization:[0,4,1,""],user_type:[0,4,1,""]},"geoip2.webservice":{Client:[0,1,1,""]},"geoip2.webservice.Client":{city:[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,"new":0,"public":0,"throw":0,"true":0,"while":0,For:0,The:0,There:0,These:0,Use:0,abl:0,about: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,apach:0,appropri:0,approxim:0,argument:0,around:0,ascii:0,assign:0,assist:0,associ: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,base:0,basic:0,becaus:0,becom:0,been: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,countri:0,coverag:0,cpython:0,creat:0,creation:0,current:0,custom:0,deprec: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,each:0,easy_instal:0,edit:0,edu:0,either:0,element:0,empti:0,end:0,endpoint:0,england:0,english:0,entir:0,entiti:0,estim:0,etc:0,european:0,even: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,filenam:0,filenotfounderror:0,find:0,first: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,has:0,have:0,help:0,host:0,hostnam:0,household: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,inform:0,inher:0,insight:0,instanc:0,instead:0,instruct:0,integ:0,intern:0,internet:0,invalid:0,invaliddatabaseerror:0,invalidrequesterror:0,ioerror:0,ip_address:0,ipv4:0,ipv6: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,kwarg:0,largest:0,latitud:0,least:0,legitim:0,level:0,libmaxminddb:0,librari:0,licens:0,license_kei:0,like:0,link:0,list:0,local:0,locat:0,longitud:0,look:0,lookup: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,order:0,org:0,organ:0,other:0,our:0,out:0,outofquerieserror:0,output: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,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,premium:0,present:0,properti:0,provid:0,proxi:0,pty:0,pypi:0,queri:0,queries_remain:0,radiu:0,rais:0,raw:0,raw_respons: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,see:0,semant:0,serv:0,set: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,statu:0,still:0,string:0,strongli:0,subclass:0,subdivis:0,submit:0,succe:0,suffici:0,sure:0,system:0,take:0,telstra:0,test:0,than:0,thei:0,thi:0,thing: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,umn:0,unanticip:0,unicod:0,union:0,uniqu:0,unit:0,unpopul:0,uri:0,used:0,user:0,user_id:0,user_typ:0,uses:0,using:0,valid:0,valueerror:0,vari:0,variabl:0,veri:0,view:0,vpn:0,want:0,were:0,when:0,where: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,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,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:53,filenames:["index.rst"],objects:{"":{geoip2:[0,0,0,"-"]},"geoip2.errors":{AddressNotFoundError:[0,1,1,""],AuthenticationError:[0,1,1,""],GeoIP2Error:[0,1,1,""],HTTPError:[0,1,1,""],InvalidRequestError:[0,1,1,""],OutOfQueriesError:[0,1,1,""],PermissionRequiredError:[0,1,1,""]},"geoip2.models":{ASN:[0,2,1,""],AnonymousIP:[0,2,1,""],City:[0,2,1,""],ConnectionType:[0,2,1,""],Country:[0,2,1,""],Domain:[0,2,1,""],Enterprise:[0,2,1,""],ISP:[0,2,1,""],Insights:[0,2,1,""],SimpleModel:[0,2,1,""]},"geoip2.models.ASN":{autonomous_system_number:[0,3,1,""],autonomous_system_organization:[0,3,1,""],ip_address:[0,3,1,""]},"geoip2.models.AnonymousIP":{ip_address:[0,3,1,""],is_anonymous:[0,3,1,""],is_anonymous_vpn:[0,3,1,""],is_hosting_provider:[0,3,1,""],is_public_proxy:[0,3,1,""],is_tor_exit_node:[0,3,1,""]},"geoip2.models.City":{city:[0,3,1,""],continent:[0,3,1,""],country:[0,3,1,""],location:[0,3,1,""],maxmind:[0,3,1,""],registered_country:[0,3,1,""],represented_country:[0,3,1,""],subdivisions:[0,3,1,""],traits:[0,3,1,""]},"geoip2.models.ConnectionType":{connection_type:[0,3,1,""],ip_address:[0,3,1,""]},"geoip2.models.Country":{continent:[0,3,1,""],country:[0,3,1,""],maxmind:[0,3,1,""],registered_country:[0,3,1,""],represented_country:[0,3,1,""],traits:[0,3,1,""]},"geoip2.models.Domain":{domain:[0,3,1,""],ip_address:[0,3,1,""]},"geoip2.models.Enterprise":{city:[0,3,1,""],continent:[0,3,1,""],country:[0,3,1,""],location:[0,3,1,""],maxmind:[0,3,1,""],registered_country:[0,3,1,""],represented_country:[0,3,1,""],subdivisions:[0,3,1,""],traits:[0,3,1,""]},"geoip2.models.ISP":{autonomous_system_number:[0,3,1,""],autonomous_system_organization:[0,3,1,""],ip_address:[0,3,1,""],isp:[0,3,1,""],organization:[0,3,1,""]},"geoip2.models.Insights":{city:[0,3,1,""],continent:[0,3,1,""],country:[0,3,1,""],location:[0,3,1,""],maxmind:[0,3,1,""],registered_country:[0,3,1,""],represented_country:[0,3,1,""],subdivisions:[0,3,1,""],traits:[0,3,1,""]},"geoip2.records":{City:[0,2,1,""],Continent:[0,2,1,""],Country:[0,2,1,""],Location:[0,2,1,""],MaxMind:[0,2,1,""],PlaceRecord:[0,2,1,""],Postal:[0,2,1,""],Record:[0,2,1,""],RepresentedCountry:[0,2,1,""],Subdivision:[0,2,1,""],Subdivisions:[0,2,1,""],Traits:[0,2,1,""]},"geoip2.records.City":{confidence:[0,3,1,""],geoname_id:[0,3,1,""],name:[0,3,1,""],names:[0,3,1,""]},"geoip2.records.Continent":{code:[0,3,1,""],geoname_id:[0,3,1,""],name:[0,3,1,""],names:[0,3,1,""]},"geoip2.records.Country":{confidence:[0,3,1,""],geoname_id:[0,3,1,""],is_in_european_union:[0,3,1,""],iso_code:[0,3,1,""],name:[0,3,1,""],names:[0,3,1,""]},"geoip2.records.Location":{accuracy_radius:[0,3,1,""],average_income:[0,3,1,""],latitude:[0,3,1,""],longitude:[0,3,1,""],metro_code:[0,3,1,""],population_density:[0,3,1,""],time_zone:[0,3,1,""]},"geoip2.records.MaxMind":{queries_remaining:[0,3,1,""]},"geoip2.records.PlaceRecord":{name:[0,3,1,""]},"geoip2.records.Postal":{code:[0,3,1,""],confidence:[0,3,1,""]},"geoip2.records.RepresentedCountry":{confidence:[0,3,1,""],geoname_id:[0,3,1,""],is_in_european_union:[0,3,1,""],iso_code:[0,3,1,""],name:[0,3,1,""],names:[0,3,1,""],type:[0,3,1,""]},"geoip2.records.Subdivision":{confidence:[0,3,1,""],geoname_id:[0,3,1,""],iso_code:[0,3,1,""],name:[0,3,1,""],names:[0,3,1,""]},"geoip2.records.Subdivisions":{most_specific:[0,3,1,""]},"geoip2.records.Traits":{autonomous_system_number:[0,3,1,""],autonomous_system_organization:[0,3,1,""],connection_type:[0,3,1,""],domain:[0,3,1,""],ip_address:[0,3,1,""],is_anonymous:[0,3,1,""],is_anonymous_proxy:[0,3,1,""],is_anonymous_vpn:[0,3,1,""],is_hosting_provider:[0,3,1,""],is_legitimate_proxy:[0,3,1,""],is_public_proxy:[0,3,1,""],is_satellite_provider:[0,3,1,""],is_tor_exit_node:[0,3,1,""],isp:[0,3,1,""],organization:[0,3,1,""],user_type:[0,3,1,""]},"geoip2.webservice":{Client:[0,2,1,""]},"geoip2.webservice.Client":{city:[0,4,1,""],country:[0,4,1,""],insights:[0,4,1,""]},geoip2:{errors:[0,0,0,"-"],models:[0,0,0,"-"],records:[0,0,0,"-"],webservice:[0,0,0,"-"]}},objnames:{"0":["py","module","Python
 module"],"1":["py","exception","Python exception"],"2":["py","class","Python 
class"],"3":["py","attribute","Python attribute"],"4":["py","method","Python 
method"]},objtypes:{"0":"py:module","1":"py:exception","2":"py:class","3":"py:attribute","4":"py:method"},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,"new":0,"public":0,"throw":0,"true":0,"while":0,For:0,The:0,There:0,These:0,Use:0,abl:0,about: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,apach:0,appropri:0,approxim:0,argument:0,around:0,ascii:0,assign:0,assist:0,associ: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,base:0,basic:0,becaus:0,becom:0,been: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:[],could:0,countri:0,coverag:0,cpython:0,creat:0,creation:0,current:0,custom:0,deprec: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,each:0,easy_instal:0,edit:0,edu:0,either:0,element:0,empti:0,end:0,endpoint:0,england:0,english:0,entir:0,entiti:0,estim:0,etc:0,european:0,even: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,filenam:[],filenotfounderror:0,find:0,first:0,follow:0,foo:0,format:[],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:[],github:0,given:0,googl:0,govern:0,has:0,have:0,help:0,host:0,hostnam:0,household: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,inform:0,inher:0,insight:0,instanc:0,instead:0,instruct:0,integ:0,intern:0,internet:0,invalid:0,invaliddatabaseerror:0,invalidrequesterror:0,ioerror:0,ip_address:0,ipv4:0,ipv6: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,kwarg:0,largest:0,latitud:0,least:0,legitim:0,level:0,libmaxminddb:0,librari:0,licens:0,license_kei:0,like:0,link:0,list:0,local:0,locat:0,longitud:0,look:0,lookup:0,ltd:0,made:0,mai:0,maintain:0,make:0,mani:0,map:0,maxminddb:0,mean:0,member:0,messag:0,metadata:[],method:0,metro:0,metro_cod:0,militari:0,minneapoli:0,minnesota:0,mistak:0,mmdb:0,mobil:0,mode:[],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:[],order:0,org:0,organ:0,other:0,our:0,out:0,outofquerieserror:0,output: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,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,premium:0,present:0,properti:0,provid:0,proxi:0,pty:0,pypi:0,queri:0,queries_remain:0,radiu:0,rais:0,raw:0,raw_respons: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,see:0,semant:0,serv:0,set: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,statu:0,still:0,string:0,strongli:0,subclass:0,subdivis:0,submit:0,succe:0,suffici:0,sure:0,system:0,take:0,telstra:0,test:0,than:0,thei:0,thi:0,thing: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,umn:0,unanticip:0,unicod:0,union:0,uniqu:0,unit:0,unpopul:0,uri:0,used:0,user:0,user_id:0,user_typ:0,uses:0,using:0,valid:0,valueerror:0,vari:0,variabl:0,veri:0,view:0,vpn:0,want:0,were:0,when:0,where: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,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,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-2.8.0/geoip2/__init__.py 
new/geoip2-2.9.0/geoip2/__init__.py
--- old/geoip2-2.8.0/geoip2/__init__.py 2018-04-10 17:17:36.000000000 +0200
+++ new/geoip2-2.9.0/geoip2/__init__.py 2018-05-25 22:09:50.000000000 +0200
@@ -1,7 +1,7 @@
 # pylint:disable=C0111
 
 __title__ = 'geoip2'
-__version__ = '2.8.0'
+__version__ = '2.9.0'
 __author__ = 'Gregory Oschwald'
 __license__ = 'Apache License, Version 2.0'
 __copyright__ = 'Copyright (c) 2013-2018 Maxmind, Inc.'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/geoip2/database.py 
new/geoip2-2.9.0/geoip2/database.py
--- old/geoip2-2.8.0/geoip2/database.py 2017-05-08 20:46:11.000000000 +0200
+++ new/geoip2-2.9.0/geoip2/database.py 2018-05-16 16:34:04.000000000 +0200
@@ -9,7 +9,7 @@
 import maxminddb
 # pylint: disable=unused-import
 from maxminddb import (MODE_AUTO, MODE_MMAP, MODE_MMAP_EXT, MODE_FILE,
-                       MODE_MEMORY)
+                       MODE_MEMORY, MODE_FD)
 
 import geoip2
 import geoip2.models
@@ -23,9 +23,9 @@
     IP addresses can be looked up using the ``country`` and ``city`` methods.
 
     The basic API for this class is the same for every database. First, you
-    create a reader object, specifying a file name. You then call the method
-    corresponding to the specific database, passing it the IP address you want
-    to look up.
+    create a reader object, specifying a file name or file descriptor.
+    You then call the method corresponding to the specific database, passing
+    it the IP address you want to look up.
 
     If the request succeeds, the method call will return a model class for the
     method you called. This model in turn contains multiple record classes,
@@ -40,10 +40,12 @@
 
 """
 
-    def __init__(self, filename, locales=None, mode=MODE_AUTO):
+    def __init__(self, fileish, locales=None, mode=MODE_AUTO):
         """Create GeoIP2 Reader.
 
-        :param filename: The path to the GeoIP2 database.
+        :param fileish: The string path to the GeoIP2 database, or an existing
+          file descriptor pointing to the database. Note that this latter
+          usage is only valid when mode is MODE_FD.
         :param locales: This is list of locale codes. This argument will be
           passed on to record classes to use when their name properties are
           called. The default value is ['en'].
@@ -73,13 +75,15 @@
           * MODE_MMAP - read from memory map. Pure Python.
           * MODE_FILE - read database as standard file. Pure Python.
           * MODE_MEMORY - load database into memory. Pure Python.
+          * MODE_FD - the param passed via fileish is a file descriptor, not a
+             path. This mode implies MODE_MEMORY. Pure Python.
           * MODE_AUTO - try MODE_MMAP_EXT, MODE_MMAP, MODE_FILE in that order.
              Default.
 
         """
         if locales is None:
             locales = ['en']
-        self._db_reader = maxminddb.open_database(filename, mode)
+        self._db_reader = maxminddb.open_database(fileish, mode)
         self._locales = locales
 
     def __enter__(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/geoip2.egg-info/PKG-INFO 
new/geoip2-2.9.0/geoip2.egg-info/PKG-INFO
--- old/geoip2-2.8.0/geoip2.egg-info/PKG-INFO   2018-04-10 17:17:57.000000000 
+0200
+++ new/geoip2-2.9.0/geoip2.egg-info/PKG-INFO   2018-05-25 22:10:02.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: geoip2
-Version: 2.8.0
+Version: 2.9.0
 Summary: MaxMind GeoIP2 API
 Home-page: http://www.maxmind.com/
 Author: Gregory Oschwald
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/geoip2.egg-info/requires.txt 
new/geoip2-2.9.0/geoip2.egg-info/requires.txt
--- old/geoip2-2.8.0/geoip2.egg-info/requires.txt       2018-04-10 
17:17:57.000000000 +0200
+++ new/geoip2-2.9.0/geoip2.egg-info/requires.txt       2018-05-25 
22:10:02.000000000 +0200
@@ -1,5 +1,5 @@
 requests>=2.9
-maxminddb>=1.2.1
+maxminddb>=1.4.0
 
 [:python_version=="2.7"]
 ipaddress
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/requirements.txt 
new/geoip2-2.9.0/requirements.txt
--- old/geoip2-2.8.0/requirements.txt   2016-09-15 22:38:30.000000000 +0200
+++ new/geoip2-2.9.0/requirements.txt   2018-05-25 22:08:13.000000000 +0200
@@ -1,2 +1,2 @@
 requests>=2.9
-maxminddb>=1.2.1
+maxminddb>=1.4.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/setup.cfg new/geoip2-2.9.0/setup.cfg
--- old/geoip2-2.8.0/setup.cfg  2018-04-10 17:17:57.000000000 +0200
+++ new/geoip2-2.9.0/setup.cfg  2018-05-25 22:10:02.000000000 +0200
@@ -9,5 +9,4 @@
 [egg_info]
 tag_build = 
 tag_date = 0
-tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/geoip2-2.8.0/tests/database_test.py 
new/geoip2-2.9.0/tests/database_test.py
--- old/geoip2-2.8.0/tests/database_test.py     2018-01-18 16:54:14.000000000 
+0100
+++ new/geoip2-2.9.0/tests/database_test.py     2018-05-16 16:34:04.000000000 
+0200
@@ -216,5 +216,9 @@
     mode = geoip2.database.MODE_MEMORY
 
 
+class TestFDReader(unittest.TestCase):
+    mode = geoip2.database.MODE_FD
+
+
 class TestAutoReader(BaseTestReader, unittest.TestCase):
     mode = geoip2.database.MODE_AUTO


Reply via email to