2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-25 08:41:51 +00:00
Mirror of Troggle Repo but with issue tracking etc. https://expo.survex.com
Go to file
2020-07-06 01:24:43 +01:00
core person attribution of surveyed length working 2020-07-06 01:24:43 +01:00
debian Add info to debian instructions on creating troggle logfile (in /var/log) 2019-06-27 00:14:39 +01:00
docker Convert codebase for python3 usage 2020-05-24 20:56:27 +01:00
export Convert codebase for python3 usage 2020-05-24 20:56:27 +01:00
flatpages splays and alias splays implemented 2020-07-04 13:31:46 +01:00
helper decorator to check if user is logged in if settings.PUBLIC_SITE 2011-05-02 02:13:27 +01:00
media static files icons into troggle repo 2020-06-18 21:51:19 +01:00
parsers person attribution of surveyed length working 2020-07-06 01:24:43 +01:00
profiles static files redone 2020-06-18 21:50:16 +01:00
README Troggle code documentation pointers 2020-05-31 20:44:09 +01:00
templates person attribution of surveyed length working 2020-07-06 01:24:43 +01:00
wiki Note that the instructions for adding a survey are all wrong. 2012-08-05 00:35:02 +02:00
__init__.py [svn] Initial troggle checkin 2009-05-13 05:13:38 +01:00
.gitignore ignore autogenerated db schema & migrations files 2020-06-30 17:34:35 +01:00
categories.json static files redone 2020-06-18 21:50:16 +01:00
confusables.json static files redone 2020-06-18 21:50:16 +01:00
databaseReset.py SurvexBlocks now importing in deatil 2020-07-01 22:49:38 +01:00
deprecations.txt dj.-reg. 2.5.2 all tested. 2020-06-20 23:26:50 +01:00
diffsettings.txt Fixup after rebase and pre- scripts fixed 2020-06-20 17:19:50 +01:00
dump.py Dumps loaded data into a .sql file 2020-04-16 20:36:42 +01:00
lines-of-python.txt splays and alias splays implemented 2020-07-04 13:31:46 +01:00
lines-of-templates.txt splays and alias splays implemented 2020-07-04 13:31:46 +01:00
localsettingsdocker.py Cleanup secrets management, pre-run checks. 2020-06-20 16:51:07 +01:00
localsettingspotatohut.py Cleanup secrets management, pre-run checks. 2020-06-20 16:51:07 +01:00
localsettingsserver.py Cleanup secrets management, pre-run checks. 2020-06-20 16:51:07 +01:00
localsettingsubuntu.py Cleanup secrets management, pre-run checks. 2020-06-20 16:51:07 +01:00
localsettingswindows.py Cleanup secrets management, pre-run checks. 2020-06-20 16:51:07 +01:00
localsettingsWSL.py bin Makesurvexstation, survextitle, survexEquate 2020-06-24 01:57:20 +01:00
logbooksdump.py static files redone 2020-06-18 21:50:16 +01:00
manage.py Django 1.7 mostly working. Big refactor so probably bugs 2018-04-15 16:28:13 +01:00
middleware.py static files redone 2020-06-18 21:50:16 +01:00
modelviz.py Convert codebase for python3 usage 2020-05-24 20:56:27 +01:00
pre-push.sh bin Makesurvexstation, survextitle, survexEquate 2020-06-24 01:57:20 +01:00
pre-run.sh More security, middleware upgrade, dj-reg.2.5 2020-06-20 23:08:34 +01:00
README.txt cosmetic and moving a funciton 2020-06-23 22:44:06 +01:00
requirements.txt dj.-reg. 2.5.2 all tested. 2020-06-20 23:26:50 +01:00
reset-django.py More security, middleware upgrade, dj-reg.2.5 2020-06-20 23:08:34 +01:00
security-warnings.txt dj.-reg. 2.5.2 all tested. 2020-06-20 23:26:50 +01:00
settings.py clean up import statements: more specific 2020-06-22 00:03:23 +01:00
troggle-inspectdb.py SurvexBlocks now importing in deatil 2020-07-01 22:49:38 +01:00
urls.py clean up import statements: more specific 2020-06-22 00:03:23 +01:00
utils.py chaos monkey 2020-07-02 16:26:05 +01:00
wookey-exposerver-recipe.txt cleaner warnings but site_media still not ok 2020-06-18 12:10:42 +01:00
wsgi.py Django 1.7 wsgi.py 2018-04-15 16:29:30 +01:00

Troggle is an application for caving expedition data management, 
originally created for use on Cambridge University Caving Club (CUCC)expeditions 
and licensed under the GNU Lesser General Public License.

Troggle has been forked into two projects. The original one is maintained by Aron Curtis 
and is used for Erebus caves. The CUCC variant uses files as the definitive data, 
not the database and lives at http://expo.survex.com/repositories/troggle/.git/

Troggle setup
=============
1. git clone troggle into correct directory structure
2. install pip, django & patch django
3. configure django to recognise troggle 

Setting up directories
----------------------
- create a directory in which you also have the loser/, expoweb/ and drawings/ repositories
- git clone (see below) the current latest troggle from the 'python3' git branch into 
  a folder called 'troggle'
- all the 4 repos should now be siblings, and also siblings with expofiles/
- if you have those repos elsewhere, set up symlinks in the directory above troggle
  so that troggle thinks they are siblings

Troggle itself
-------------
Choose the directory where you will keep troggle, (which must be named "troggle")
and git clone troggle into it using the following command:

git clone git://expo.survex.com/troggle
or more reliably
git clone ssh://expo@expo.survex.com/home/expo/troggle
but you will have to set up the ssh key-exchange with the server to make that work.
Key-exchange instructions: http://expo.survex.com/handbook/computing/keyexchange.html

If you want to work on the source code and be able to commit, your account will need to be 
added to the troggle project members list. Contact wookey  at wookware dot org to get this set up.

Next, you need to fill in your local settings. Copy localsettingsWSL.py 
to a new file called localsettings.py and edit it and settings.py to match
your machine's file locations. 
Follow the instructions contained in the file to fill out your settings.

{ *TO BE FIXED*
  The localsettings-expo-live.py is the python2.7 settings for the server.
  These are all very out of date and need fixing:
  localsettingsubuntu.py
  localsettingsdocker.py
  localsettingswindows.py
  localsettingspotatohut.py
}

Python3, Django, and Database setup
-----------------------------------
Troggle with python3 requires Django 1.8.19 (16 June 2019)
For Django 1.19 see below.

Read this: https://docs.djangoproject.com/en/3.0/topics/install/

We are installing with python3.7.7 or 3.8.1
[ If you want to use python2.7 you presumably can work it out for yourself.
You should look at past revisions of this file in git to see what is required.
Also : https://linuxize.com/post/how-to-install-pip-on-ubuntu-20.04/ ]

Install Django using pip, not with apt.
Your Linux installation almost certainly already includes python3 and pip3 but
in case it doesn't install those like this:

$ sudo apt update
$ sudo apt dist-upgrade
$ sudo apt install python3
$ sudo apt install python3-pip

Now install django etc.
$ sudo pip3 install -r requirements.txt

where requirementsworks1.8.19.txt is:
Django==1.8.19
django-extensions==2.2.9
django-registration==2.4
Pillow==7.1.2
six==1.15.0
sqlparse==0.3.1
Unidecode==1.1.1

if you don't use sudo it will install them all in ~/.local/
and so will only be available for you, not everyone; and
the paths won't work to find troggle properly.

six and Unidecode handle some of the python2-3 conversions
and Pillow is an image handling package used to make
the prospecting map. tinymce is the wysiwyg in-browser
editor.

$ pip3 list -o
will list all the pip python packages installed.

[NB we should test whether later verisons of tinymce work.]

venv option
-----------
Or use a python3 virtual environment: (python3.5 not later)
$ cd troggle
$ cd ..
$ python3.5 -m venv pyth35d2
(creates folder with virtual env)
$ cd pyth35d2
$ source bin/activate
(now install everything )
$ pip install -r requirements.txt

This works if you need a specific version of python3
but doesn't really work with python2.7 as you also need to obtain
an elderly version of pip that will work and use and older virtual
environment utility

Patching the django installation
--------------------------------
Since django 1.10 is out of update-support, and since python3 has progressed against
the 2015 version that django is expecting, you need to patch the django
installation after installing. In the troggle folder you will find
django-patch/html_parser.py
copy this over the installed version of django on your machine:

$ cd troggle
$ sudo cp django-patch/html_parser.py /usr/local/lib/python3.7/dist-packages/django/utils/
or
$ cp django-patch/html_parser.py ~/.local/lib/python3.7/site-packages/django/utils/
if you didn't use sudo when installing everything using pip.

or if you are using a venv, then

$ cd <venv directory>/troggle
$ cp django-patch/html_parser.py lib/python3.7/site-packages/django/utils/html_parser.py
that's it.

Testing the django installation
-------------------------------
Test things by running these commands:
$ django-admin --version
$ django-admin 
It should show a list of commands and complain:
"..only Django core commands are listed as settings are not properly configured" 

If you get an error when running
$ django-admin
Then run django-admin like this:
python /usr/local/lib/python3.8/dist-packages/django/bin/django-admin.py
which should fix the paths. From now on you should be able to run 
$ django-admin 
from within any folder on your machine.

Now do
$ cd troggle
$ python manage.py

You should see the same list of commands that you saw with django-admin but wth 
a lot of extra ones and no complaints. This means it is reading at least some of your
settings correctly.

If you get an error your python sys.path is probably not set correctly yet. Do
$ python -m site
when you are in your troggle directory to see the list of paths python looks 
for when it is searching for packages (both django and troggle). 
Ensure that the path to the troggle/ directory is in the list.
It should be at the top, which is where the current working directory is.

Now:
python  manage.py check -v 3 --deploy
which will give security warnings for deployment.

python  manage.py check -Wall
Gives warnings of deprecated Django which should be fixed asap.

Registering troggle as a django application
-------------------------------------------
In your troggle directory run
$ django-admin 
and check you got the same output as before.

Then try 
$ python manage.py
It may not work. But if it does it will
now show a superset of the previous output: the [django] commands
available but also other options. Run
$ python manage.py check
$ python manage.py diffsettings
This last one shows everything set in global settings, settings and localsettings.
Anything different from global settings  (django built-in) has '###' appended.

$ python manage.py test -v 2
Tests that it can create a database from all the model files.

$ python manage.py migrate
Tests the uptodateness of your sqlite database.
$ python manage.py help migrate
explains what this does and gives extra command line options.

If you got an error traceback with
$ python manage.py
then the settings registration of troggle with django is incomplete.
Delete all your cached .pyc files and try again.
You probably have a mistake in your settings.py or localsettings.py files.

CSS and media files
-------------------
Temporarily we are not using the STATICFILES capability but are instead
serving css files from troggle/media/.. (see urls.py) using 
view_surveys.cssfilessingle 
i.e.
cssfilessingle() in core/view_surveys.py

Setting up survex
-----------------
You need to have survex installed as the command line tools 'cavern' and '3dtopos' are
used as part of the survex import process.
$ sudo apt install survex

Setting up tables and importing survey data
-------------------------------------------
Run 
$ sudo python databaseReset.py
from the troggle directory will give you instructions.

[ NB Adding a new year/expedition requires adding a column to the
folk/folk.csv table - a year doesn't exist until that is done.]

Database
--------
If you want to use MySQL or Postgresql, download and install them. 
However, you can also use Django with sqlite3, which is included in Python and thus requires no extra installation.

MariaDB database
----------------
Start it up with
$ sudo mysql -u -p
when it will prompt you to type in the password. Get this by reading the settings.py file in use on the server.
then
> CREATE DATABASE troggle;
> use troggle;
> exit;

Note the semicolons.

You can check the status of the db service:
$ sudo systemctl status mysql

You can start and stop the db service with
$ sudo systemctl restart mysql.service
$ sudo systemctl stop mysql.service
$ sudo systemctl start mysql.service

Running a Troggle server
------------------------
For high volume use, Troggle should be run using a web server like apache. 
However, a quick way to get started is to use the development server built into Django. 
This is limited though: directory redirection needs apache.

To do this, run 
$ python manage.py runserver 8000 -v 3
from the troggle directory. This runs it on port 8000 so you see the website
at http://localhost:8000/

Running a Troggle server with Apache
------------------------------------
Troggle also needs these aliases to be configured. These are set in 
/home/expo/config/apache/expo.conf
on the expo server.

At least these need setting:
DocumentRoot              /home/expo/expoweb
WSGIScriptAlias        /  /home/expo/troggle/wsgi.py
<Directory /home/expo/troggle>
	<Files wsgi.py>
		Require all granted
	</Files>
</Directory>

Alias       /expofiles    /home/expo/expofiles
Alias       /photos       /home/expo/webphotos
Alias       /map          /home/expo/expoweb/map
Alias       /javascript   /usr/share/javascript
Alias       /static/      /home/expo/static/
ScriptAlias /repositories /home/expo/config/apache/services/hgweb/hgweb.cgi

(The last is just for mercurial which will be remoived during 2020).

These two are not necessary as Django will serve these (see urls.py), but 
it may be very slightly faster for apache to serve them first:
Alias       /expofiles    /home/expo/expofiles
Alias       /static/      /home/expo/static/


Unlike the "runserver" method, apache requires a restart before it will use
any changed files:

apache2ctl stop
apache2ctl start

Experimental additions
----------------------
These are modern tools which help us document how troggle works.

pip install pygraphviz 
pip install pyparsing pydot # installs fine
django extension graph_models # https://django-extensions.readthedocs.io/en/latest/graph_models.html