Commit 217ddde4 authored by quota_atypique's avatar quota_atypique

First commit

parents
PY?=python
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
FTP_HOST=localhost
FTP_USER=anonymous
FTP_TARGET_DIR=/
SSH_HOST=localhost
SSH_PORT=22
SSH_USER=quota
SSH_TARGET_DIR=/var/www
S3_BUCKET=my_s3_bucket
CLOUDFILES_USERNAME=my_rackspace_username
CLOUDFILES_API_KEY=my_rackspace_api_key
CLOUDFILES_CONTAINER=my_cloudfiles_container
DROPBOX_DIR=~/Dropbox/Public/
GITHUB_PAGES_BRANCH=gh-pages
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make devserver [PORT=8000] start/restart develop_server.sh '
@echo ' make stopserver stop local server '
@echo ' make ssh_upload upload the web site via SSH '
@echo ' make rsync_upload upload the web site via rsync+ssh '
@echo ' make dropbox_upload upload the web site via Dropbox '
@echo ' make ftp_upload upload the web site via FTP '
@echo ' make s3_upload upload the web site via S3 '
@echo ' make cf_upload upload the web site via Cloud Files'
@echo ' make github upload the web site via gh-pages '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html'
@echo ' '
html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
clean:
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
serve:
ifdef PORT
cd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)
else
cd $(OUTPUTDIR) && $(PY) -m pelican.server
endif
devserver:
ifdef PORT
$(BASEDIR)/develop_server.sh restart $(PORT)
else
$(BASEDIR)/develop_server.sh restart
endif
stopserver:
kill -9 `cat pelican.pid`
kill -9 `cat srv.pid`
@echo 'Stopped Pelican and SimpleHTTPServer processes running in background.'
publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
ssh_upload: publish
scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)
rsync_upload: publish
rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
dropbox_upload: publish
cp -r $(OUTPUTDIR)/* $(DROPBOX_DIR)
ftp_upload: publish
lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"
s3_upload: publish
s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed --guess-mime-type
cf_upload: publish
cd $(OUTPUTDIR) && swift -v -A https://auth.api.rackspacecloud.com/v1.0 -U $(CLOUDFILES_USERNAME) -K $(CLOUDFILES_API_KEY) upload -c $(CLOUDFILES_CONTAINER) .
github: publish
ghp-import -m "Generate Pelican site" -b $(GITHUB_PAGES_BRANCH) $(OUTPUTDIR)
git push origin $(GITHUB_PAGES_BRANCH)
.PHONY: html help clean regenerate serve devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github
Title: Hello world !
Date: 2015-01-01 10:20
Category: News
Hello there ! We have now a brand new blog using Pelican.
Title: What is Memopol ?
Date: 2015-01-01 10:20
Pin: true
Political Memory is a tool designed by La Quadrature du Net to help European citizens to reach members of European Parliament (MEPs) and track their voting records on issues related to fundamental freedoms online.
Title: About Memopol
Political Memory is a toolbox designed to help citizens follow the activity and voting records of their Members of European Parliament (MEPs), and to help them influence decision and policy-making by making as easy as possible to contact their MEPs.
The idea is simple: many decisions made in the European Parliament (and in national parliaments) are made knowing most citizens will not know about them. By increasing scrutiny of MEPs’ decisions, we can raise the political cost of these decisions and put citizens back at the heart of policy-making.
Political Memory aims to make this as simple as possible by giving citizens an easy-to-use interface to visualize their representatives’ votes, written questions, and general decisions, follow their representatives over time, and by giving them a way of quickly getting in touch with MEPs by listing all useful contact information in one place.
More specifically, Political Memory is a piece of software that can be used by anybody to create a website to track their Members of Parliament on any topic they wish, and remember what they said and what they did, as well as score MPs according to chosen criteria.
It is web application, written using the Django Python Framework, designed to be easily deployed on your website.
This project, nicknamed Memopol 2, is the 2.0 version of the 1.0 Political Memory tool written by La Quadrature du Net in Perl in the early days of net activism.
Political Memory is free software (licensed under the Affero GPL license) that anybody can use, share, study, contribute to, debug, translate etc.
Go to the <a href="/pages/download-install-instructions.html">download page</a> to download political memory, or go to our instance at http://go.memopol.org to see it action.
Title: Contact
You can contact us on irc: #lqdn-memopol on irc.freenode.net.
There is a mailing list, too, feel free to suscribe and share : <a href="https://lists.laquadrature.net/cgi-bin/mailman/listinfo/mempol2">suscribe here</a>
Title: Contribute
# Where is the code ?
All the code is <a href="https://gitorious.org/memopol2-0">here</a> !
We also have a <a href="https://github.com/political-memory">Github</a> page.
# How can I help ?
Help us improving Memopol and contribute to the code ! It's Python, and Django.
You can also report a bug <a href="https://projets.lqdn.fr/projects/mempol/issues/new">here</a>, also.
# Roadmap
## Two goals
* We want people to help : so let's ease the documentation/installation part
* Separate more core/modules : we want other ngos to use memopol, not just us
## Basic features for /core :
* Up to date data toolchain using django-representatives (compotista) and toutatis (for votes)
* Interface for owner of the instance to search for votes, then add voting recommendations on it with preview
* 3 points of view on the data:
- by voting recommendations
- by country/groups/politicals parties
- by individuals
(we concluded that this was the 3 way you'll want to look at those data)
Already having all of that would be a very good start and a lot of work
## What we have now :
- nearly nothing
## Needs we can draw from this :
- nearly everything
Title: Download & Install instructions
To download Political Memory,
As of today, you have to clone our git code on our <a href="http://gitorious.org/memopol2-0">gitorious repository</a>.
For short:
`git clone git://gitorious.org/memopol2-0/memopol2-0.git`
Then follow the instructions in the doc/SETUP.txt.
#!/usr/bin/env bash
##
# This section should match your Makefile
##
PY=${PY:-python}
PELICAN=${PELICAN:-pelican}
PELICANOPTS=
BASEDIR=$(pwd)
INPUTDIR=$BASEDIR/content
OUTPUTDIR=$BASEDIR/output
CONFFILE=$BASEDIR/pelicanconf.py
###
# Don't change stuff below here unless you are sure
###
SRV_PID=$BASEDIR/srv.pid
PELICAN_PID=$BASEDIR/pelican.pid
function usage(){
echo "usage: $0 (stop) (start) (restart) [port]"
echo "This starts Pelican in debug and reload mode and then launches"
echo "an HTTP server to help site development. It doesn't read"
echo "your Pelican settings, so if you edit any paths in your Makefile"
echo "you will need to edit your settings as well."
exit 3
}
function alive() {
kill -0 $1 >/dev/null 2>&1
}
function shut_down(){
PID=$(cat $SRV_PID)
if [[ $? -eq 0 ]]; then
if alive $PID; then
echo "Stopping HTTP server"
kill $PID
else
echo "Stale PID, deleting"
fi
rm $SRV_PID
else
echo "HTTP server PIDFile not found"
fi
PID=$(cat $PELICAN_PID)
if [[ $? -eq 0 ]]; then
if alive $PID; then
echo "Killing Pelican"
kill $PID
else
echo "Stale PID, deleting"
fi
rm $PELICAN_PID
else
echo "Pelican PIDFile not found"
fi
}
function start_up(){
local port=$1
echo "Starting up Pelican and HTTP server"
shift
$PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS &
pelican_pid=$!
echo $pelican_pid > $PELICAN_PID
cd $OUTPUTDIR
$PY -m pelican.server $port &
srv_pid=$!
echo $srv_pid > $SRV_PID
cd $BASEDIR
sleep 1
if ! alive $pelican_pid ; then
echo "Pelican didn't start. Is the Pelican package installed?"
return 1
elif ! alive $srv_pid ; then
echo "The HTTP server didn't start. Is there another service using port" $port "?"
return 1
fi
echo 'Pelican and HTTP server processes now running in background.'
}
###
# MAIN
###
[[ ($# -eq 0) || ($# -gt 2) ]] && usage
port=''
[[ $# -eq 2 ]] && port=$2
if [[ $1 == "stop" ]]; then
shut_down
elif [[ $1 == "restart" ]]; then
shut_down
start_up $port
elif [[ $1 == "start" ]]; then
if ! start_up $port; then
shut_down
fi
else
usage
fi
from fabric.api import *
import fabric.contrib.project as project
import os
import sys
import SimpleHTTPServer
import SocketServer
# Local path configuration (can be absolute or relative to fabfile)
env.deploy_path = 'output'
DEPLOY_PATH = env.deploy_path
# Remote server configuration
production = 'quota@localhost:22'
dest_path = '/var/www'
# Rackspace Cloud Files configuration settings
env.cloudfiles_username = 'my_rackspace_username'
env.cloudfiles_api_key = 'my_rackspace_api_key'
env.cloudfiles_container = 'my_cloudfiles_container'
def clean():
if os.path.isdir(DEPLOY_PATH):
local('rm -rf {deploy_path}'.format(**env))
local('mkdir {deploy_path}'.format(**env))
def build():
local('pelican -s pelicanconf.py')
def rebuild():
clean()
build()
def regenerate():
local('pelican -r -s pelicanconf.py')
def serve():
os.chdir(env.deploy_path)
PORT = 8000
class AddressReuseTCPServer(SocketServer.TCPServer):
allow_reuse_address = True
server = AddressReuseTCPServer(('', PORT), SimpleHTTPServer.SimpleHTTPRequestHandler)
sys.stderr.write('Serving on port {0} ...\n'.format(PORT))
server.serve_forever()
def reserve():
build()
serve()
def preview():
local('pelican -s publishconf.py')
def cf_upload():
rebuild()
local('cd {deploy_path} && '
'swift -v -A https://auth.api.rackspacecloud.com/v1.0 '
'-U {cloudfiles_username} '
'-K {cloudfiles_api_key} '
'upload -c {cloudfiles_container} .'.format(**env))
@hosts(production)
def publish():
local('pelican -s publishconf.py')
project.rsync_project(
remote_dir=dest_path,
exclude=".DS_Store",
local_dir=DEPLOY_PATH.rstrip('/') + '/',
delete=True,
extra_opts='-c',
)
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Memopol Project</title>
<meta name="description" content="">
<meta name="author" content="Memopol Team">
<link rel="stylesheet" href="/theme/css/foundation.css" />
<link rel="stylesheet" href="/theme/css/pygment/monokai.css" />
<link rel="stylesheet" href="/theme/css/foundation-icons.css" />
<link rel="stylesheet" href="/theme/css/custom.css" />
<script src="/theme/js/modernizr.js"></script>
<!-- Feeds -->
<!-- mathjax config similar to math.stackexchange -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$', '$'] ],
displayMath: [ ['$$', '$$']],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
},
messageStyle: "none",
"HTML-CSS": { preferredFont: "TeX", availableFonts: ["STIX","TeX"] }
});
</script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
</head>
<body>
<div class="off-canvas-wrap">
<div class="inner-wrap">
<!-- mobile top bar to activate nav -->
<nav class="tab-bar show-for-small">
<section class="left-small">
<a class="left-off-canvas-toggle menu-icon" ><span></span></a>
</section>
<section class="middle tab-bar-section">
<h1 class="title">Memopol&nbsp;Project</h1>
</section>
</nav>
<!-- mobile side bar nav -->
<aside class="left-off-canvas-menu">
<ul class="off-canvas-list">
<li><a href="">Home</a></li>
<li><label>Categories</label></li>
<li ><a href="/category/misc.html">misc</a></li>
<li ><a href="/category/news.html">News</a></li>
<li><label>Places</label></li>
<li><a href="https://www.laquadrature.net">La Quadrature du Net</a></li>
<li><a href="https://memopol.lqdn.fr/">LQDN's Memopol Instance</a></li>
<li><label>Links</label></li>
<li><a href="https://twitter.com/memopol2">Twitter</a></li>
</ul>
</aside>
<!-- top bar nav -->
<nav class="top-bar hide-for-small-only" data-topbar>
<img src="/theme/img/logo.png"/>
<ul class="title-area">
<li class="name">
<h1><a href="/">Memopol Project</a></h1><br/>
<span class="slogan">Bridging the gap between politics and citizens</span>
</li>
</ul>
<section class="top-bar-section">
<ul class="left">
<li><a href="/pages/about-memopol.html">About</a></li>
<li><a href="/category/news.html">News</a></li>
<li><a href="/pages/contribute.html">Contribute</a></li>
<li><a href="/pages/download-install-instructions.html">Download & install</a></li>
<li><a href="/pages/contact.html">Contact</a></li>
</ul>
</section>
</nav>
<!-- Main Page Content and Sidebar -->
<section class="main-section">
<div class="row">
<!-- Main Content -->
<div class="medium-9 small-12 columns" role="content">
<div class="row">
<div class="small-12 columns">
<h2>Archives</h2>
</div>
</div>
<div class="row">
<div class="small-10 columns small-centered">
<div class="row archive-year">
<div class="small-2 columns text-right">
<h3>2015</h3>
</div>
</div>
<div class="row archive-entry">
<div class="small-2 columns text-right">
<h5>janv. 01</h5>
</div>
<div class="small-10 columns">
<h5><a href="/hello-world.html">Hello world !</a></h5>
</div>
</div>
<div class="row archive-entry">
<div class="small-2 columns text-right">
<h5>janv. 01</h5>
</div>
<div class="small-10 columns">
<h5><a href="/what-is-memopol.html">What is Memopol ?</a></h5>
</div>
</div>
</div>
</div>
</div>
<!-- End Main Content -->
<!-- Sidebar -->
<aside class="medium-3 hide-for-small-only columns">
<div class="panel">
<h5>Memopol is used by</h5>
<ul class="side-nav">
<li><a href="https://www.laquadrature.net">La Quadrature du Net</a></li>
<li><a href="https://memopol.lqdn.fr/">LQDN's Memopol Instance</a></li>
</ul>
</div>
<div class="panel">
<h5>Follow us</h5>
<ul class="side-nav">
<li><a href="https://twitter.com/memopol2">Twitter</a></li>
</ul>
</div>
</aside>
<!-- End Sidebar -->
</div>
<!-- Footer -->
<footer class="row">
<div class="medium-9 small-12">
<hr/>
<p class="text-center">Powered by <a href="http://getpelican.com">Pelican</a> and <a href="http://foundation.zurb.com/">Zurb Foundation</a>. Theme inspired by <a href="http://hamaluik.com">Kenton Hamaluik</a>.</p>
</div>
</footer>
<!-- End Footer -->
</section>
<a class="exit-off-canvas"></a>
</div><!--off-canvas inner-->
</div><!--off-canvas wrap-->
<script src="/theme/js/jquery.js"></script>
<script src="/theme/js/foundation.min.js"></script>
<script>
$(document).foundation();
</script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Memopol Project</title>
<meta name="description" content="">
<meta name="author" content="Memopol Team">
<link rel="stylesheet" href="/theme/css/foundation.css" />
<link rel="stylesheet" href="/theme/css/pygment/monokai.css" />
<link rel="stylesheet" href="/theme/css/foundation-icons.css" />
<link rel="stylesheet" href="/theme/css/custom.css" />
<script src="/theme/js/modernizr.js"></script>
<!-- Feeds -->
<!-- mathjax config similar to math.stackexchange -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$', '$'] ],
displayMath: [ ['$$', '$$']],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
},
messageStyle: "none",
"HTML-CSS": { preferredFont: "TeX", availableFonts: ["STIX","TeX"] }
});
</script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
</head>
<body>
<div class="off-canvas-wrap">
<div class="inner-wrap">
<!-- mobile top bar to activate nav -->
<nav class="tab-bar show-for-small">
<section class="left-small">
<a class="left-off-canvas-toggle menu-icon" ><span></span></a>
</section>
<section class="middle tab-bar-section">
<h1 class="title">Memopol&nbsp;Project</h1>
</section>
</nav>
<!-- mobile side bar nav -->
<aside class="left-off-canvas-menu">
<ul class="off-canvas-list">
<li><a href="">Home</a></li>
<li><label>Categories</label></li>
<li ><a href="/category/misc.html">misc</a></li>
<li ><a href="/category/news.html">News</a></li>