[tor-commits] [ooni-probe/master] Remove geoip downloading from setup.py script
art at torproject.org
art at torproject.org
Sat Jan 3 15:05:13 UTC 2015
commit da919320ca780656e0369983d437d8e08470cf08
Author: Arturo Filastò <art at fuffa.org>
Date: Thu Nov 13 11:42:06 2014 +0100
Remove geoip downloading from setup.py script
---
requirements.txt | 1 +
setup.py | 115 +++++++++++++++++++++++++-----------------------------
2 files changed, 54 insertions(+), 62 deletions(-)
diff --git a/requirements.txt b/requirements.txt
index 50259ff..e28a08d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -9,3 +9,4 @@ parsley>=1.1
scapy-real>=2.2.0-dev
pypcap>=1.1
service-identity
+pydumbnet
diff --git a/setup.py b/setup.py
index aa17f85..444bcd8 100644
--- a/setup.py
+++ b/setup.py
@@ -1,76 +1,58 @@
#!/usr/bin/env python
-#-*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
from ooni import __version__, __author__
-import urllib2
import os
-import gzip
-from os.path import join as pj
import sys
-from setuptools import setup
-
-def download_geoip_files(dst):
- urls = [
- 'http://www.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz',
- 'http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz',
- 'http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz'
- ]
- if not os.path.exists(dst):
- os.makedirs(dst)
- for url in urls:
- target_gz_file = pj(dst, os.path.basename(url))
- target_file = target_gz_file.replace('.gz', '')
-
- if os.path.isfile(target_file):
- print "%s already exists. Skipping." % target_file
- continue
-
- print "Downloading %s" % url
- response = urllib2.urlopen(url)
-
- CHUNK = 4 * 1024
- with open(target_gz_file, 'w+') as f:
- while True:
- chunk = response.read(CHUNK)
- if not chunk: break
- f.write(chunk)
-
- with open(target_file, 'w+') as f:
- gf = gzip.open(target_gz_file, 'rb')
- while True:
- chunk = gf.read(CHUNK)
- if not chunk: break
- f.write(chunk)
- gf.close()
-
- os.unlink(target_gz_file)
+import tempfile
-usr_share_path = '/usr/share'
-# If this is true then it means we are in a virtualenv
-# therefore we should not place our data files inside /usr/share/ooni, but
-# place them inside the virtual env system prefix.
-if hasattr(sys, 'real_prefix'):
- usr_share_path = os.path.abspath(pj(sys.prefix, 'share'))
+from os.path import join as pj
+from setuptools import setup
+from setuptools.command.install import install as _st_install
+
+
+class install(_st_install):
+ def gen_config(self, share_path):
+ config_file = pj(tempfile.mkdtemp(), "ooniprobe.conf.sample")
+ o = open(config_file, "w+")
+ with open("data/ooniprobe.conf.sample") as f:
+ for line in f:
+ if "/usr/share" in line:
+ line = line.replace("/usr/share", share_path)
+ o.write(line)
+ o.close()
+ return config_file
+
+ def set_data_files(self, share_path):
+ for root, dirs, file_names in os.walk('data/'):
+ files = []
+ for file_name in file_names:
+ if file_name.endswith('.pyc'):
+ continue
+ elif file_name.endswith('.dat') and \
+ file_name.startswith('Geo'):
+ continue
+ elif file_name == "ooniprobe.conf.sample":
+ files.append(self.gen_config(share_path))
+ continue
+ files.append(pj(root, file_name))
+ self.distribution.data_files.append(
+ [
+ pj(share_path, 'ooni', root.replace('data/', '')),
+ files
+ ]
+ )
+
+ def run(self):
+ share_path = os.path.abspath(pj(self.prefix, 'share'))
+ self.set_data_files(share_path)
+ self.do_egg_install()
-download_geoip_files(pj(usr_share_path, 'GeoIP'))
install_requires = []
dependency_links = []
data_files = []
-
-for root, dirs, file_names in os.walk('data/'):
- files = []
- for file_name in file_names:
- if file_name.endswith('.pyc'):
- continue
- elif file_name.endswith('.dat') and \
- file_name.startswith('Geo'):
- continue
- files.append(pj(root, file_name))
- data_files.append([pj(usr_share_path, 'ooni', root.replace('data/', '')), files])
-
-
-packages=[
+packages = [
'ooni',
'ooni.api',
'ooni.deckgen',
@@ -120,6 +102,7 @@ setup(
"bin/oonireport", "bin/ooniresources"],
dependency_links=dependency_links,
install_requires=install_requires,
+ cmdclass={"install": install},
classifiers=(
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
@@ -155,3 +138,11 @@ setup(
"Topic :: System :: Networking :: Monitoring",
)
)
+
+from subprocess import Popen, PIPE
+process = Popen(['ooniresources', '--update-inputs', '--update-geoip'],
+ stdout=PIPE, stderr=PIPE)
+while process.poll() is None:
+ out = process.stdout.read()
+ sys.stdout.write(out)
+ sys.stdout.flush()
More information about the tor-commits
mailing list