-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
415 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
bin | ||
lib | ||
include | ||
distribute*.gz | ||
.installed.cfg | ||
.mr.developer.cfg | ||
develop-eggs | ||
eggs | ||
var | ||
*.pyc | ||
*.egg-info | ||
src | ||
parts | ||
.ropeproject |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
============================= | ||
Get Started Quickly With Karl | ||
============================= | ||
|
||
PostgreSQL | ||
---------- | ||
|
||
Karl requires PostgreSQL be installed on your system. If you are on OSX, this | ||
is reported to work:: | ||
|
||
$ sudo port install postgresql90 | ||
$ sudo port install postgresql90-server | ||
|
||
Link pg_config to a place that is in the path: | ||
|
||
$ sudo ln -s /opt/local/lib/postgresql90/bin/pg_config /usr/local/bin/ | ||
|
||
Alternately, add /opt/local/lib/postgresql90/bin/ to your path. | ||
|
||
Buildout | ||
-------- | ||
Check out the buildout from github:: | ||
|
||
$ git clone git://github.com/karlproject/dev-buildout.git karl | ||
$ cd karl | ||
|
||
Create a virtual environment and run the buildout:: | ||
|
||
$ virtualenv -p python2.6 --no-site-packages . | ||
$ bin/python bootstrap.py | ||
$ bin/buildout | ||
|
||
Karl is now built and ready to run. Run Karl using Paste HTTP server in the | ||
foreground:: | ||
|
||
$ bin/karlserve serve | ||
|
||
Alternatively, you can use Paster:: | ||
|
||
$ bin/paster serve etc/karlserve.ini | ||
|
||
Visit the filesystem ZODB based test instance of Karl at:: | ||
|
||
http://localhost:6543/fs | ||
|
||
Default login and password are admin/admin. | ||
|
||
Relstorage | ||
---------- | ||
|
||
Create the user and database for the PostgreSQL/Relstroage based instance of | ||
Karl:: | ||
|
||
$ createuser -P karltest | ||
(Enter 'test' for password. Repeat. Answer 'n' to next three questions.) | ||
$ createdb -O karltest karltest | ||
|
||
Visit the Relstorage instance at:: | ||
|
||
http://localhost:6543/pg | ||
|
||
Later, if you want to blow away the database and start over:: | ||
|
||
$ dropdb karltest; createdb -O karltest karltest | ||
|
||
Customization Packages | ||
---------------------- | ||
|
||
Both instances are 'vanilla' instances of Karl which do not use any | ||
customization package. Most customers that are not OSI, going forward, will | ||
not use any customization package. To make the pg instance use the 'osi' | ||
customization package:: | ||
|
||
$ bin/karlserve settings set pg package osi | ||
$ bin/karlserve serve (restart if already running) | ||
|
||
To revert back to vanilla:: | ||
|
||
$ bin/karlserve settings remove pg package | ||
|
||
Localization of date formats | ||
---------------------------- | ||
|
||
Karl uses the Globalize javascript library to handle date formatting. It is | ||
recommended that whenever you need to use a date in a Karl or customization | ||
package template, you use Karl's globalize mechanism instead of formatting | ||
the date in Python code. | ||
|
||
To use gloablize, it's best to serve the date to the template in one of two | ||
formats: 'dd/mm/yyyy' for dates and 'dd/mm/yyyy hh:mm:ss' for dates with | ||
times. In the template, the date has to be by itself inside a tag and must | ||
use one of the globalize classes: | ||
|
||
- globalize-short-date: | ||
MM/dd/yyyy (02/15/2012) | ||
- globalize-long-date: | ||
MMMM dd yyyy (February 15 2012) | ||
- globalize-full-date: | ||
dddd, MMMM dd yyyy HH:mm (Wednesday, February 15 2012 12:00) | ||
- globalize-date-time: | ||
M/d/yyyy HH:mm (2/15/2012 12:00) | ||
- globalize-calendar-full: | ||
dddd M/d (Wednesday 2/15) | ||
- globalize-calendar-abbr: | ||
ddd M/d (Wed 2/15) | ||
- globalize-calendar-long: | ||
dddd, MMMM d (Wednesday, February 15) | ||
- globalize-calendar-list: | ||
ddd, MMM d (Wed, Feb 15) | ||
|
||
Globalize will convert the date to the proper format for the current | ||
culture on page load. Default culture is en-US. | ||
|
||
As an example:: | ||
|
||
<h3 class="globalize-long-date">02/15/2012</h3> | ||
|
||
Will display an h3 title with the date 'February 15 2012'. The same date will | ||
show up as '15 February 2012' if the user has 'europe' as date format default. | ||
|
||
Users can pick their date formatting culture when editing their own profile. | ||
Currently, the only options are US and Europe (uses en-GB). To set a | ||
different default for the whole site use karlserve settings:: | ||
|
||
$ bin/karlserve settings set pg date_format en-GB | ||
|
||
Hacking | ||
------- | ||
|
||
To hack on some source code:: | ||
|
||
$ bin/develop co karl | ||
$ bin/buildout -No | ||
|
||
Source code will now be in src/karl and src/karlserve. | ||
|
||
When playing with the code it's usually very useful to have some sample | ||
content added to the site, so that it looks a bit closer to a real site. | ||
The karlserve command can be used for that:: | ||
|
||
$ bin/karlserve samplegen | ||
|
||
Using this command 10 sample communities will be added to the site, each | ||
with their own wikis, blogs, calendars and files. | ||
|
||
The samplegen command does not create intranets, so they need to be added | ||
manually if they are required. To do that visit your instance at: | ||
|
||
http://localhost:6543/pg/add_community.html | ||
|
||
Fill the form to add a community, making sure the 'intranets' checkbox is | ||
selected. An 'intranets' tab will be visible on the community pages after | ||
that, from which new intranets can be added. | ||
|
||
If you need to work with versioning, you need to initialize the repository | ||
before the versioning UI will show up. This is done with:: | ||
|
||
$ bin/karlserve init_repozitory pg | ||
|
||
Enjoy! | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
############################################################################## | ||
# | ||
# Copyright (c) 2006 Zope Corporation and Contributors. | ||
# All Rights Reserved. | ||
# | ||
# This software is subject to the provisions of the Zope Public License, | ||
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. | ||
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED | ||
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS | ||
# FOR A PARTICULAR PURPOSE. | ||
# | ||
############################################################################## | ||
"""Bootstrap a buildout-based project | ||
Simply run this script in a directory containing a buildout.cfg. | ||
The script accepts buildout command-line options, so you can | ||
use the -c option to specify an alternate configuration file. | ||
$Id: bootstrap.py 75593 2007-05-06 21:11:27Z jim $ | ||
""" | ||
|
||
import os, shutil, sys, tempfile, urllib2 | ||
|
||
tmpeggs = tempfile.mkdtemp() | ||
|
||
try: | ||
import pkg_resources | ||
except ImportError: | ||
ez = {} | ||
exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py' | ||
).read() in ez | ||
ez['use_setuptools'](to_dir=tmpeggs, download_delay=0) | ||
|
||
import pkg_resources | ||
|
||
cmd = 'from setuptools.command.easy_install import main; main()' | ||
if sys.platform == 'win32': | ||
cmd = '"%s"' % cmd # work around spawn lamosity on windows | ||
|
||
ws = pkg_resources.working_set | ||
assert os.spawnle( | ||
os.P_WAIT, sys.executable, sys.executable, | ||
'-c', cmd, '-mqNxd', tmpeggs, | ||
'--index=http://karlhosting.github.com/2/production/index/', | ||
'zc.buildout==1.4.3', | ||
dict(os.environ, | ||
PYTHONPATH= | ||
ws.find(pkg_resources.Requirement.parse('setuptools')).location | ||
), | ||
) == 0 | ||
|
||
ws.add_entry(tmpeggs) | ||
ws.require('zc.buildout') | ||
import zc.buildout.buildout | ||
zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap']) | ||
shutil.rmtree(tmpeggs) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
[buildout] | ||
parts = | ||
client1 | ||
zopepy | ||
|
||
# Change the number here to change the version of Plone being used | ||
extends = | ||
http://download.zope.org/Zope2/index/2.12.18/versions.cfg | ||
http://dist.plone.org/release/4.0.7/versions.cfg | ||
# there's no KGS for plone.app.caching 1.0? | ||
http://good-py.appspot.com/release/plone.app.caching/1.0b2 | ||
http://good-py.appspot.com/release/plone.app.theming/1.0b4 | ||
versions = versions | ||
|
||
# Add additional egg download sources here. dist.plone.org contains archives | ||
# of Plone packages. | ||
find-links = | ||
http://dist.plone.org/release/4.0.7 | ||
http://dist.plone.org/thirdparty | ||
# Needed for optional eea.cache | ||
# http://eggrepo.eea.europa.eu/simple | ||
|
||
# Add additional eggs here | ||
eggs = | ||
relstorage | ||
python-Levenshtein | ||
feedparser | ||
|
||
# Reference any eggs you are developing here, one per line | ||
# e.g.: develop = src/my.package | ||
develop = | ||
|
||
[client1] | ||
# For more information on this step and configuration options see: | ||
# http://pypi.python.org/pypi/plone.recipe.zope2instance | ||
recipe = plone.recipe.zope2instance | ||
user = admin:admin | ||
http-address = 8081 | ||
blob-storage = var/blobstorage | ||
shared-blob = on | ||
debug-mode = off | ||
rel-storage = | ||
type postgres | ||
db %db% | ||
user %dbuser% | ||
passwd %dbpassword% | ||
|
||
# If you want Zope to know about any additional eggs, list them here. | ||
# This should include any development eggs you listed in develop-eggs above, | ||
# e.g. eggs = Plone my.package | ||
eggs = | ||
Plone | ||
${buildout:eggs} | ||
|
||
# If you want to register ZCML slugs for any packages, list them here. | ||
# e.g. zcml = my.package my.other.package | ||
zcml = | ||
|
||
[zopepy] | ||
# For more information on this step and configuration options see: | ||
# http://pypi.python.org/pypi/zc.recipe.egg | ||
recipe = zc.recipe.egg | ||
eggs = ${client1:eggs} | ||
interpreter = zopepy | ||
scripts = zopepy | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
The scripts in this folder are meant to be run as an argument to karlserve | ||
debug, eg: | ||
|
||
$ bin/karlserve debug pg -S helpers/checkrefs.py | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
""" | ||
Checks a ZODB database for referential integrity. Will print the zoids for any | ||
references found to non-existant objects. | ||
""" | ||
|
||
from collections import deque | ||
|
||
from ZODB.POSException import POSKeyError | ||
from ZODB.serialize import referencesf | ||
from ZODB.utils import p64, u64 | ||
|
||
def main(): | ||
storage = root._p_jar._storage | ||
connection = getattr(storage, '_load_conn', None) | ||
if connection is not None: | ||
check_relstorage(connection) | ||
else: | ||
check_any_storage(storage) | ||
|
||
|
||
def check_relstorage(connection): | ||
curr_objs = connection.cursor() | ||
cursor = connection.cursor() | ||
curr_objs.execute('select zoid, tid from current_object') | ||
for zoid, tid in curr_objs: | ||
cursor.execute('select state from object_state where zoid=%s and tid=%s', | ||
(zoid, tid)) | ||
state = cursor.fetchone()[0] | ||
if state is None: | ||
continue # How would an object have a null state? | ||
for ref_zoid in referencesf(state): | ||
ref_zoid = u64(ref_zoid) | ||
cursor.execute('select tid from current_object where zoid=%s', | ||
(ref_zoid,)) | ||
if cursor.rowcount == 0: | ||
print "Bad reference found", ref_zoid | ||
|
||
|
||
def check_any_storage(storage): | ||
checked = set() | ||
to_check = deque([p64(0)]) | ||
|
||
while to_check: | ||
check_oid = to_check.popleft() | ||
checked.add(check_oid) | ||
try: | ||
state, tid = storage.load(check_oid) | ||
except POSKeyError: | ||
print "Bad reference found", u64(check_oid) | ||
|
||
for reference in referencesf(state): | ||
if reference not in checked: | ||
to_check.append(reference) | ||
|
||
|
||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
virtualenv |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
name: plone | ||
|
||
mem: 64M | ||
|
||
instances: 1 | ||
|
||
framework: | ||
type: python | ||
runtime: python27 | ||
|
||
hooks: | ||
post-staging: | ||
- virtualenv . | ||
- ./bin/python bootstrap.py | ||
- ./bin/buildout | ||
|
||
services: | ||
postgresql: plonedb | ||
|
||
processes: | ||
web: ./bin/py ./start_plone.py | ||
|
||
ignores: | ||
- .git | ||
- .pyc | ||
- bin | ||
- eggs | ||
- var | ||
- develop-eggs | ||
- parts |
Oops, something went wrong.