Unverified Commit 380820ff authored by Isis Lovecruft's avatar Isis Lovecruft
Browse files

Merge branch 'release-0.1.0'

parents 0be47e06 38af253f
[run]
source =
bridgedb
lib/bridgedb/test/test_*
branch = True
#parallel = True
timid = True
[report]
modules = bridgedb
omit =
*/test*
*/_langs*
*/_version*
bridgedb/Tests.py
# Regexes for lines to exclude from report generation:
exclude_lines =
pragma: no cover
# don't complain if the code doesn't hit unimplemented sections:
raise NotImplementedError
# don't complain if non-runnable or debuging code isn't run:
if 0:
if False:
if self[.verbosity.]
if options[.verbosity.]
def __repr__
if __name__ == .__main__.:
# Ignore source code which cannot be found:
ignore_errors = True
# Exit with status code 2 if under this percentage is covered:
fail_under = 10
[html]
directory = doc/coverage-html
......@@ -21,6 +21,7 @@ MANIFEST
# Installer logs
pip-log.txt
pip-install.log
installed-files.txt
# Unit test / coverage reports
......@@ -28,6 +29,7 @@ installed-files.txt
.tox
*.prof
nosetests.xml
doc/coverage-html/*
# Translations
*.mo
......@@ -68,9 +70,9 @@ bridgedb.pid
run/*
# logs
*/bridgedb*.log
*/assignments.log
*/bridgedist.log
*bridgedb.log*
*assignments.log
*bridgedist.log
*bridge-descriptors*
*cached-descriptors*
......@@ -78,3 +80,21 @@ run/*
*networkstatus-bridges
*blocked-bridges
*extra-infos
# do not recommit lib/bridgedb/_langs.py:
# (the "supported" variable is supposed to be rewritten at install time)
lib/bridgedb/_langs.py
# ignore any changes to our GnuPG directory:
gnupghome/*
# ignore persistent state files
*bridgedb.state*
# ignore coverage results files:
.coverage
.coverage.*
# trial test run directory:
_trial_temp/*
_trial_temp.lock
[MASTER]
# Specify a configuration file.
#rcfile=./.pylintrc
# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
init-hook="import sys,os;a=os.getcwd();print a;sys.path.insert(0, os.path.join(a, 'lib'));"
# Profiled execution.
profile=no
# Add files or directories to the blacklist. They should be base names, not
# paths.
ignore=CVS,test,templates
# Pickle collected data for later comparisons.
persistent=yes
# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
[MESSAGES CONTROL]
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time.
#enable=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
#disable=
[REPORTS]
# Set the output format. Available formats are text, parseable, colorized, msvs
# (visual studio) and html
output-format=text
# Include message's id in output
include-ids=yes
# Put messages in a separate file for each module / package specified on the
# command line instead of printing them on stdout. Reports (if any) will be
# written in a file name "pylint_global.[txt|html]".
files-output=no
# Tells whether to display a full report or only the messages
reports=yes
# Python expression which should return a note less than 10 (10 is the highest
# note). You have access to the variables errors warning, statement which
# respectively contain the number of errors / warnings messages and the total
# number of statements analyzed. This is used by the global evaluation report
# (RP0004).
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
# Add a comment according to your evaluation note. This is used by the global
# evaluation report (RP0004).
comment=no
[BASIC]
# Required attributes for module, separated by a comma
required-attributes=
# List of builtins function names that should not be used, separated by a comma
bad-functions=map,filter,apply,input
# Regular expression which should only match correct module names
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
# Regular expression which should only match correct module level names
const-rgx=(([a-zA-Z0-9_]*)|(__.*__))$
# Regular expression which should only match correct class names
class-rgx=[A-Z_][a-zA-Z0-9]+$
# Regular expression which should only match correct function names
function-rgx=[a-z_][a-zA-Z0-9_]{1,30}$
# Regular expression which should only match correct method names
method-rgx=[a-z_][a-zA-Z0-9_]{1,30}$
# Regular expression which should only match correct instance attribute names
attr-rgx=[a-z_][a-zA-Z0-9_]{1,30}$
# Regular expression which should only match correct argument names
argument-rgx=[a-z_][a-zA-Z0-9_]{1,30}$
# Regular expression which should only match correct variable names
variable-rgx=[a-z_][a-zA-Z0-9_]{1,30}$
# Regular expression which should only match correct list comprehension /
# generator expression variable names
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_,err,exc,func,fn,fh
# Bad variable names which should always be refused, separated by a comma
bad-names=foo,bar,baz,toto,tutu,tata
# Regular expression which should only match functions or classes name which do
# not require a docstring
no-docstring-rgx=__.*__
[FORMAT]
# Maximum number of characters on a single line.
max-line-length=79
# Maximum number of lines in a module
max-module-lines=1500
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
[SIMILARITIES]
# Minimum lines number of a similarity.
min-similarity-lines=4
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
[TYPECHECK]
# Tells whether missing members accessed in mixin class should be ignored. A
# mixin class is detected if its name ends with "mixin" (case insensitive).
ignore-mixin-members=yes
# List of classes names for which member attributes should not be checked
# (useful for classes with attributes dynamically set).
ignored-classes=SQLObject
# When zope mode is activated, add a predefined set of Zope acquired attributes
# to generated-members.
zope=yes
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E0201 when accessed. Python regular
# expressions are accepted.
generated-members=REQUEST,acl_users,aq_parent
[VARIABLES]
# Tells whether we should check for unused import in __init__ files.
init-import=yes
# A regular expression matching the beginning of the name of dummy variables
# (i.e. not used).
dummy-variables-rgx=_|dummy
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid to define new builtins when possible.
additional-builtins=
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,XXX,DOC
[IMPORTS]
# Deprecated modules which should not be used, separated by a comma
deprecated-modules=regsub,string,TERMIOS,Bastion,rexec,sha
# Create a graph of every (i.e. internal and external) dependencies in the
# given file (report RP0402 must not be disabled)
#import-graph=pylint-import-graph.plain
# Create a graph of external dependencies in the given file (report RP0402 must
# not be disabled)
ext-import-graph=
# Create a graph of internal dependencies in the given file (report RP0402 must
# not be disabled)
int-import-graph=
[CLASSES]
# List of interface methods to ignore, separated by a comma. This is used for
# instance to not check methods defines in Zope's Interface base class.
ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,__new__,setUp
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
[DESIGN]
# Maximum number of arguments for function / method
max-args=9
# Argument names that match this expression will be ignored. Default to name
# with leading underscore
ignored-argument-names=_.*
# Maximum number of locals for function / method body
max-locals=15
# Maximum number of return / yield for function / method body
max-returns=6
# Maximum number of branch for function / method body
max-branchs=12
# Maximum number of statements in function / method body
max-statements=50
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of attributes for a class (see R0902).
max-attributes=7
# Minimum number of public methods for a class (see R0903).
min-public-methods=2
# Maximum number of public methods for a class (see R0904).
max-public-methods=20
[EXCEPTIONS]
# Exceptions that will emit a warning when being caught. Defaults to
# "Exception"
overgeneral-exceptions=Exception
language: python
notifications:
irc:
channels:
- "irc.oftc.net#tor-bots"
on_success: always
on_failure: always
#use_notice: true
template:
- "%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message}"
- "Build details : %{build_url}"
email:
recipients:
- isis@torproject.org
on_success: never
on_failure: change
before_install:
- sudo apt-get update
# Distro development header/library/resource/buildtime dependencies
- sudo apt-get install --no-install-suggests --no-install-recommends build-essential openssl sqlite3 libgpgme11 libgpgme11-dev libgeoip-dev geoip-database
# Distro python dependencies
- sudo apt-get install --no-install-suggests --no-install-recommends python-dev python-setuptools
python:
- "2.6"
- "2.7"
install:
- pip install -r requirements.txt --use-mirrors
- pip install coverage==3.7 coveralls==0.3 sure==1.2.2 --use-mirrors
- make install
before_script:
- bridgedb mock -n 250
script:
- coverage run $(which trial) ./lib/bridgedb/test/test_*.py
- coverage report
after_success:
- coveralls
- cat bridgedb.log
BridgeDB is distributed under this license:
BridgeDB, a Tor bridge relay distribution system, is distributed under the
3-clause BSD license:
Copyright (c) 2007-2009, The Tor Project, Inc.
Copyright (c) 2007-2013, The Tor Project, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
......
.PHONY: install test
.DEFAULT: install test
all:
python setup.py build
......@@ -7,9 +8,37 @@ all:
test:
python setup.py test
pep8:
find lib/bridgedb/*.py | xargs pep8
pylint:
pylint --rcfile=./.pylintrc ./lib/bridgedb/
pyflakes:
pyflakes lib/bridgedb/
install:
-python setup.py compile_catalog
python setup.py install --record installed-files.txt
force-install:
-python setup.py compile_catalog
python setup.py install --force --record installed-files.txt
uninstall:
touch installed-files.txt
cat installed-files.txt | xargs rm -rf
reinstall: uninstall force-install
translations:
./maint/get-completed-translations
clean:
-rm -rf build
-rm -rf dist
-rm -rf lib/bridgedb.egg-info
-rm -rf _trial_temp
coverage:
-coverage run $(which trial) ./lib/bridgedb/test/test_* && coverage report && coverage html
## BridgeDB
## BridgeDB [![Coverage Status](https://coveralls.io/repos/isislovecruft/bridgedb/badge.png)](https://coveralls.io/r/isislovecruft/bridgedb)
-----------
BridgeDB is a collection of backend servers used to distribute
......@@ -38,71 +38,75 @@ as instructions for getting extra Bridges.
### Dependencies and installation
BridgeDB requires the following OS-level dependencies:
- Python>=2.6
- python>=2.7
- python-dev
- build-essential
- libgpgme11
- libgpgme11-dev
- OpenSSL>=1.0.1e
- [SQLite3](http://www.maxmind.com/app/python)
- [MaxMind GeoIP](https://www.maxmind.com/en/geolocation_landing)
- libgeoip-dev
- geoip-database
- [python-setuptools](https://pypi.python.org/pypi/setuptools)
As well as the following Python dependencies (from ./requirements.txt):
As well as any Python dependencies in requirements.txt.
Babel==0.9.6
BeautifulSoup==3.2.1
Mako==0.8.1
MarkupSafe==0.18
Twisted>=13.0.0
argparse>=1.2.1
distribute>=0.6.46
ipaddr>=2.1.10
pyOpenSSL>=0.13
pygeoip>=0.2.6
pygpgme==0.3
recaptcha>=1.0rc1
recaptcha-client>=1.0.6
wsgiref>=0.1.2
zope.interface>=4.0.5
### Deploying BridgeDB
### Deploying BridgeDB in a Python virtualenv
BridgeDB should work with or without a Python virtualenv.
- Install Python 2.6 or later, and other OS-level dependencies. On Debian,
you can do:
- Install Python 2.7, and other OS-level dependencies. On Debian, you can do:
sudo apt-get install python openssl sqlite3 tor-geoip
sudo apt-get install build-essential openssl python python-dev \
python-setuptools sqlite3 libgpgme11 libgpgme11-dev libgeoip-dev \
geoip-database
- Install Pip 1.3.1 or later. Debian sid has this version, but if you're
tracking a different release, the easiest way to install a newer Pip is to
use the Pip development teams's
[getpip script](https://raw.github.com/pypa/pip/master/contrib/get-pip.py):
- Install Pip 1.3.1 or later. Debian has this version, but if for some reason
that or a newer version isn't available, the easiest way to install a newer
Pip is to use the Pip development teams's [getpip
script](https://raw.github.com/pypa/pip/master/contrib/get-pip.py):
wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
sudo python get-pip.py
wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
sudo python get-pip.py
- Use Pip to install virtualenv and [virtualenvwrapper](https://virtualenvwrapper.readthedocs.org):
- (virtualenv installs only) Use Pip to install virtualenv and
[virtualenvwrapper](https://virtualenvwrapper.readthedocs.org):
sudo pip install --upgrade virtualenv virtualenvwrapper
sudo pip install --upgrade virtualenv virtualenvwrapper
- Configure virtualenvwrapper and create a virtualenv for Bridgedb:
- (virtualenv installs only) Configure virtualenvwrapper and create a
virtualenv for Bridgedb:
WORKON_HOME=${HOME}/.virtualenvs
export WORKON_HOME
mkdir -p $WORKON_HOME
source $(which virtualenvwrapper.sh)
git clone https://git.torproject.org/bridgedb.git && cd bridgedb
mkvirtualenv -a $PWD -r requirements.txt --unzip-setuptools \
WORKON_HOME=${HOME}/.virtualenvs
export WORKON_HOME
mkdir -p $WORKON_HOME
source $(which virtualenvwrapper.sh)
git clone https://git.torproject.org/bridgedb.git && cd bridgedb
mkvirtualenv -a $PWD -r requirements.txt --unzip-setuptools \
--setuptools bridgedb
From now on, to use BridgeDB's virtualenv, just do ```$ workon bridgedb```
(after sourcing virtualenvwrapper.sh, as before). To exit the virtualenv
without exiting the shell, do ```$ deactivate```.
- To run unit tests:
- (virtualenv installs only) To install, set PYTHONPATH to include the root
directory of the virtualenv:
python setup.py test
export PYTHONPATH=$PYTHONPATH:${VIRTUAL_ENV}/lib/python2.7/site-packages
- To install BridgeDB:
- Then proceed as usual:
python setup.py install
python setup.py install --record installed-files.txt
### Testing BridgeDB
To create a bunch of fake bridge descriptors to test BridgeDB, do:
bridgedb mock [-n NUMBER_OF_DESCRIPTORS]
Then to run unittests, see the ```bridgedb test``` and ```bridgedb trial```
commands.
### Enabling additional features:
......@@ -111,33 +115,10 @@ As well as the following Python dependencies (from ./requirements.txt):
**Using New Translations**: This should be done when newly completed
translations are available in Transifex.
Clone/Update the
[translations repository](https://gitweb.torproject.org/translation.git),
checkout the ```bridgedb_completed``` branch, and copy the .po files into
```lib/bridgedb/i18n/```.
Assuming a side-by-side repo layout (if you're in the parent directory of the
bridgedb repo):
git clone https://gitweb.torproject.org/translation.git
git fetch --all
cd translation && git checkout bridgedb_completed
cd .. && rsync -PCAXrv \
--filter 'include ./translation/*/LC_MESSAGES/bridgedb.po' \
--filter 'exclude .gitignore' \
./translation/ ./bridgedb/lib/bridgedb/i18n/
and then convert them to binary (.mo) format so that they can be installed:
cd bridgedb && python setup.py compile_catalog
Don't forget to reinstall BridgeDB to update the templates!
python setup.py install
[xxx outdated, these commands seem to not exist...]
python setup.py trans && python setup.py install_data
Piece of cake. Running ```maint/get-completed-translations``` will take care
of cloning *only* the ```bridgedb_completed``` branch of Tor's
[translations repo](https://gitweb.torproject.org/translation.git) and placing
all the updated files in their correct locations.
**Requesting Translations for Altered/Added Source Code**: This should be done
whenever any of the strings requiring translation -- _("they are formatted
......@@ -172,7 +153,7 @@ complete, the finished .po files should be placed into the
#### Enabling HTTPS
Create a self-signed certificate with:
openssl req -x509 -new -nodes > cert
maint/make-ssl-cert
Or, place an existing certificate in the path specified in bridgedb.conf by
the ```HTTPS_CERT_FILE``` option, and a private key where ```HTTPS_KEY_FILE```
......@@ -222,12 +203,13 @@ Enter the following commands at the ```sqlite>``` prompt:
## Running BridgeDB
To run BridgeDB, simply make any necessary changes to bridgedb.conf, and do:
bridgedb -c bridgedb.conf
To run BridgeDB, simply make any necessary changes to bridgedb.conf, and
do: ```bridgedb```.
When you have new lists of bridges, replace the old files and do:
When you have new lists of bridges, replace the old files and send the process
a SIGHUP.
bridgedb --reload
Make sure that the files and directories referred to in bridgedb.conf
exist. However, many of them, if not found, will be touched on disk so that
......@@ -245,7 +227,7 @@ foobar-2010-07-17.brdgs. The first file would contain 10 bridges from
BridgeDB's 'unallocated' pool. The second file would contain 15 bridges from
the same pool and the third one similarly 3 bridges. These files can then be
handed out to trusted parties via mail or fed to other distribution mechanisms
such as twitter.
such as Twitter.
#### To use with HTTPS:
Just connect to the appropriate port.
......
# -*- mode: python ; coding: utf-8 -*-
#
# +---------------+
# | bridgedb.conf |
# +---------------+
#
# This file uses Python syntax, and is sourced as if it were a .py file. Just
# pretend you're writing Python, and everything will be peachy keen.
#______________________________________________________________________________
#
# This file is part of BridgeDB, a Tor bridge distribution system.
#
# :copyright: (c) 2007-2013, The Tor Project, Inc.
# (c) 2007-2013, all sentient entities within the AUTHORS file
# :license: see LICENSE for licensing information
#______________________________________________________________________________
#===========================#
# General-purpose options #
#___________________________#
#----------------
# Required Files \ You'll want to make sure that these ones exist!
#------------------------------------------------------------------------------
#
# All filenames are taken as relative to the RUNTIME directory, which is the
# current working directory when you call the ``bridgedb`` script, or you may
# specify a particular RUNTIME directory by doing:
#
# $ bridgedb -r /path/to/some/nice/place
#
# Obviously, this config file should live in that directory, so that BridgeDB
# can read it.
#------------------------------------------------------------------------------