valet
is a script that turns any directory into a simple wiki, complete with wikitext rendering, editing, and automatically committing changes to version control.
It's a single file with no strict requirements aside from bottle
.
I got a bee in my bonnet recently on making some improvements to valet
, so Merry Christmas to you all.
New features:
- The
/view/X
,/edit/X
, etc. paths have been removed in favor of using URL query arguments, e.g.X?edit
andX?delete
. CGI/WSGI path prefixes still work fine. - New file-management-related functionality, like creating new files and deleting files
- Search! A fancy search field will grep through documents and filenames for your query
- Lots of git-related functionality has been added, including:
- Displaying a dropdown that lets you view an old version of a file
- Displaying a table with detailed status about the last few changes to a file
- Lots of code cleanup, refactoring, and simplification
- Fixed a ton of bugs
- Lots of code changes to better comply with pylint (score 9.24)
- Added some basic unit/regression tests in
tests.py
I spent some time hacking on valet
this weekend, fixing a few bugs and adding one big new feature: CGI/WSGI support. Now if you link or rename valet
to something.cgi
or something.fcgi
, it will "Do The Right Thing" and operate as a proper webapp. (WSGI support requires flup
.)
This feature was required for me to run valet
as a lightweight wiki on my DreamHost server without interfering in that environment by opening a new port or leaving a long-running service around. I didn't add a configuration interface; if you're going to be linking or renaming the script, open it up and change the options hard-coded near the top.
Other changes and new features:
- Added a
mime
query argument to override the automatic filetype detection.- You can use this if, for instance, you have a Python script without the ".py" extension; add
?mime=text/x-python
to get it properly syntax-colored anyway.
- You can use this if, for instance, you have a Python script without the ".py" extension; add
- Added support for arbitrary URL prefixes.
- This just works automatically;
valet
will figure out where you put it and prepend that to all of the links instead of hardcoding "/view" etc. - This doesn't work super-well with Apache's
mod_rewrite
; it basically ignores the rewrite headers. This is a limitation ofbottle
but I'm not sure how to do it better anyway.
- This just works automatically;
Fixes:
- Added proper support for empty "edit" and "post" routes with a slash at the end (now it will complain about no file being provided instead of saying the route doesn't exist)
- Fixed an error output that caused problems when running as a CGI (now writes to stderr)
$ valet
Or, use some command line options:
$ valet [-d <path>] [-p <port>] [-r] [-s] [-v]
By default, valet
serves $CWD
; change this with -d <path>
.
Other options:
-r
: set readonly mode and disable editing-s
: set simple mode and disable all special-case processing (pygments, wikitext rendering, etc.)-v
: automatically commit edits into version control if possible- Currently only git is supported.
$ pip install valet
- Python 2.6+
bottle
Tested on:
- Centos 5.4 (python 2.6)
- Debian 6.0.4 (python 2.6)
- Gentoo (python 2.7)
- Mac OS X 10.7 (python 2.7)
- Ubuntu 12.04.1 (python 2.7)
- Windows 7 (python 2.7)
valet
supports lots of useful modules, which will be automatically enabled if present:
python-magic
: Better automatic file type detectionMarkdown
: Render "markdown" wikitext in filespython-creole
: Render "creole" wikitext in filestextile
: Render "textile" wikitext in filesdocutils
: Render "reStructuredText" wikitext in filespygments
: Adds syntax highlighting for source code files
Use the -s
/--simple
command-line option to disable these optional components.
- There's no security anywhere here; please, whatever you do, DON'T make this available over the Internet.
valet
has a readonly mode and attempts to jail reads and edits into its root directory, but be careful! bottle
'sstatic_file
function doesn't appear to handle UTF-8 data properly, or at least it doesn't show up right when I load a file that way.- The version of
python-magic
that ships with Ubuntu is broken; I worked around it as best I could.