Merge branch 'master' into rackspace_api
This commit is contained in:
commit
2ca91f7234
@ -16,7 +16,7 @@
|
||||
|
||||
|
||||
# ARG is the id of the user
|
||||
|
||||
export SUBJ=/C=US/ST=California/L=Mountain View/O=Anso Labs/OU=Nova Dev/CN=customer-intCA-$3
|
||||
mkdir INTER/$1
|
||||
cd INTER/$1
|
||||
cp ../../openssl.cnf.tmpl openssl.cnf
|
||||
@ -25,6 +25,6 @@ mkdir certs crl newcerts private
|
||||
echo "10" > serial
|
||||
touch index.txt
|
||||
openssl genrsa -out private/cakey.pem 1024 -config ./openssl.cnf -batch -nodes
|
||||
openssl req -new -sha1 -key private/cakey.pem -out ../../reqs/inter$1.csr -batch -subj "/C=US/ST=California/L=Mountain View/O=Anso Labs/OU=Nova Dev/CN=customer-intCA-$1"
|
||||
openssl req -new -sha2 -key private/cakey.pem -out ../../reqs/inter$1.csr -batch -subj "$SUBJ"
|
||||
cd ../../
|
||||
openssl ca -extensions v3_ca -days 365 -out INTER/$1/cacert.pem -in reqs/inter$1.csr -config openssl.cnf -batch
|
||||
openssl ca -extensions v3_ca -days 365 -out INTER/$1/cacert.pem -in reqs/inter$1.csr -config openssl.cnf -batch
|
||||
|
20
README
Normal file
20
README
Normal file
@ -0,0 +1,20 @@
|
||||
The Choose Your Own Adventure README for Nova:
|
||||
|
||||
You have come across a cloud computing fabric controller. It has identified
|
||||
itself as "Nova." It is apparent that it maintains compatability with
|
||||
the popular Amazon EC2 and S3 APIs.
|
||||
|
||||
To monitor it from a distance: follow @novacc on twitter
|
||||
|
||||
To tame it for use in your own cloud: read http://docs.novacc.org/getting.started.html
|
||||
|
||||
To study its anatomy: read http://docs.novacc.org/architecture.html
|
||||
|
||||
To disect it in detail: visit http://github.com/nova/cc
|
||||
|
||||
To taunt it with its weaknesses: use http://github.com/nova/cc/issues
|
||||
|
||||
To hack at it: read HACKING
|
||||
|
||||
To watch it: http://test.novacc.org/waterfall
|
||||
|
92
bin/dhcpleasor.py
Executable file
92
bin/dhcpleasor.py
Executable file
@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Copyright 2010 Anso Labs, LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""
|
||||
dhcpleasor.py
|
||||
|
||||
Handle lease database updates from DHCP servers.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import logging
|
||||
sys.path.append(os.path.abspath(os.path.join(__file__, "../../")))
|
||||
|
||||
logging.debug(sys.path)
|
||||
import getopt
|
||||
from os import environ
|
||||
from nova.compute import linux_net
|
||||
from nova.compute import network
|
||||
from nova import rpc
|
||||
|
||||
from nova import flags
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
|
||||
def add_lease(mac, ip, hostname, interface):
|
||||
if FLAGS.fake_rabbit:
|
||||
network.lease_ip(ip)
|
||||
else:
|
||||
rpc.cast(FLAGS.cloud_topic, {"method": "lease_ip",
|
||||
"args" : {"address": ip}})
|
||||
|
||||
def old_lease(mac, ip, hostname, interface):
|
||||
logging.debug("Adopted old lease or got a change of mac/hostname")
|
||||
|
||||
def del_lease(mac, ip, hostname, interface):
|
||||
if FLAGS.fake_rabbit:
|
||||
network.release_ip(ip)
|
||||
else:
|
||||
rpc.cast(FLAGS.cloud_topic, {"method": "release_ip",
|
||||
"args" : {"address": ip}})
|
||||
|
||||
def init_leases(interface):
|
||||
net = network.get_network_by_interface(interface)
|
||||
res = ""
|
||||
for host_name in net.hosts:
|
||||
res += "%s\n" % linux_net.hostDHCP(net, host_name, net.hosts[host_name])
|
||||
return res
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
if argv is None:
|
||||
argv = sys.argv
|
||||
interface = environ.get('DNSMASQ_INTERFACE', 'br0')
|
||||
if int(environ.get('TESTING', '0')):
|
||||
FLAGS.fake_rabbit = True
|
||||
FLAGS.redis_db = 8
|
||||
FLAGS.network_size = 32
|
||||
FLAGS.fake_libvirt=True
|
||||
FLAGS.fake_network=True
|
||||
FLAGS.fake_users = True
|
||||
action = argv[1]
|
||||
if action in ['add','del','old']:
|
||||
mac = argv[2]
|
||||
ip = argv[3]
|
||||
hostname = argv[4]
|
||||
logging.debug("Called %s for mac %s with ip %s and hostname %s on interface %s" % (action, mac, ip, hostname, interface))
|
||||
globals()[action+'_lease'](mac, ip, hostname, interface)
|
||||
else:
|
||||
print init_leases(interface)
|
||||
exit(0)
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
22
builddeb.sh
Executable file
22
builddeb.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Copyright 2010 Anso Labs, LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
dpkg-buildpackage -b -rfakeroot -tc -uc -D
|
230
debian/changelog
vendored
230
debian/changelog
vendored
@ -1,6 +1,232 @@
|
||||
nova (0.3.0-1) UNRELEASED; urgency=low
|
||||
nova (0.2.3-1) UNRELEASED; urgency=low
|
||||
|
||||
* Relax the Twisted dependency to python-twisted-core (rather than the
|
||||
full stack).
|
||||
* Move nova related configuration files into /etc/nova/.
|
||||
* Add a dependency on nginx from nova-objectsstore and install a
|
||||
suitable configuration file.
|
||||
* Ship the CA directory in nova-common.
|
||||
* Add a default flag file for nova-manage to help it find the CA.
|
||||
* If set, pass KernelId and RamdiskId from RunInstances call to the
|
||||
target compute node.
|
||||
* Added --network_path setting to nova-compute's flagfile.
|
||||
* Move templates from python directories to /usr/share/nova.
|
||||
* Add debian/nova-common.dirs to create
|
||||
var/lib/nova/{buckets,CA,images,instances,keys,networks}
|
||||
* Don't pass --daemonize=1 to nova-compute. It's already daemonising
|
||||
by default.
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 14 Jul 2010 12:00:00 -0700
|
||||
|
||||
nova (0.2.2-10) UNRELEASED; urgency=low
|
||||
|
||||
* Fixed extra space in vblade-persist
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 13 Jul 2010 19:00:00 -0700
|
||||
|
||||
nova (0.2.2-9) UNRELEASED; urgency=low
|
||||
|
||||
* Fixed invalid dn bug in ldap for adding roles
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 12 Jul 2010 15:20:00 -0700
|
||||
|
||||
nova (0.2.2-8) UNRELEASED; urgency=low
|
||||
|
||||
* Added a missing comma
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 08 Jul 2010 10:05:00 -0700
|
||||
|
||||
nova (0.2.2-7) UNRELEASED; urgency=low
|
||||
|
||||
* Missing files from twisted patch
|
||||
* License upedates
|
||||
* Reformatting/cleanup
|
||||
* Users/ldap bugfixes
|
||||
* Merge fixes
|
||||
* Documentation updates
|
||||
* Vpn key creation fix
|
||||
* Multiple shelves for volumes
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Wed, 07 Jul 2010 18:45:00 -0700
|
||||
|
||||
nova (0.2.2-6) UNRELEASED; urgency=low
|
||||
|
||||
* Fix to make Key Injection work again
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 14 Jun 2010 21:35:00 -0700
|
||||
|
||||
nova (0.2.2-5) UNRELEASED; urgency=low
|
||||
|
||||
* Lowered message callback frequency to stop compute and volume
|
||||
from eating tons of cpu
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 14 Jun 2010 14:15:00 -0700
|
||||
|
||||
nova (0.2.2-4) UNRELEASED; urgency=low
|
||||
|
||||
* Documentation fixes
|
||||
* Uncaught exceptions now log properly
|
||||
* Nova Manage zip exporting works again
|
||||
* Twisted threads no longer interrupt system calls
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Sun, 13 Jun 2010 01:40:00 -0700
|
||||
|
||||
nova (0.2.2-3) UNRELEASED; urgency=low
|
||||
|
||||
* Fixes to api calls
|
||||
* More accurate documentation
|
||||
* Removal of buggy multiprocessing
|
||||
* Asynchronus execution of shell commands
|
||||
* Fix of messaging race condition
|
||||
* Test redis database cleaned out on each run of tests
|
||||
* Smoketest updates
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Fri, 12 Jun 2010 20:10:00 -0700
|
||||
|
||||
nova (0.2.2-2) UNRELEASED; urgency=low
|
||||
|
||||
* Bugfixes to volume code
|
||||
* Instances no longer use keeper
|
||||
* Sectors off by one fix
|
||||
* State reported properly by instances
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Wed, 03 Jun 2010 15:21:00 -0700
|
||||
|
||||
nova (0.2.2-1) UNRELEASED; urgency=low
|
||||
|
||||
* First release based on nova/cc
|
||||
* Major rewrites to volumes and instances
|
||||
* Addition of cloudpipe and rbac
|
||||
* Major bugfixes
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Wed, 02 Jun 2010 17:42:00 -0700
|
||||
|
||||
nova (0.2.1-1) UNRELEASED; urgency=low
|
||||
|
||||
* Support ephemeral (local) space for instances
|
||||
* instance related fixes
|
||||
* fix network & cloudpipe bugs
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 25 May 2010 12:14:00 -0700
|
||||
|
||||
nova (0.2.0-20) UNRELEASED; urgency=low
|
||||
|
||||
* template files are in proper folder
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 25 May 2010 12:14:00 -0700
|
||||
|
||||
nova (0.2.0-19) UNRELEASED; urgency=low
|
||||
|
||||
* removed mox dependency and added templates to install
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 25 May 2010 11:53:00 -0700
|
||||
|
||||
nova (0.2.0-18) UNRELEASED; urgency=low
|
||||
|
||||
* api server properly sends instance status code
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 24 May 2010 17:18:00 -0700
|
||||
|
||||
nova (0.2.0-17) UNRELEASED; urgency=low
|
||||
|
||||
* redis-backed datastore
|
||||
|
||||
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 24 May 2010 16:28:00 -0700
|
||||
|
||||
nova (0.2.0-16) UNRELEASED; urgency=low
|
||||
|
||||
* make sure twistd.pid is really overriden
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 22:18:47 -0700
|
||||
|
||||
nova (0.2.0-15) UNRELEASED; urgency=low
|
||||
|
||||
* rpc shouldn't require tornado unless you are using attach_to_tornado
|
||||
|
||||
-- Jesse Andrews <anotherjesse@gmail.com> Sun, 23 May 2010 21:59:00 -0700
|
||||
|
||||
nova (0.2.0-14) UNRELEASED; urgency=low
|
||||
|
||||
* quicky init scripts for the other services, based on nova-objectstore
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 21:49:43 -0700
|
||||
|
||||
nova (0.2.0-13) UNRELEASED; urgency=low
|
||||
|
||||
* init script for nova-objectstore
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 21:33:25 -0700
|
||||
|
||||
nova (0.2.0-12) UNRELEASED; urgency=low
|
||||
|
||||
* kvm, kpartx required for nova-compute
|
||||
|
||||
-- Jesse Andrews <anotherjesse@gmail.com> Sun, 23 May 2010 21:32:00 -0700
|
||||
|
||||
nova (0.2.0-11) UNRELEASED; urgency=low
|
||||
|
||||
* Need to include the python modules in nova-common.install as well.
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 20:04:27 -0700
|
||||
|
||||
nova (0.2.0-10) UNRELEASED; urgency=low
|
||||
|
||||
* add more requirements to bin packages
|
||||
|
||||
-- Jesse Andrews <anotherjesse@gmail.com> Sun, 23 May 2010 19:54:00 -0700
|
||||
|
||||
nova (0.2.0-9) UNRELEASED; urgency=low
|
||||
|
||||
* nova bin packages should depend on the same version of nova-common they
|
||||
were built from.
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 18:46:34 -0700
|
||||
|
||||
nova (0.2.0-8) UNRELEASED; urgency=low
|
||||
|
||||
* Require libvirt 0.8.1 or newer for nova-compute
|
||||
|
||||
-- Jesse Andrews <anotherjesse@gmail.com> Sun, 23 May 2010 18:33:00 -0700
|
||||
|
||||
nova (0.2.0-7) UNRELEASED; urgency=low
|
||||
|
||||
* Split bins into separate packages
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 18:46:34 -0700
|
||||
|
||||
nova (0.2.0-6) UNRELEASED; urgency=low
|
||||
|
||||
* Add python-m2crypto to deps
|
||||
|
||||
-- Jesse Andrews <anotherjesse@gmail.com> Sun, 23 May 2010 18:33:00 -0700
|
||||
|
||||
nova (0.2.0-5) UNRELEASED; urgency=low
|
||||
|
||||
* Add python-gflags to deps
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 18:28:50 -0700
|
||||
|
||||
nova (0.2.0-4) UNRELEASED; urgency=low
|
||||
|
||||
* install scripts
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 18:16:27 -0700
|
||||
|
||||
nova (0.2.0-3) UNRELEASED; urgency=low
|
||||
|
||||
* debian build goop
|
||||
|
||||
-- Manish Singh <yosh@gimp.org> Sun, 23 May 2010 18:06:37 -0700
|
||||
|
||||
nova (0.2.0-2) UNRELEASED; urgency=low
|
||||
|
||||
* improved requirements
|
||||
|
||||
-- Jesse Andrews <anotherjesse@gmail.com> Sun, 23 May 2010 17:42:00 -0700
|
||||
|
||||
nova (0.2.0-1) UNRELEASED; urgency=low
|
||||
|
||||
* initial release
|
||||
|
||||
-- Jesse Andrews <jesse@ansolabs.com> Thur, 27 May 2010 12:28:00 -0700
|
||||
-- Jesse Andrews <anotherjesse@gmail.com> Fri, 21 May 2010 12:28:00 -0700
|
||||
|
||||
|
116
debian/control
vendored
116
debian/control
vendored
@ -3,38 +3,134 @@ Section: net
|
||||
Priority: extra
|
||||
Maintainer: Jesse Andrews <jesse@ansolabs.com>
|
||||
Build-Depends: debhelper (>= 7)
|
||||
Build-Depends-Indep: python-support
|
||||
Build-Depends-Indep: python-support, python-setuptools
|
||||
Standards-Version: 3.8.4
|
||||
XS-Python-Version: 2.6
|
||||
|
||||
Package: nova-common
|
||||
Architecture: all
|
||||
Depends: ${python:Depends}, aoetools, vlan, python-ipy, python-boto, python-m2crypto, python-pycurl, python-twisted, python-daemon, python-redis, python-carrot, python-lockfile, python-gflags, python-tornado, ${misc:Depends}
|
||||
Depends: ${python:Depends}, aoetools, vlan, python-ipy, python-boto, python-m2crypto, python-pycurl, python-twisted-core, python-daemon, python-redis, python-carrot, python-lockfile, python-gflags, python-tornado, ${misc:Depends}
|
||||
Provides: ${python:Provides}
|
||||
Conflicts: nova
|
||||
Description: Nova is a cloud
|
||||
Description: Nova Cloud Computing - common files
|
||||
Nova is a cloud computing fabric controller (the main part of an IaaS
|
||||
system) built to match the popular AWS EC2 and S3 APIs. It is written in
|
||||
Python, using the Tornado and Twisted frameworks, and relies on the
|
||||
standard AMQP messaging protocol, and the Redis distributed KVS.
|
||||
.
|
||||
Nova is intended to be easy to extend, and adapt. For example, it
|
||||
currently uses an LDAP server for users and groups, but also includes a
|
||||
fake LDAP server, that stores data in Redis. It has extensive test
|
||||
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
|
||||
and user documentation.
|
||||
.
|
||||
While Nova is currently in Beta use within several organizations, the
|
||||
codebase is very much under active development.
|
||||
.
|
||||
This package contains things that are needed by all parts of Nova.
|
||||
|
||||
Package: nova-compute
|
||||
Architecture: all
|
||||
Depends: nova-common (= ${binary:Version}), kpartx, kvm, python-libvirt, libvirt-bin (>= 0.8.1), ${python:Depends}, ${misc:Depends}
|
||||
Description: Nova compute
|
||||
Depends: nova-common (= ${binary:Version}), kpartx, kvm, python-libvirt, libvirt-bin (>= 0.7.5), curl, ${python:Depends}, ${misc:Depends}
|
||||
Description: Nova Cloud Computing - compute node
|
||||
Nova is a cloud computing fabric controller (the main part of an IaaS
|
||||
system) built to match the popular AWS EC2 and S3 APIs. It is written in
|
||||
Python, using the Tornado and Twisted frameworks, and relies on the
|
||||
standard AMQP messaging protocol, and the Redis distributed KVS.
|
||||
.
|
||||
Nova is intended to be easy to extend, and adapt. For example, it
|
||||
currently uses an LDAP server for users and groups, but also includes a
|
||||
fake LDAP server, that stores data in Redis. It has extensive test
|
||||
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
|
||||
and user documentation.
|
||||
.
|
||||
While Nova is currently in Beta use within several organizations, the
|
||||
codebase is very much under active development.
|
||||
.
|
||||
This is the package you will install on the nodes that will run your
|
||||
virtual machines.
|
||||
|
||||
Package: nova-volume
|
||||
Architecture: all
|
||||
Depends: nova-common (= ${binary:Version}), vblade, vblade-persist, ${python:Depends}, ${misc:Depends}
|
||||
Description: Nova volume
|
||||
Description: Nova Cloud Computing - storage
|
||||
Nova is a cloud computing fabric controller (the main part of an IaaS
|
||||
system) built to match the popular AWS EC2 and S3 APIs. It is written in
|
||||
Python, using the Tornado and Twisted frameworks, and relies on the
|
||||
standard AMQP messaging protocol, and the Redis distributed KVS.
|
||||
.
|
||||
Nova is intended to be easy to extend, and adapt. For example, it
|
||||
currently uses an LDAP server for users and groups, but also includes a
|
||||
fake LDAP server, that stores data in Redis. It has extensive test
|
||||
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
|
||||
and user documentation.
|
||||
.
|
||||
While Nova is currently in Beta use within several organizations, the
|
||||
codebase is very much under active development.
|
||||
.
|
||||
This is the package you will install on your storage nodes.
|
||||
|
||||
Package: nova-api
|
||||
Architecture: all
|
||||
Depends: nova-common (= ${binary:Version}), ${python:Depends}, ${misc:Depends}
|
||||
Description: Nova api
|
||||
Description: Nova Cloud Computing - API frontend
|
||||
Nova is a cloud computing fabric controller (the main part of an IaaS
|
||||
system) built to match the popular AWS EC2 and S3 APIs. It is written in
|
||||
Python, using the Tornado and Twisted frameworks, and relies on the
|
||||
standard AMQP messaging protocol, and the Redis distributed KVS.
|
||||
.
|
||||
Nova is intended to be easy to extend, and adapt. For example, it
|
||||
currently uses an LDAP server for users and groups, but also includes a
|
||||
fake LDAP server, that stores data in Redis. It has extensive test
|
||||
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
|
||||
and user documentation.
|
||||
.
|
||||
While Nova is currently in Beta use within several organizations, the
|
||||
codebase is very much under active development.
|
||||
.
|
||||
This package provides the API frontend.
|
||||
|
||||
Package: nova-objectstore
|
||||
Architecture: all
|
||||
Depends: nova-common (= ${binary:Version}), nginx, ${python:Depends}, ${misc:Depends}
|
||||
Description: Nova Cloud Computing - object store
|
||||
Nova is a cloud computing fabric controller (the main part of an IaaS
|
||||
system) built to match the popular AWS EC2 and S3 APIs. It is written in
|
||||
Python, using the Tornado and Twisted frameworks, and relies on the
|
||||
standard AMQP messaging protocol, and the Redis distributed KVS.
|
||||
.
|
||||
Nova is intended to be easy to extend, and adapt. For example, it
|
||||
currently uses an LDAP server for users and groups, but also includes a
|
||||
fake LDAP server, that stores data in Redis. It has extensive test
|
||||
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
|
||||
and user documentation.
|
||||
.
|
||||
While Nova is currently in Beta use within several organizations, the
|
||||
codebase is very much under active development.
|
||||
.
|
||||
This is the package you will install on the nodes that will contain your
|
||||
object store.
|
||||
|
||||
Package: nova-instancemonitor
|
||||
Architecture: all
|
||||
Depends: nova-common (= ${binary:Version}), ${python:Depends}, ${misc:Depends}
|
||||
Description: Nova object store
|
||||
Description: Nova instance monitor
|
||||
|
||||
Package: nova-tools
|
||||
Architecture: all
|
||||
Depends: python-boto, ${python:Depends}, ${misc:Depends}
|
||||
Description: CLI tools to access nova
|
||||
Description: Nova Cloud Computing - management tools
|
||||
Nova is a cloud computing fabric controller (the main part of an IaaS
|
||||
system) built to match the popular AWS EC2 and S3 APIs. It is written in
|
||||
Python, using the Tornado and Twisted frameworks, and relies on the
|
||||
standard AMQP messaging protocol, and the Redis distributed KVS.
|
||||
.
|
||||
Nova is intended to be easy to extend, and adapt. For example, it
|
||||
currently uses an LDAP server for users and groups, but also includes a
|
||||
fake LDAP server, that stores data in Redis. It has extensive test
|
||||
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
|
||||
and user documentation.
|
||||
.
|
||||
While Nova is currently in Beta use within several organizations, the
|
||||
codebase is very much under active development.
|
||||
.
|
||||
This package contains admin tools for Nova.
|
||||
|
5
debian/nova-api.conf
vendored
Normal file
5
debian/nova-api.conf
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
--daemonize=1
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--fake_users=1
|
||||
--datastore_path=/var/lib/nova/keeper
|
4
debian/nova-api.init
vendored
4
debian/nova-api.init
vendored
@ -13,10 +13,10 @@
|
||||
set -e
|
||||
|
||||
DAEMON=/usr/bin/nova-api
|
||||
DAEMON_ARGS="--flagfile=/etc/nova.conf"
|
||||
DAEMON_ARGS="--flagfile=/etc/nova/nova-api.conf"
|
||||
PIDFILE=/var/run/nova-api.pid
|
||||
|
||||
ENABLED=false
|
||||
ENABLED=true
|
||||
|
||||
if test -f /etc/default/nova-api; then
|
||||
. /etc/default/nova-api
|
||||
|
1
debian/nova-api.install
vendored
1
debian/nova-api.install
vendored
@ -1 +1,2 @@
|
||||
bin/nova-api usr/bin
|
||||
debian/nova-api.conf etc/nova
|
||||
|
11
debian/nova-common.dirs
vendored
Normal file
11
debian/nova-common.dirs
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
etc/nova
|
||||
var/lib/nova/buckets
|
||||
var/lib/nova/CA
|
||||
var/lib/nova/CA/INTER
|
||||
var/lib/nova/CA/newcerts
|
||||
var/lib/nova/CA/private
|
||||
var/lib/nova/CA/reqs
|
||||
var/lib/nova/images
|
||||
var/lib/nova/instances
|
||||
var/lib/nova/keys
|
||||
var/lib/nova/networks
|
10
debian/nova-common.install
vendored
10
debian/nova-common.install
vendored
@ -1,4 +1,10 @@
|
||||
bin/nova-manage usr/bin
|
||||
nova/auth/novarc.template usr/lib/pymodules/python2.6/nova/auth
|
||||
nova/compute/libvirt.xml.template usr/lib/pymodules/python2.6/nova/compute
|
||||
debian/nova-manage.conf etc/nova
|
||||
nova/auth/novarc.template usr/share/nova
|
||||
nova/cloudpipe/client.ovpn.template usr/share/nova
|
||||
nova/compute/libvirt.xml.template usr/share/nova
|
||||
nova/compute/interfaces.template usr/share/nova
|
||||
usr/lib/python*/*-packages/nova/*
|
||||
CA/openssl.cnf.tmpl var/lib/nova/CA
|
||||
CA/geninter.sh var/lib/nova/CA
|
||||
CA/genrootca.sh var/lib/nova/CA
|
||||
|
10
debian/nova-compute.conf
vendored
Normal file
10
debian/nova-compute.conf
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--datastore_path=/var/lib/nova/keeper
|
||||
--instances_path=/var/lib/nova/instances
|
||||
--networks_path=/var/lib/nova/networks
|
||||
--simple_network_template=/usr/share/nova/interfaces.template
|
||||
--libvirt_xml_template=/usr/share/nova/libvirt.xml.template
|
||||
--vpn_client_template=/usr/share/nova/client.ovpn.template
|
||||
--credentials_template=/usr/share/nova/novarc.template
|
||||
--fake_users=1
|
4
debian/nova-compute.init
vendored
4
debian/nova-compute.init
vendored
@ -13,10 +13,10 @@
|
||||
set -e
|
||||
|
||||
DAEMON=/usr/bin/nova-compute
|
||||
DAEMON_ARGS="--flagfile=/etc/nova.conf"
|
||||
DAEMON_ARGS="--flagfile=/etc/nova/nova-compute.conf"
|
||||
PIDFILE=/var/run/nova-compute.pid
|
||||
|
||||
ENABLED=false
|
||||
ENABLED=true
|
||||
|
||||
if test -f /etc/default/nova-compute; then
|
||||
. /etc/default/nova-compute
|
||||
|
1
debian/nova-compute.install
vendored
1
debian/nova-compute.install
vendored
@ -1 +1,2 @@
|
||||
bin/nova-compute usr/bin
|
||||
debian/nova-compute.conf etc/nova
|
||||
|
69
debian/nova-instancemonitor.init
vendored
Normal file
69
debian/nova-instancemonitor.init
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
#! /bin/sh
|
||||
### BEGIN INIT INFO
|
||||
# Provides: nova-instancemonitor
|
||||
# Required-Start: $remote_fs $syslog
|
||||
# Required-Stop: $remote_fs $syslog
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: nova-instancemonitor
|
||||
# Description: nova-instancemonitor
|
||||
### END INIT INFO
|
||||
|
||||
|
||||
set -e
|
||||
|
||||
DAEMON=/usr/bin/nova-instancemonitor
|
||||
DAEMON_ARGS="--flagfile=/etc/nova.conf"
|
||||
PIDFILE=/var/run/nova-instancemonitor.pid
|
||||
|
||||
ENABLED=false
|
||||
|
||||
if test -f /etc/default/nova-instancemonitor; then
|
||||
. /etc/default/nova-instancemonitor
|
||||
fi
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
test "$ENABLED" = "true" || exit 0
|
||||
log_daemon_msg "Starting nova compute" "nova-instancemonitor"
|
||||
cd /var/run
|
||||
if $DAEMON $DAEMON_ARGS start; then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
test "$ENABLED" = "true" || exit 0
|
||||
log_daemon_msg "Stopping nova compute" "nova-instancemonitor"
|
||||
cd /var/run
|
||||
if $DAEMON $DAEMON_ARGS stop; then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1
|
||||
fi
|
||||
;;
|
||||
restart|force-reload)
|
||||
test "$ENABLED" = "true" || exit 1
|
||||
cd /var/run
|
||||
if $DAEMON $DAEMON_ARGS restart; then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1
|
||||
fi
|
||||
;;
|
||||
status)
|
||||
test "$ENABLED" = "true" || exit 0
|
||||
status_of_proc -p $PIDFILE $DAEMON nova-instancemonitor && exit 0 || exit $?
|
||||
;;
|
||||
*)
|
||||
log_action_msg "Usage: /etc/init.d/nova-instancemonitor {start|stop|restart|force-reload|status}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
1
debian/nova-instancemonitor.install
vendored
Normal file
1
debian/nova-instancemonitor.install
vendored
Normal file
@ -0,0 +1 @@
|
||||
bin/nova-instancemonitor usr/bin
|
4
debian/nova-manage.conf
vendored
Normal file
4
debian/nova-manage.conf
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--credentials_template=/usr/share/nova/novarc.template
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--vpn_client_template=/usr/share/nova/client.ovpn.template
|
7
debian/nova-objectstore.conf
vendored
Normal file
7
debian/nova-objectstore.conf
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
--daemonize=1
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--datastore_path=/var/lib/nova/keeper
|
||||
--fake_users=1
|
||||
--images_path=/var/lib/nova/images
|
||||
--buckets_path=/var/lib/nova/buckets
|
4
debian/nova-objectstore.init
vendored
4
debian/nova-objectstore.init
vendored
@ -13,10 +13,10 @@
|
||||
set -e
|
||||
|
||||
DAEMON=/usr/bin/nova-objectstore
|
||||
DAEMON_ARGS="--flagfile=/etc/nova.conf"
|
||||
DAEMON_ARGS="--flagfile=/etc/nova/nova-objectstore.conf"
|
||||
PIDFILE=/var/run/nova-objectstore.pid
|
||||
|
||||
ENABLED=false
|
||||
ENABLED=true
|
||||
|
||||
if test -f /etc/default/nova-objectstore; then
|
||||
. /etc/default/nova-objectstore
|
||||
|
2
debian/nova-objectstore.install
vendored
2
debian/nova-objectstore.install
vendored
@ -1 +1,3 @@
|
||||
bin/nova-objectstore usr/bin
|
||||
debian/nova-objectstore.conf etc/nova
|
||||
debian/nova-objectstore.nginx.conf etc/nginx/sites-available
|
||||
|
1
debian/nova-objectstore.links
vendored
Normal file
1
debian/nova-objectstore.links
vendored
Normal file
@ -0,0 +1 @@
|
||||
/etc/nginx/sites-available/nova-objectstore.nginx.conf /etc/nginx/sites-enabled/nova-objectstore.nginx.conf
|
17
debian/nova-objectstore.nginx.conf
vendored
Normal file
17
debian/nova-objectstore.nginx.conf
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
server {
|
||||
listen 3333 default;
|
||||
server_name localhost;
|
||||
client_max_body_size 10m;
|
||||
|
||||
access_log /var/log/nginx/localhost.access.log;
|
||||
|
||||
location ~ /_images/.+ {
|
||||
root /var/lib/nova/images;
|
||||
rewrite ^/_images/(.*)$ /$1 break;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3334/;
|
||||
}
|
||||
}
|
||||
|
7
debian/nova-volume.conf
vendored
Normal file
7
debian/nova-volume.conf
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
--daemonize=1
|
||||
--ca_path=/var/lib/nova/CA
|
||||
--keys_path=/var/lib/nova/keys
|
||||
--datastore_path=/var/lib/nova/keeper
|
||||
--fake_users=1
|
||||
--images_path=/var/lib/nova/images
|
||||
--buckets_path=/var/lib/nova/buckets
|
4
debian/nova-volume.init
vendored
4
debian/nova-volume.init
vendored
@ -13,10 +13,10 @@
|
||||
set -e
|
||||
|
||||
DAEMON=/usr/bin/nova-volume
|
||||
DAEMON_ARGS="--flagfile=/etc/nova.conf"
|
||||
DAEMON_ARGS="--flagfile=/etc/nova/nova-volume.conf"
|
||||
PIDFILE=/var/run/nova-volume.pid
|
||||
|
||||
ENABLED=false
|
||||
ENABLED=true
|
||||
|
||||
if test -f /etc/default/nova-volume; then
|
||||
. /etc/default/nova-volume
|
||||
|
1
debian/nova-volume.install
vendored
1
debian/nova-volume.install
vendored
@ -1 +1,2 @@
|
||||
bin/nova-volume usr/bin
|
||||
debian/nova-volume.conf etc/nova
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
nova System Architecture
|
||||
========================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Auth Documentation
|
||||
==================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Nova Binaries
|
||||
===============
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Compute Documentation
|
||||
=====================
|
||||
|
@ -16,7 +16,7 @@ import sys, os
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#sys.path.append(os.path.abspath('.'))
|
||||
sys.path.append(os.path.abspath('/Users/jmckenty/Projects/cc'))
|
||||
sys.path.append([os.path.abspath('../nova'),os.path.abspath('../'),os.path.abspath('../vendor')])
|
||||
from nova import vendor
|
||||
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Endpoint Documentation
|
||||
======================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Nova Fakes
|
||||
==========
|
||||
|
@ -1,38 +1,39 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
Getting Started with Nova
|
||||
=========================
|
||||
|
||||
|
||||
GOTTA HAVE A nova.pth file added or it WONT WORK (will write setup.py file soon)
|
||||
|
||||
Create a file named nova.pth in your python libraries directory
|
||||
(usually /usr/local/lib/python2.6/dist-packages) with a single line that points
|
||||
to the directory where you checked out the source (that contains the nova/
|
||||
directory).
|
||||
|
||||
DEPENDENCIES
|
||||
------------
|
||||
|
||||
Related servers we rely on
|
||||
|
||||
* RabbitMQ: messaging queue, used for all communication between components
|
||||
* OpenLDAP: users, groups (maybe cut)
|
||||
* ReDIS: Remote Dictionary Store (for fast, shared state data)
|
||||
* nginx: HTTP server to handle serving large files (because Tornado can't)
|
||||
|
||||
Python libraries we don't vendor
|
||||
|
||||
* M2Crypto: python library interface for openssl
|
||||
* curl
|
||||
|
||||
Vendored python libaries (don't require any installation)
|
||||
|
||||
* Tornado: scalable non blocking web server for api requests
|
||||
* Twisted: just for the twisted.internet.defer package
|
||||
* boto: python api for aws api
|
||||
* M2Crypto: python library interface for openssl
|
||||
* IPy: library for managing ip addresses
|
||||
* ReDIS: Remote Dictionary Store (for fast, shared state data)
|
||||
|
||||
Recommended
|
||||
-----------------
|
||||
|
||||
* euca2ools: python implementation of aws ec2-tools and ami tools
|
||||
* build tornado to use C module for evented section
|
||||
|
||||
@ -41,30 +42,90 @@ Installation
|
||||
--------------
|
||||
::
|
||||
|
||||
# ON ALL SYSTEMS
|
||||
apt-get install -y python-libvirt libvirt-bin python-setuptools python-dev python-pycurl python-m2crypto python-twisted
|
||||
apt-get install -y aoetools vlan
|
||||
# system libraries and tools
|
||||
apt-get install -y aoetools vlan curl
|
||||
modprobe aoe
|
||||
|
||||
# python libraries
|
||||
apt-get install -y python-setuptools python-dev python-pycurl python-m2crypto
|
||||
|
||||
# ON THE CLOUD CONTROLLER
|
||||
apt-get install -y rabbitmq-server dnsmasq
|
||||
# fix ec2 metadata/userdata uri - where $IP is the IP of the cloud
|
||||
iptables -t nat -A PREROUTING -s 0.0.0.0/0 -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination $IP:8773
|
||||
iptables --table nat --append POSTROUTING --out-interface $PUBLICIFACE -j MASQUERADE
|
||||
# setup ldap (slap.sh as root will remove ldap and reinstall it)
|
||||
auth/slap.sh
|
||||
apt-get install -y rabbitmq-server dnsmasq nginx
|
||||
# build redis from 2.0.0-rc1 source
|
||||
# setup ldap (slap.sh as root will remove ldap and reinstall it)
|
||||
NOVA_PATH/nova/auth/slap.sh
|
||||
/etc/init.d/rabbitmq-server start
|
||||
|
||||
# ON VOLUME NODE:
|
||||
apt-get install -y vblade-persist
|
||||
apt-get install -y vblade-persist
|
||||
|
||||
# ON THE COMPUTE NODE:
|
||||
apt-get install -y kpartx kvm
|
||||
apt-get install -y python-libvirt
|
||||
apt-get install -y kpartx kvm libvirt-bin
|
||||
modprobe kvm
|
||||
|
||||
# optional packages
|
||||
apt-get install -y euca2ools
|
||||
|
||||
# Set up flagfiles with the appropriate hostnames, etc.
|
||||
# start api_worker, s3_worker, node_worker, storage_worker
|
||||
# Add yourself to the libvirtd group, log out, and log back in
|
||||
# Make sure the user who will launch the workers has sudo privileges w/o pass (will fix later)
|
||||
apt-get install -y euca2ools
|
||||
|
||||
Configuration
|
||||
---------------
|
||||
|
||||
ON CLOUD CONTROLLER
|
||||
|
||||
* Add yourself to the libvirtd group, log out, and log back in
|
||||
* fix hardcoded ec2 metadata/userdata uri ($IP is the IP of the cloud), and masqurade all traffic from launched instances
|
||||
::
|
||||
|
||||
iptables -t nat -A PREROUTING -s 0.0.0.0/0 -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination $IP:8773
|
||||
iptables --table nat --append POSTROUTING --out-interface $PUBLICIFACE -j MASQUERADE
|
||||
|
||||
|
||||
* Configure NginX proxy (/etc/nginx/sites-enabled/default)
|
||||
|
||||
::
|
||||
|
||||
server {
|
||||
listen 3333 default;
|
||||
server-name localhost;
|
||||
client_max_body_size 10m;
|
||||
|
||||
access_log /var/log/nginx/localhost.access.log;
|
||||
|
||||
location ~ /_images/.+ {
|
||||
root NOVA_PATH/images;
|
||||
rewrite ^/_images/(.*)$ /$1 break;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3334/;
|
||||
}
|
||||
}
|
||||
|
||||
ON VOLUME NODE
|
||||
|
||||
* create a filesystem (you can use an actual disk if you have one spare, default is /dev/sdb)
|
||||
|
||||
::
|
||||
|
||||
# This creates a 1GB file to create volumes out of
|
||||
dd if=/dev/zero of=MY_FILE_PATH bs=100M count=10
|
||||
losetup --show -f MY_FILE_PATH
|
||||
# replace loop0 below with whatever losetup returns
|
||||
echo "--storage_dev=/dev/loop0" >> NOVA_PATH/bin/nova.conf
|
||||
|
||||
Running
|
||||
---------
|
||||
|
||||
Launch servers
|
||||
|
||||
* rabbitmq
|
||||
* redis
|
||||
* slapd
|
||||
* nginx
|
||||
|
||||
Launch nova components
|
||||
|
||||
* nova-api
|
||||
* nova-compute
|
||||
* nova-objectstore
|
||||
* nova-volume
|
||||
|
@ -1,18 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Welcome to nova's documentation!
|
||||
================================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Nova Documentation
|
||||
==================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
nova Networking
|
||||
================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
NOVA Libraries
|
||||
===============
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Objectstore Documentation
|
||||
=========================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
nova Packages & Dependencies
|
||||
============================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Storage in the Nova Cloud
|
||||
=========================
|
||||
|
@ -1,17 +1,21 @@
|
||||
..
|
||||
Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Copyright 2010 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
All Rights Reserved.
|
||||
|
||||
Copyright 2010 Anso Labs, LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
||||
Volume Documentation
|
||||
====================
|
||||
|
37
run_tests.py
37
run_tests.py
@ -1,17 +1,22 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
# Copyright [2010] [Anso Labs, LLC]
|
||||
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
# Copyright 2010 Anso Labs, LLC
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""
|
||||
This is our basic test running framework based on Twisted's Trial.
|
||||
@ -41,23 +46,27 @@ import sys
|
||||
from nova import vendor
|
||||
from twisted.scripts import trial as trial_script
|
||||
|
||||
from nova import datastore
|
||||
from nova import flags
|
||||
from nova import twistd
|
||||
|
||||
from nova.tests.access_unittest import *
|
||||
from nova.tests.api_unittest import *
|
||||
from nova.tests.cloud_unittest import *
|
||||
from nova.tests.keeper_unittest import *
|
||||
from nova.tests.model_unittest import *
|
||||
from nova.tests.network_unittest import *
|
||||
from nova.tests.node_unittest import *
|
||||
from nova.tests.objectstore_unittest import *
|
||||
from nova.tests.process_unittest import *
|
||||
from nova.tests.storage_unittest import *
|
||||
from nova.tests.users_unittest import *
|
||||
from nova.tests.datastore_unittest import *
|
||||
from nova.tests.validator_unittest import *
|
||||
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
flags.DEFINE_bool('flush_db', True,
|
||||
'Flush the database before running fake tests')
|
||||
|
||||
if __name__ == '__main__':
|
||||
OptionsClass = twistd.WrapTwistedOptions(trial_script.Options)
|
||||
@ -69,6 +78,12 @@ if __name__ == '__main__':
|
||||
# TODO(termie): these should make a call instead of doing work on import
|
||||
if FLAGS.fake_tests:
|
||||
from nova.tests.fake_flags import *
|
||||
# use db 8 for fake tests
|
||||
FLAGS.redis_db = 8
|
||||
if FLAGS.flush_db:
|
||||
logging.info("Flushing redis datastore")
|
||||
r = datastore.Redis.instance()
|
||||
r.flushdb()
|
||||
else:
|
||||
from nova.tests.real_flags import *
|
||||
|
||||
|
31
setup.py
31
setup.py
@ -1,17 +1,22 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright [2010] [Anso Labs, LLC]
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2010 United States Government as represented by the
|
||||
# Administrator of the National Aeronautics and Space Administration.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Copyright 2010 Anso Labs, LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import glob
|
||||
import os
|
||||
|
101
vendor/Twisted-10.0.0/twisted/internet/_sigchld.c
vendored
Normal file
101
vendor/Twisted-10.0.0/twisted/internet/_sigchld.c
vendored
Normal file
@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright (c) 2010 Twisted Matrix Laboratories.
|
||||
* See LICENSE for details.
|
||||
*/
|
||||
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "Python.h"
|
||||
|
||||
static int sigchld_pipe_fd = -1;
|
||||
|
||||
static void got_signal(int sig) {
|
||||
int saved_errno = errno;
|
||||
int ignored_result;
|
||||
|
||||
/* write() errors are unhandled. If the buffer is full, we don't
|
||||
* care. What about other errors? */
|
||||
ignored_result = write(sigchld_pipe_fd, "x", 1);
|
||||
|
||||
errno = saved_errno;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(install_sigchld_handler_doc, "\
|
||||
install_sigchld_handler(fd)\n\
|
||||
\n\
|
||||
Installs a SIGCHLD handler which will write a byte to the given fd\n\
|
||||
whenever a SIGCHLD occurs. This is done in C code because the python\n\
|
||||
signal handling system is not reliable, and additionally cannot\n\
|
||||
specify SA_RESTART.\n\
|
||||
\n\
|
||||
Please ensure fd is in non-blocking mode.\n\
|
||||
");
|
||||
|
||||
static PyObject *
|
||||
install_sigchld_handler(PyObject *self, PyObject *args) {
|
||||
int fd, old_fd;
|
||||
struct sigaction sa;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "i:install_sigchld_handler", &fd)) {
|
||||
return NULL;
|
||||
}
|
||||
old_fd = sigchld_pipe_fd;
|
||||
sigchld_pipe_fd = fd;
|
||||
|
||||
if (fd == -1) {
|
||||
sa.sa_handler = SIG_DFL;
|
||||
} else {
|
||||
sa.sa_handler = got_signal;
|
||||
sa.sa_flags = SA_RESTART;
|
||||
/* mask all signals so I don't worry about EINTR from the write. */
|
||||
sigfillset(&sa.sa_mask);
|
||||
}
|
||||
if (sigaction(SIGCHLD, &sa, 0) != 0) {
|
||||
sigchld_pipe_fd = old_fd;
|
||||
return PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
return PyLong_FromLong(old_fd);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(is_default_handler_doc, "\
|
||||
Return 1 if the SIGCHLD handler is SIG_DFL, 0 otherwise.\n\
|
||||
");
|
||||
|
||||
static PyObject *
|
||||
is_default_handler(PyObject *self, PyObject *args) {
|
||||
/*
|
||||
* This implementation is necessary since the install_sigchld_handler
|
||||
* function above bypasses the Python signal handler installation API, so
|
||||
* CPython doesn't notice that the handler has changed and signal.getsignal
|
||||
* won't return an accurate result.
|
||||
*/
|
||||
struct sigaction sa;
|
||||
|
||||
if (sigaction(SIGCHLD, NULL, &sa) != 0) {
|
||||
return PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
|
||||
return PyLong_FromLong(sa.sa_handler == SIG_DFL);
|
||||
}
|
||||
|
||||
static PyMethodDef sigchld_methods[] = {
|
||||
{"installHandler", install_sigchld_handler, METH_VARARGS,
|
||||
install_sigchld_handler_doc},
|
||||
{"isDefaultHandler", is_default_handler, METH_NOARGS,
|
||||
is_default_handler_doc},
|
||||
/* sentinel */
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
static const char _sigchld_doc[] = "\n\
|
||||
This module contains an API for receiving SIGCHLD via a file descriptor.\n\
|
||||
";
|
||||
|
||||
PyMODINIT_FUNC
|
||||
init_sigchld(void) {
|
||||
/* Create the module and add the functions */
|
||||
Py_InitModule3(
|
||||
"twisted.internet._sigchld", sigchld_methods, _sigchld_doc);
|
||||
}
|
184
vendor/Twisted-10.0.0/twisted/internet/_signals.py
vendored
Normal file
184
vendor/Twisted-10.0.0/twisted/internet/_signals.py
vendored
Normal file
@ -0,0 +1,184 @@
|
||||
# -*- test-case-name: twisted.test.test_process,twisted.internet.test.test_process -*-
|
||||
# Copyright (c) 2010 Twisted Matrix Laboratories.
|
||||
# See LICENSE for details.
|
||||
|
||||
"""
|
||||
This module provides a uniform interface to the several mechanisms which are
|
||||
possibly available for dealing with signals.
|
||||
|
||||
This module is used to integrate child process termination into a
|
||||
reactor event loop. This is a challenging feature to provide because
|
||||
most platforms indicate process termination via SIGCHLD and do not
|
||||
provide a way to wait for that signal and arbitrary I/O events at the
|
||||
same time. The naive implementation involves installing a Python
|
||||
SIGCHLD handler; unfortunately this leads to other syscalls being
|
||||
interrupted (whenever SIGCHLD is received) and failing with EINTR
|
||||
(which almost no one is prepared to handle). This interruption can be
|
||||
disabled via siginterrupt(2) (or one of the equivalent mechanisms);
|
||||
however, if the SIGCHLD is delivered by the platform to a non-main
|
||||
thread (not a common occurrence, but difficult to prove impossible),
|
||||
the main thread (waiting on select() or another event notification
|
||||
API) may not wake up leading to an arbitrary delay before the child
|
||||
termination is noticed.
|
||||
|
||||
The basic solution to all these issues involves enabling SA_RESTART
|
||||
(ie, disabling system call interruption) and registering a C signal
|
||||
handler which writes a byte to a pipe. The other end of the pipe is
|
||||
registered with the event loop, allowing it to wake up shortly after
|
||||
SIGCHLD is received. See L{twisted.internet.posixbase._SIGCHLDWaker}
|
||||
for the implementation of the event loop side of this solution. The
|
||||
use of a pipe this way is known as the U{self-pipe
|
||||
trick<http://cr.yp.to/docs/selfpipe.html>}.
|
||||
|
||||
The actual solution implemented in this module depends on the version
|
||||
of Python. From version 2.6, C{signal.siginterrupt} and
|
||||
C{signal.set_wakeup_fd} allow the necessary C signal handler which
|
||||
writes to the pipe to be registered with C{SA_RESTART}. Prior to 2.6,
|
||||
the L{twisted.internet._sigchld} extension module provides similar
|
||||
functionality.
|
||||
|
||||
If neither of these is available, a Python signal handler is used
|
||||
instead. This is essentially the naive solution mentioned above and
|
||||
has the problems described there.
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
try:
|
||||
from signal import set_wakeup_fd, siginterrupt
|
||||
except ImportError:
|
||||
set_wakeup_fd = siginterrupt = None
|
||||
|
||||
try:
|
||||
import signal
|
||||
except ImportError:
|
||||
signal = None
|
||||
|
||||
from twisted.python.log import msg
|
||||
|
||||
try:
|
||||
from twisted.internet._sigchld import installHandler as _extInstallHandler, \
|
||||
isDefaultHandler as _extIsDefaultHandler
|
||||
except ImportError:
|
||||
_extInstallHandler = _extIsDefaultHandler = None
|
||||
|
||||
|
||||
class _Handler(object):
|
||||
"""
|
||||
L{_Handler} is a signal handler which writes a byte to a file descriptor
|
||||
whenever it is invoked.
|
||||
|
||||
@ivar fd: The file descriptor to which to write. If this is C{None},
|
||||
nothing will be written.
|
||||
"""
|
||||
def __init__(self, fd):
|
||||
self.fd = fd
|
||||
|
||||
|
||||
def __call__(self, *args):
|
||||
"""
|
||||
L{_Handler.__call__} is the signal handler. It will write a byte to
|
||||
the wrapped file descriptor, if there is one.
|
||||
"""
|
||||
if self.fd is not None:
|
||||
try:
|
||||
os.write(self.fd, '\0')
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def _installHandlerUsingSignal(fd):
|
||||
"""
|
||||
Install a signal handler which will write a byte to C{fd} when
|
||||
I{SIGCHLD} is received.
|
||||
|
||||
This is implemented by creating an instance of L{_Handler} with C{fd}
|
||||
and installing it as the signal handler.
|
||||
|
||||
@param fd: The file descriptor to which to write when I{SIGCHLD} is
|
||||
received.
|
||||
@type fd: C{int}
|
||||
"""
|
||||
if fd == -1:
|
||||
previous = signal.signal(signal.SIGCHLD, signal.SIG_DFL)
|
||||
else:
|
||||
previous = signal.signal(signal.SIGCHLD, _Handler(fd))
|
||||
if isinstance(previous, _Handler):
|
||||
return previous.fd
|
||||
return -1
|
||||
|
||||
|
||||
|
||||
def _installHandlerUsingSetWakeup(fd):
|
||||
"""
|
||||
Install a signal handler which will write a byte to C{fd} when
|
||||
I{SIGCHLD} is received.
|
||||
|
||||
This is implemented by installing an instance of L{_Handler} wrapped
|
||||
around C{None}, setting the I{SIGCHLD} handler as not allowed to
|
||||
interrupt system calls, and using L{signal.set_wakeup_fd} to do the
|
||||
actual writing.
|
||||
|
||||
@param fd: The file descriptor to which to write when I{SIGCHLD} is
|
||||
received.
|
||||
@type fd: C{int}
|
||||
"""
|
||||
if fd == -1:
|
||||
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
|
||||
else:
|
||||
signal.signal(signal.SIGCHLD, _Handler(None))
|
||||
siginterrupt(signal.SIGCHLD, False)
|
||||
return set_wakeup_fd(fd)
|
||||
|
||||
|
||||
|
||||
def _isDefaultHandler():
|
||||
"""
|
||||
Determine whether the I{SIGCHLD} handler is the default or not.
|
||||
"""
|
||||
return signal.getsignal(signal.SIGCHLD) == signal.SIG_DFL
|
||||
|
||||
|
||||
|
||||
def _cannotInstallHandler(fd):
|
||||
"""
|
||||
Fail to install a signal handler for I{SIGCHLD}.
|
||||
|
||||
This implementation is used when the supporting code for the other
|
||||
implementations is unavailable (on Python versions 2.5 and older where
|
||||
neither the L{twisted.internet._sigchld} extension nor the standard
|
||||
L{signal} module is available).
|
||||
|
||||
@param fd: Ignored; only for compatibility with the other
|
||||
implementations of this interface.
|
||||
|
||||
@raise RuntimeError: Always raised to indicate no I{SIGCHLD} handler can
|
||||
be installed.
|
||||
"""
|
||||
raise RuntimeError("Cannot install a SIGCHLD handler")
|
||||
|
||||
|
||||
|
||||
def _cannotDetermineDefault():
|
||||
raise RuntimeError("No usable signal API available")
|
||||
|
||||
|
||||
|
||||
if set_wakeup_fd is not None:
|
||||
msg('using set_wakeup_fd')
|
||||
installHandler = _installHandlerUsingSetWakeup
|
||||
isDefaultHandler = _isDefaultHandler
|
||||
elif _extInstallHandler is not None:
|
||||
msg('using _sigchld')
|
||||
installHandler = _extInstallHandler
|
||||
isDefaultHandler = _extIsDefaultHandler
|
||||
elif signal is not None:
|
||||
msg('using signal module')
|
||||
installHandler = _installHandlerUsingSignal
|
||||
isDefaultHandler = _isDefaultHandler
|
||||
else:
|
||||
msg('nothing unavailable')
|
||||
installHandler = _cannotInstallHandler
|
||||
isDefaultHandler = _cannotDetermineDefault
|
||||
|
34
vendor/Twisted-10.0.0/twisted/internet/base.py
vendored
34
vendor/Twisted-10.0.0/twisted/internet/base.py
vendored
@ -1,5 +1,5 @@
|
||||
# -*- test-case-name: twisted.test.test_internet -*-
|
||||
# Copyright (c) 2001-2009 Twisted Matrix Laboratories.
|
||||
# Copyright (c) 2001-2010 Twisted Matrix Laboratories.
|
||||
# See LICENSE for details.
|
||||
|
||||
"""
|
||||
@ -22,7 +22,7 @@ from twisted.internet.interfaces import IResolverSimple, IReactorPluggableResolv
|
||||
from twisted.internet.interfaces import IConnector, IDelayedCall
|
||||
from twisted.internet import fdesc, main, error, abstract, defer, threads
|
||||
from twisted.python import log, failure, reflect
|
||||
from twisted.python.runtime import seconds as runtimeSeconds, platform, platformType
|
||||
from twisted.python.runtime import seconds as runtimeSeconds, platform
|
||||
from twisted.internet.defer import Deferred, DeferredList
|
||||
from twisted.persisted import styles
|
||||
|
||||
@ -468,6 +468,7 @@ class ReactorBase(object):
|
||||
|
||||
if platform.supportsThreads():
|
||||
self._initThreads()
|
||||
self.installWaker()
|
||||
|
||||
# override in subclasses
|
||||
|
||||
@ -889,7 +890,6 @@ class ReactorBase(object):
|
||||
def _initThreads(self):
|
||||
self.usingThreads = True
|
||||
self.resolver = ThreadedResolver(self)
|
||||
self.installWaker()
|
||||
|
||||
def callFromThread(self, f, *args, **kw):
|
||||
"""
|
||||
@ -914,6 +914,9 @@ class ReactorBase(object):
|
||||
self.threadpoolShutdownID = self.addSystemEventTrigger(
|
||||
'during', 'shutdown', self._stopThreadPool)
|
||||
|
||||
def _uninstallHandler(self):
|
||||
pass
|
||||
|
||||
def _stopThreadPool(self):
|
||||
"""
|
||||
Stop the reactor threadpool. This method is only valid if there
|
||||
@ -1109,31 +1112,6 @@ class _SignalReactorMixin:
|
||||
if hasattr(signal, "SIGBREAK"):
|
||||
signal.signal(signal.SIGBREAK, self.sigBreak)
|
||||
|
||||
if platformType == 'posix':
|
||||
signal.signal(signal.SIGCHLD, self._handleSigchld)
|
||||
# Also call the signal handler right now, in case we missed any
|
||||
# signals before we installed it. This should only happen if
|
||||
# someone used spawnProcess before calling reactor.run (and the
|
||||
# process also exited already).
|
||||
self._handleSigchld(signal.SIGCHLD, None)
|
||||
|
||||
|
||||
def _handleSigchld(self, signum, frame, _threadSupport=platform.supportsThreads()):
|
||||
"""
|
||||
Reap all processes on SIGCHLD.
|
||||
|
||||
This gets called on SIGCHLD. We do no processing inside a signal
|
||||
handler, as the calls we make here could occur between any two
|
||||
python bytecode instructions. Deferring processing to the next
|
||||
eventloop round prevents us from violating the state constraints
|
||||
of arbitrary classes.
|
||||
"""
|
||||
from twisted.internet.process import reapAllProcesses
|
||||
if _threadSupport:
|
||||
self.callFromThread(reapAllProcesses)
|
||||
else:
|
||||
self.callLater(0, reapAllProcesses)
|
||||
|
||||
|
||||
def startRunning(self, installSignalHandlers=True):
|
||||
"""
|
||||
|
@ -1,4 +1,4 @@
|
||||
# -*- test-case-name: twisted.internet.test.test_gtk2reactor -*-
|
||||
# -*- test-case-name: twisted.internet.test -*-
|
||||
# Copyright (c) 2001-2010 Twisted Matrix Laboratories.
|
||||
# See LICENSE for details.
|
||||
|
||||
@ -21,8 +21,10 @@ integration.
|
||||
"""
|
||||
|
||||
# System Imports
|
||||
import sys
|
||||
import sys, signal
|
||||
|
||||
from zope.interface import implements
|
||||
|
||||
try:
|
||||
if not hasattr(sys, 'frozen'):
|
||||
# Don't want to check this for py2exe
|
||||
@ -41,7 +43,7 @@ if hasattr(gobject, "threads_init"):
|
||||
from twisted.python import log, runtime, failure
|
||||
from twisted.python.compat import set
|
||||
from twisted.internet.interfaces import IReactorFDSet
|
||||
from twisted.internet import main, posixbase, error, selectreactor
|
||||
from twisted.internet import main, base, posixbase, error, selectreactor
|
||||
|
||||
POLL_DISCONNECTED = gobject.IO_HUP | gobject.IO_ERR | gobject.IO_NVAL
|
||||
|
||||
@ -104,6 +106,25 @@ class Gtk2Reactor(posixbase.PosixReactorBase):
|
||||
self.__crash = _our_mainquit
|
||||
self.__run = gtk.main
|
||||
|
||||
|
||||
if runtime.platformType == 'posix':
|
||||
def _handleSignals(self):
|
||||
# Let the base class do its thing, but pygtk is probably
|
||||
# going to stomp on us so go beyond that and set up some
|
||||
# signal handling which pygtk won't mess with. This would
|
||||
# be better done by letting this reactor select a
|
||||
# different implementation of installHandler for
|
||||
# _SIGCHLDWaker to use. Then, at least, we could fall
|
||||
# back to our extension module. See #4286.
|
||||
from twisted.internet.process import reapAllProcesses as _reapAllProcesses
|
||||
base._SignalReactorMixin._handleSignals(self)
|
||||
signal.signal(signal.SIGCHLD, lambda *a: self.callFromThread(_reapAllProcesses))
|
||||
if getattr(signal, "siginterrupt", None) is not None:
|
||||
signal.siginterrupt(signal.SIGCHLD, False)
|
||||
# Like the base, reap processes now in case a process
|
||||
# exited before the handlers above were installed.
|
||||
_reapAllProcesses()
|
||||
|
||||
# The input_add function in pygtk1 checks for objects with a
|
||||
# 'fileno' method and, if present, uses the result of that method
|
||||
# as the input source. The pygtk2 input_add does not do this. The
|
||||
|
140
vendor/Twisted-10.0.0/twisted/internet/posixbase.py
vendored
140
vendor/Twisted-10.0.0/twisted/internet/posixbase.py
vendored
@ -41,8 +41,7 @@ except ImportError:
|
||||
|
||||
processEnabled = False
|
||||
if platformType == 'posix':
|
||||
from twisted.internet import fdesc
|
||||
import process
|
||||
from twisted.internet import fdesc, process, _signals
|
||||
processEnabled = True
|
||||
|
||||
if platform.isWindows():
|
||||
@ -103,10 +102,19 @@ class _SocketWaker(log.Logger, styles.Ephemeral):
|
||||
|
||||
|
||||
|
||||
class _PipeWaker(log.Logger, styles.Ephemeral):
|
||||
class _FDWaker(object, log.Logger, styles.Ephemeral):
|
||||
"""
|
||||
The I{self-pipe trick<http://cr.yp.to/docs/selfpipe.html>}, used to wake
|
||||
up the main loop from another thread or a signal handler.
|
||||
|
||||
L{_FDWaker} is a base class for waker implementations based on
|
||||
writing to a pipe being monitored by the reactor.
|
||||
|
||||
@ivar o: The file descriptor for the end of the pipe which can be
|
||||
written to to wake up a reactor monitoring this waker.
|
||||
|
||||
@ivar i: The file descriptor which should be monitored in order to
|
||||
be awoken by this waker.
|
||||
"""
|
||||
disconnected = 0
|
||||
|
||||
@ -124,22 +132,13 @@ class _PipeWaker(log.Logger, styles.Ephemeral):
|
||||
fdesc._setCloseOnExec(self.o)
|
||||
self.fileno = lambda: self.i
|
||||
|
||||
|
||||
def doRead(self):
|
||||
"""Read some bytes from the pipe.
|
||||
"""
|
||||
Read some bytes from the pipe and discard them.
|
||||
"""
|
||||
fdesc.readFromFD(self.fileno(), lambda data: None)
|
||||
|
||||
def wakeUp(self):
|
||||
"""Write one byte to the pipe, and flush it.
|
||||
"""
|
||||
# We don't use fdesc.writeToFD since we need to distinguish
|
||||
# between EINTR (try again) and EAGAIN (do nothing).
|
||||
if self.o is not None:
|
||||
try:
|
||||
util.untilConcludes(os.write, self.o, 'x')
|
||||
except OSError, e:
|
||||
if e.errno != errno.EAGAIN:
|
||||
raise
|
||||
|
||||
def connectionLost(self, reason):
|
||||
"""Close both ends of my pipe.
|
||||
@ -154,25 +153,85 @@ class _PipeWaker(log.Logger, styles.Ephemeral):
|
||||
del self.i, self.o
|
||||
|
||||
|
||||
|
||||
class _UnixWaker(_FDWaker):
|
||||
"""
|
||||
This class provides a simple interface to wake up the event loop.
|
||||
|
||||
This is used by threads or signals to wake up the event loop.
|
||||
"""
|
||||
|
||||
def wakeUp(self):
|
||||
"""Write one byte to the pipe, and flush it.
|
||||
"""
|
||||
# We don't use fdesc.writeToFD since we need to distinguish
|
||||
# between EINTR (try again) and EAGAIN (do nothing).
|
||||
if self.o is not None:
|
||||
try:
|
||||
util.untilConcludes(os.write, self.o, 'x')
|
||||
except OSError, e:
|
||||
# XXX There is no unit test for raising the exception
|
||||
# for other errnos. See #4285.
|
||||
if e.errno != errno.EAGAIN:
|
||||
raise
|
||||
|
||||
|
||||
|
||||
if platformType == 'posix':
|
||||
_Waker = _PipeWaker
|
||||
_Waker = _UnixWaker
|
||||
else:
|
||||
# Primarily Windows and Jython.
|
||||
_Waker = _SocketWaker
|
||||
|
||||
|
||||
class _SIGCHLDWaker(_FDWaker):
|
||||
"""
|
||||
L{_SIGCHLDWaker} can wake up a reactor whenever C{SIGCHLD} is
|
||||
received.
|
||||
|
||||
@see: L{twisted.internet._signals}
|
||||
"""
|
||||
def __init__(self, reactor):
|
||||
_FDWaker.__init__(self, reactor)
|
||||
|
||||
|
||||
def install(self):
|
||||
"""
|
||||
Install the handler necessary to make this waker active.
|
||||
"""
|
||||
_signals.installHandler(self.o)
|
||||
|
||||
|
||||
def uninstall(self):
|
||||
"""
|
||||
Remove the handler which makes this waker active.
|
||||
"""
|
||||
_signals.installHandler(-1)
|
||||
|
||||
|
||||
def doRead(self):
|
||||
"""
|
||||
Having woken up the reactor in response to receipt of
|
||||
C{SIGCHLD}, reap the process which exited.
|
||||
|
||||
This is called whenever the reactor notices the waker pipe is
|
||||
writeable, which happens soon after any call to the C{wakeUp}
|
||||
method.
|
||||
"""
|
||||
_FDWaker.doRead(self)
|
||||
process.reapAllProcesses()
|
||||
|
||||
|
||||
|
||||
class PosixReactorBase(_SignalReactorMixin, ReactorBase):
|
||||
"""
|
||||
A basis for reactors that use file descriptors.
|
||||
|
||||
@ivar _childWaker: C{None} or a reference to the L{_SIGCHLDWaker}
|
||||
which is used to properly notice child process termination.
|
||||
"""
|
||||
implements(IReactorArbitrary, IReactorTCP, IReactorUDP, IReactorMulticast)
|
||||
|
||||
def __init__(self):
|
||||
ReactorBase.__init__(self)
|
||||
if self.usingThreads or platformType == "posix":
|
||||
self.installWaker()
|
||||
|
||||
|
||||
def _disconnectSelectable(self, selectable, why, isRead, faildict={
|
||||
error.ConnectionDone: failure.Failure(error.ConnectionDone()),
|
||||
error.ConnectionLost: failure.Failure(error.ConnectionLost())
|
||||
@ -209,6 +268,43 @@ class PosixReactorBase(_SignalReactorMixin, ReactorBase):
|
||||
self.addReader(self.waker)
|
||||
|
||||
|
||||
_childWaker = None
|
||||
def _handleSignals(self):
|
||||
"""
|
||||
Extend the basic signal handling logic to also support
|
||||
handling SIGCHLD to know when to try to reap child processes.
|
||||
"""
|
||||
_SignalReactorMixin._handleSignals(self)
|
||||
if platformType == 'posix':
|
||||
if not self._childWaker:
|
||||
self._childWaker = _SIGCHLDWaker(self)
|
||||
self._internalReaders.add(self._childWaker)
|
||||
self.addReader(self._childWaker)
|
||||
self._childWaker.install()
|
||||
# Also reap all processes right now, in case we missed any
|
||||
# signals before we installed the SIGCHLD waker/handler.
|
||||
# This should only happen if someone used spawnProcess
|
||||
# before calling reactor.run (and the process also exited
|
||||
# already).
|
||||
process.reapAllProcesses()
|
||||
|
||||
def _uninstallHandler(self):
|
||||
"""
|
||||
If a child waker was created and installed, uninstall it now.
|
||||
|
||||
Since this disables reactor functionality and is only called
|
||||
when the reactor is stopping, it doesn't provide any directly
|
||||
useful functionality, but the cleanup of reactor-related
|
||||
process-global state that it does helps in unit tests
|
||||
involving multiple reactors and is generally just a nice
|
||||
thing.
|
||||
"""
|
||||
# XXX This would probably be an alright place to put all of
|
||||
# the cleanup code for all internal readers (here and in the
|
||||
# base class, anyway). See #3063 for that cleanup task.
|
||||
if self._childWaker:
|
||||
self._childWaker.uninstall()
|
||||
|
||||
# IReactorProcess
|
||||
|
||||
def spawnProcess(self, processProtocol, executable, args=(),
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2008-2009 Twisted Matrix Laboratories.
|
||||
# Copyright (c) 2008-2010 Twisted Matrix Laboratories.
|
||||
# See LICENSE for details.
|
||||
|
||||
"""
|
||||
@ -95,6 +95,7 @@ class ReactorBuilder:
|
||||
# branch that fixes it.
|
||||
#
|
||||
# -exarkun
|
||||
reactor._uninstallHandler()
|
||||
if getattr(reactor, '_internalReaders', None) is not None:
|
||||
for reader in reactor._internalReaders:
|
||||
reactor.removeReader(reader)
|
||||
@ -119,10 +120,14 @@ class ReactorBuilder:
|
||||
try:
|
||||
reactor = self.reactorFactory()
|
||||
except:
|
||||
# Unfortunately, not all errors which result in a reactor being
|
||||
# unusable are detectable without actually instantiating the
|
||||
# reactor. So we catch some more here and skip the test if
|
||||
# necessary.
|
||||
# Unfortunately, not all errors which result in a reactor
|
||||
# being unusable are detectable without actually
|
||||
# instantiating the reactor. So we catch some more here
|
||||
# and skip the test if necessary. We also log it to aid
|
||||
# with debugging, but flush the logged error so the test
|
||||
# doesn't fail.
|
||||
log.err(None, "Failed to install reactor")
|
||||
self.flushLoggedErrors()
|
||||
raise SkipTest(Failure().getErrorMessage())
|
||||
else:
|
||||
if self.requiredInterface is not None:
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2008-2009 Twisted Matrix Laboratories.
|
||||
# Copyright (c) 2008-2010 Twisted Matrix Laboratories.
|
||||
# See LICENSE for details.
|
||||
|
||||
"""
|
||||
@ -9,7 +9,7 @@ __metaclass__ = type
|
||||
|
||||
import os, sys, signal, threading
|
||||
|
||||
from twisted.trial.unittest import TestCase
|
||||
from twisted.trial.unittest import TestCase, SkipTest
|
||||
from twisted.internet.test.reactormixins import ReactorBuilder
|
||||
from twisted.python.compat import set
|
||||
from twisted.python.log import msg, err
|
||||
@ -22,6 +22,7 @@ from twisted.internet.protocol import ProcessProtocol
|
||||
from twisted.internet.error import ProcessDone, ProcessTerminated
|
||||
|
||||
|
||||
|
||||
class _ShutdownCallbackProcessProtocol(ProcessProtocol):
|
||||
"""
|
||||
An L{IProcessProtocol} which fires a Deferred when the process it is
|
||||
@ -174,6 +175,50 @@ class ProcessTestsBuilderBase(ReactorBuilder):
|
||||
self.runReactor(reactor)
|
||||
|
||||
|
||||
def test_systemCallUninterruptedByChildExit(self):
|
||||
"""
|
||||
If a child process exits while a system call is in progress, the system
|
||||
call should not be interfered with. In particular, it should not fail
|
||||
with EINTR.
|
||||
|
||||
Older versions of Twisted installed a SIGCHLD handler on POSIX without
|
||||
using the feature exposed by the SA_RESTART flag to sigaction(2). The
|
||||
most noticable problem this caused was for blocking reads and writes to
|
||||
sometimes fail with EINTR.
|
||||
"""
|
||||
reactor = self.buildReactor()
|
||||
|
||||
# XXX Since pygobject/pygtk wants to use signal.set_wakeup_fd,
|
||||
# we aren't actually providing this functionality on the glib2
|
||||
# or gtk2 reactors yet. See #4286 for the possibility of
|
||||
# improving this.
|
||||
skippedReactors = ["Glib2Reactor", "Gtk2Reactor"]
|
||||
hasSigInterrupt = getattr(signal, "siginterrupt", None) is not None
|
||||
reactorClassName = reactor.__class__.__name__
|
||||
if reactorClassName in skippedReactors and not hasSigInterrupt:
|
||||
raise SkipTest(
|
||||
"%s is not supported without siginterrupt" % reactorClassName)
|
||||
|
||||
result = []
|
||||
|
||||
def f():
|
||||
try:
|
||||
f1 = os.popen('%s -c "import time; time.sleep(0.1)"' %
|
||||
(sys.executable,))
|
||||
f2 = os.popen('%s -c "import time; time.sleep(0.5); print \'Foo\'"' %
|
||||
(sys.executable,))
|
||||
# The read call below will blow up with an EINTR from the
|
||||
# SIGCHLD from the first process exiting if we install a
|
||||
# SIGCHLD handler without SA_RESTART. (which we used to do)
|
||||
result.append(f2.read())
|
||||
finally:
|
||||
reactor.stop()
|
||||
|
||||
reactor.callWhenRunning(f)
|
||||
self.runReactor(reactor)
|
||||
self.assertEqual(result, ["Foo\n"])
|
||||
|
||||
|
||||
|
||||
class ProcessTestsBuilder(ProcessTestsBuilderBase):
|
||||
"""
|
||||
|
194
vendor/Twisted-10.0.0/twisted/internet/test/test_sigchld.py
vendored
Normal file
194
vendor/Twisted-10.0.0/twisted/internet/test/test_sigchld.py
vendored
Normal file
@ -0,0 +1,194 @@
|
||||
# Copyright (c) 2010 Twisted Matrix Laboratories.
|
||||
# See LICENSE for details.
|
||||
|
||||
"""
|
||||
Tests for L{twisted.internet._sigchld}, an alternate, superior SIGCHLD
|
||||
monitoring API.
|
||||
"""
|
||||
|
||||
import os, signal, errno
|
||||
|
||||
from twisted.python.log import msg
|
||||
from twisted.trial.unittest import TestCase
|
||||
from twisted.internet.fdesc import setNonBlocking
|
||||
from twisted.internet._signals import installHandler, isDefaultHandler
|
||||
from twisted.internet._signals import _extInstallHandler, _extIsDefaultHandler
|
||||
from twisted.internet._signals import _installHandlerUsingSetWakeup, \
|
||||
_installHandlerUsingSignal, _isDefaultHandler
|
||||
|
||||
|
||||
class SIGCHLDTestsMixin:
|
||||
"""
|
||||
Mixin for L{TestCase} subclasses which defines several tests for
|
||||
I{installHandler} and I{isDefaultHandler}. Subclasses are expected to
|
||||
define C{self.installHandler} and C{self.isDefaultHandler} to invoke the
|
||||
implementation to be tested.
|
||||
"""
|
||||
|
||||
if getattr(signal, 'SIGCHLD', None) is None:
|
||||
skip = "Platform does not have SIGCHLD"
|
||||
|
||||
def installHandler(self, fd):
|
||||
"""
|
||||
Override in a subclass to install a SIGCHLD handler which writes a byte
|
||||
to the given file descriptor. Return the previously registered file
|
||||
descriptor.
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
def isDefaultHandler(self):
|
||||
"""
|
||||
Override in a subclass to determine if the current SIGCHLD handler is
|
||||
SIG_DFL or not. Return True if it is SIG_DFL, False otherwise.
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
def pipe(self):
|
||||
"""
|
||||
Create a non-blocking pipe which will be closed after the currently
|
||||
running test.
|
||||
"""
|
||||
read, write = os.pipe()
|
||||
self.addCleanup(os.close, read)
|
||||
self.addCleanup(os.close, write)
|
||||
setNonBlocking(read)
|
||||
setNonBlocking(write)
|
||||
return read, write
|
||||
|
||||
|
||||
def setUp(self):
|
||||
"""
|
||||
Save the current SIGCHLD handler as reported by L{signal.signal} and
|
||||
the current file descriptor registered with L{installHandler}.
|
||||
"""
|
||||
handler = signal.getsignal(signal.SIGCHLD)
|
||||
if handler != signal.SIG_DFL:
|
||||
self.signalModuleHandler = handler
|
||||
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
|
||||
else:
|
||||
self.signalModuleHandler = None
|
||||
|
||||
self.oldFD = self.installHandler(-1)
|
||||
|
||||
if self.signalModuleHandler is not None and self.oldFD != -1:
|
||||
msg("SIGCHLD setup issue: %r %r" % (self.signalModuleHandler, self.oldFD))
|
||||
raise RuntimeError("You used some signal APIs wrong! Try again.")
|
||||
|
||||
|
||||
def tearDown(self):
|
||||
"""
|
||||
Restore whatever signal handler was present when setUp ran.
|
||||
"""
|
||||
# If tests set up any kind of handlers, clear them out.
|
||||
self.installHandler(-1)
|
||||
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
|
||||
|
||||
# Now restore whatever the setup was before the test ran.
|
||||
if self.signalModuleHandler is not None:
|
||||
signal.signal(signal.SIGCHLD, self.signalModuleHandler)
|
||||
elif self.oldFD != -1:
|
||||
self.installHandler(self.oldFD)
|
||||
|
||||
|
||||
def test_isDefaultHandler(self):
|
||||
"""
|
||||
L{isDefaultHandler} returns true if the SIGCHLD handler is SIG_DFL,
|
||||
false otherwise.
|
||||
"""
|
||||
self.assertTrue(self.isDefaultHandler())
|
||||
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
|
||||
self.assertFalse(self.isDefaultHandler())
|
||||
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
|
||||
self.assertTrue(self.isDefaultHandler())
|
||||
signal.signal(signal.SIGCHLD, lambda *args: None)
|
||||
self.assertFalse(self.isDefaultHandler())
|
||||
|
||||
|
||||
def test_returnOldFD(self):
|
||||
"""
|
||||
L{installHandler} returns the previously registered file descriptor.
|
||||
"""
|
||||
read, write = self.pipe()
|
||||
oldFD = self.installHandler(write)
|
||||
self.assertEqual(self.installHandler(oldFD), write)
|
||||
|
||||
|
||||
def test_uninstallHandler(self):
|
||||
"""
|
||||
C{installHandler(-1)} removes the SIGCHLD handler completely.
|
||||
"""
|
||||
read, write = self.pipe()
|
||||
self.assertTrue(self.isDefaultHandler())
|
||||
self.installHandler(write)
|
||||
self.assertFalse(self.isDefaultHandler())
|
||||
self.installHandler(-1)
|
||||
self.assertTrue(self.isDefaultHandler())
|
||||
|
||||
|
||||
def test_installHandler(self):
|
||||
"""
|
||||
The file descriptor passed to L{installHandler} has a byte written to
|
||||
it when SIGCHLD is delivered to the process.
|
||||
"""
|
||||
read, write = self.pipe()
|
||||
self.installHandler(write)
|
||||
|
||||
exc = self.assertRaises(OSError, os.read, read, 1)
|
||||
self.assertEqual(exc.errno, errno.EAGAIN)
|
||||
|
||||
os.kill(os.getpid(), signal.SIGCHLD)
|
||||
|
||||
self.assertEqual(len(os.read(read, 5)), 1)
|
||||
|
||||
|
||||
|
||||
class DefaultSIGCHLDTests(SIGCHLDTestsMixin, TestCase):
|
||||
"""
|
||||
Tests for whatever implementation is selected for the L{installHandler}
|
||||
and L{isDefaultHandler} APIs.
|
||||
"""
|
||||
installHandler = staticmethod(installHandler)
|
||||
isDefaultHandler = staticmethod(isDefaultHandler)
|
||||
|
||||
|
||||
|
||||
class ExtensionSIGCHLDTests(SIGCHLDTestsMixin, TestCase):
|
||||
"""
|
||||
Tests for the L{twisted.internet._sigchld} implementation of the
|
||||
L{installHandler} and L{isDefaultHandler} APIs.
|
||||
"""
|
||||
try:
|
||||
import twisted.internet._sigchld
|
||||
except ImportError:
|
||||
skip = "twisted.internet._sigchld is not available"
|
||||
|
||||
installHandler = _extInstallHandler
|
||||
isDefaultHandler = _extIsDefaultHandler
|
||||
|
||||
|
||||
|
||||
class SetWakeupSIGCHLDTests(SIGCHLDTestsMixin, TestCase):
|
||||
"""
|
||||
Tests for the L{signal.set_wakeup_fd} implementation of the
|
||||
L{installHandler} and L{isDefaultHandler} APIs.
|
||||
"""
|
||||
# Check both of these. On Ubuntu 9.10 (to take an example completely at
|
||||
# random), Python 2.5 has set_wakeup_fd but not siginterrupt.
|
||||
if (getattr(signal, 'set_wakeup_fd', None) is None
|
||||
or getattr(signal, 'siginterrupt', None) is None):
|
||||
skip = "signal.set_wakeup_fd is not available"
|
||||
|
||||
installHandler = staticmethod(_installHandlerUsingSetWakeup)
|
||||
isDefaultHandler = staticmethod(_isDefaultHandler)
|
||||
|
||||
|
||||
|
||||
class PlainSignalModuleSIGCHLDTests(SIGCHLDTestsMixin, TestCase):
|
||||
"""
|
||||
Tests for the L{signal.signal} implementation of the L{installHandler}
|
||||
and L{isDefaultHandler} APIs.
|
||||
"""
|
||||
installHandler = staticmethod(_installHandlerUsingSignal)
|
||||
isDefaultHandler = staticmethod(_isDefaultHandler)
|
4
vendor/Twisted-10.0.0/twisted/topfiles/733.bugfix
vendored
Normal file
4
vendor/Twisted-10.0.0/twisted/topfiles/733.bugfix
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
On POSIX platforms, reactors now support child processes in a way
|
||||
which doesn't cause other syscalls to sometimes fail with EINTR (if
|
||||
running on Python 2.6 or if Twisted's extension modules have been
|
||||
built).
|
@ -1,9 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright (c) 2001-2009 Twisted Matrix Laboratories.
|
||||
# Copyright (c) 2001-2010 Twisted Matrix Laboratories.
|
||||
# See LICENSE for details.
|
||||
|
||||
|
||||
"""
|
||||
Distutils installer for Twisted.
|
||||
"""
|
||||
@ -47,9 +45,11 @@ extensions = [
|
||||
'-framework','CoreServices',
|
||||
'-framework','Carbon'],
|
||||
condition=lambda builder: sys.platform == "darwin"),
|
||||
|
||||
Extension("twisted.python._initgroups",
|
||||
["twisted/python/_initgroups.c"]),
|
||||
Extension("twisted.internet._sigchld",
|
||||
["twisted/internet/_sigchld.c"],
|
||||
condition=lambda builder: sys.platform != "win32"),
|
||||
]
|
||||
|
||||
# Figure out which plugins to include: all plugins except subproject ones
|
||||
|
18
vendor/tornado/demos/appengine/blog.py
vendored
18
vendor/tornado/demos/appengine/blog.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import functools
|
||||
import markdown
|
||||
|
18
vendor/tornado/demos/auth/authdemo.py
vendored
18
vendor/tornado/demos/auth/authdemo.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import tornado.auth
|
||||
import tornado.escape
|
||||
|
18
vendor/tornado/demos/blog/blog.py
vendored
18
vendor/tornado/demos/blog/blog.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import markdown
|
||||
import os.path
|
||||
|
18
vendor/tornado/demos/chat/chatdemo.py
vendored
18
vendor/tornado/demos/chat/chatdemo.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
import tornado.auth
|
||||
|
18
vendor/tornado/demos/facebook/facebook.py
vendored
18
vendor/tornado/demos/facebook/facebook.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
import os.path
|
||||
|
18
vendor/tornado/demos/facebook/uimodules.py
vendored
18
vendor/tornado/demos/facebook/uimodules.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import tornado.web
|
||||
|
||||
|
18
vendor/tornado/demos/helloworld/helloworld.py
vendored
18
vendor/tornado/demos/helloworld/helloworld.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import tornado.httpserver
|
||||
import tornado.ioloop
|
||||
|
18
vendor/tornado/setup.py
vendored
18
vendor/tornado/setup.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import distutils.core
|
||||
import sys
|
||||
|
18
vendor/tornado/tornado/__init__.py
vendored
18
vendor/tornado/tornado/__init__.py
vendored
@ -2,16 +2,16 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""The Tornado web server and tools."""
|
||||
|
18
vendor/tornado/tornado/auth.py
vendored
18
vendor/tornado/tornado/auth.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Implementations of various third-party authentication schemes.
|
||||
|
||||
|
18
vendor/tornado/tornado/autoreload.py
vendored
18
vendor/tornado/tornado/autoreload.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""A module to automatically restart the server when a module is modified.
|
||||
|
||||
|
18
vendor/tornado/tornado/database.py
vendored
18
vendor/tornado/tornado/database.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""A lightweight wrapper around MySQLdb."""
|
||||
|
||||
|
18
vendor/tornado/tornado/escape.py
vendored
18
vendor/tornado/tornado/escape.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Escaping/unescaping methods for HTML, JSON, URLs, and others."""
|
||||
|
||||
|
18
vendor/tornado/tornado/httpclient.py
vendored
18
vendor/tornado/tornado/httpclient.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Blocking and non-blocking HTTP client implementations using pycurl."""
|
||||
|
||||
|
18
vendor/tornado/tornado/httpserver.py
vendored
18
vendor/tornado/tornado/httpserver.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""A non-blocking, single-threaded HTTP server."""
|
||||
|
||||
|
18
vendor/tornado/tornado/ioloop.py
vendored
18
vendor/tornado/tornado/ioloop.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""A level-triggered I/O loop for non-blocking sockets."""
|
||||
|
||||
|
18
vendor/tornado/tornado/iostream.py
vendored
18
vendor/tornado/tornado/iostream.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""A utility class to write to and read from a non-blocking socket."""
|
||||
|
||||
|
18
vendor/tornado/tornado/locale.py
vendored
18
vendor/tornado/tornado/locale.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Translation methods for generating localized strings.
|
||||
|
||||
|
18
vendor/tornado/tornado/options.py
vendored
18
vendor/tornado/tornado/options.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""A command line parsing module that lets modules define their own options.
|
||||
|
||||
|
18
vendor/tornado/tornado/s3server.py
vendored
18
vendor/tornado/tornado/s3server.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Implementation of an S3-like storage server based on local files.
|
||||
|
||||
|
18
vendor/tornado/tornado/template.py
vendored
18
vendor/tornado/tornado/template.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""A simple template system that compiles templates to Python code.
|
||||
|
||||
|
18
vendor/tornado/tornado/web.py
vendored
18
vendor/tornado/tornado/web.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""The Tornado web framework.
|
||||
|
||||
|
18
vendor/tornado/tornado/websocket.py
vendored
18
vendor/tornado/tornado/websocket.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import functools
|
||||
import logging
|
||||
|
18
vendor/tornado/tornado/wsgi.py
vendored
18
vendor/tornado/tornado/wsgi.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Facebook
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""WSGI support for the Tornado web framework.
|
||||
|
||||
|
18
vendor/tornado/website/website.py
vendored
18
vendor/tornado/website/website.py
vendored
@ -2,17 +2,17 @@
|
||||
#
|
||||
# Copyright 2009 Bret Taylor
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import markdown
|
||||
import os
|
||||
|
Loading…
x
Reference in New Issue
Block a user