[tor-commits] [gettor/master] Dropbox script to generate links (integrated with Core)
ilv at torproject.org
ilv at torproject.org
Tue Sep 22 23:39:11 UTC 2015
commit 83e520dc33f7059cb15eeeb91aaa430f61b27801
Author: ilv <ilv at users.noreply.github.com>
Date: Fri Jun 20 21:26:17 2014 -0400
Dropbox script to generate links (integrated with Core)
---
src/dropbox.py | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 118 insertions(+)
diff --git a/src/dropbox.py b/src/dropbox.py
new file mode 100644
index 0000000..e6612a9
--- /dev/null
+++ b/src/dropbox.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+import re
+import os
+import dropbox
+import gettor
+
+
+def valid_bundle_format(file):
+ """
+ Checks for a valid bundle format
+ (e.g. tor-browser-linux32-3.6.2_es-ES.tar.xz
+
+ Returns True or False if it's valid or not.
+ """
+
+ m = re.search(
+ 'tor-browser-(\w+)\d\d-\d\.\d\.\d_(\w\w)-\w+\.tar\.xz',
+ file)
+ if m:
+ return True
+ else:
+ return False
+
+
+def get_bundle_info(file):
+ """
+ Get the operating system and locale from a bundle string.
+
+ it raises a ValueError if the bundle doesn't have a valid format
+ (although you should probably call valid_bundle_format first).
+ It returns the pair of strings operating system, locale.
+ """
+ m = re.search(
+ 'tor-browser-(\w+)\d\d-\d\.\d\.\d_(\w\w)-\w+\.tar\.xz',
+ file)
+ if m:
+ operating_system = m.group(1)
+ locale = m.group(2)
+ return operating_system, locale
+ else:
+ raise ValueError("Bundle invalid format %s" % file)
+
+
+def upload_files(basedir, client):
+ """
+ Upload files from 'basedir' to Dropbox.
+
+ It looks for files ending with 'tar.xz' inside 'basedir'. It
+ raises ValueError in case the given file doesn't have a .asc file.
+ It raises UploadError if something goes wrong while uploading the
+ files to Dropbox. All files are uploaded to '/'.
+
+ Returns a list with the names of the uploaded files.
+ """
+ files = []
+
+ p = re.compile('.*\.tar.xz$')
+
+ for name in os.listdir(basedir):
+ path = os.path.abspath(os.path.join(basedir, name))
+ if os.path.isfile(path)
+ and p.match(path)
+ and valid_bundle_format(name):
+ files.append(name)
+
+ for file in files:
+ asc = file + '.asc'
+ abs_file = os.path.abspath(os.path.join(basedir, file))
+ abs_asc = os.path.abspath(os.path.join(basedir, asc))
+
+ if not os.path.isfile(abs_asc):
+ raise ValueError("%s doesn't exist!" % asc)
+
+ # Chunk upload for big files
+ to_upload = open(abs_file, 'rb')
+ size = os.path.getsize(abs_file)
+ uploader = client.get_chunked_uploader(to_upload, size)
+ while uploader.offset < size:
+ try:
+ upload = uploader.upload_chunked()
+ except rest.ErrorResponse, e:
+ UploadError("An error ocurred while uploading %s" % abs_file)
+ uploader.finish(file)
+
+ # This should be small, upload it simple
+ to_upload_asc = open(abs_asc, 'rb')
+ response = client.put_file(asc, to_upload_asc)
+
+ return files
+
+# Test app for now
+app_key = ''
+app_secret = ''
+access_token = ''
+# Should we use a dropbox.cfg?
+upload_dir = 'upload/'
+
+client = dropbox.client.DropboxClient(access_token)
+
+try:
+ uploaded_files = upload_files(upload_dir, client)
+ # Fingerprint generation pending...
+ fingerprint = '111-222-333-444'
+ core = gettor.Core('gettor.cfg')
+ # Erase the old links file
+ core.create_links_file('Dropbox')
+
+ for file in uploaded_files:
+ asc = file + '.asc'
+ link_file = client.share(file)
+ link_asc = client.share(asc)
+ link = link_file[u'url'] + ' ' + link_asc[u'url'] + ' ' + fingerprint
+ operating_system, locale = get_bundle_info(file)
+ core.add_link('Dropbox', operating_system, locale, link)
+except (ValueError, RuntimeError) as e:
+ print str(e)
+except dropbox.rest.ErrorResponse as e:
+ print str(e)
More information about the tor-commits
mailing list