{"id":13741102,"url":"https://github.com/dativebase/old-pyramid","last_synced_at":"2025-09-14T16:57:42.762Z","repository":{"id":39616797,"uuid":"72774392","full_name":"dativebase/old-pyramid","owner":"dativebase","description":"Online Linguistic Database (OLD)","archived":false,"fork":false,"pushed_at":"2023-05-23T00:57:25.000Z","size":41121,"stargazers_count":8,"open_issues_count":18,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-08T21:35:31.175Z","etag":null,"topics":["linguistics","linguistics-databases","pyramid-framework","python3"],"latest_commit_sha":null,"homepage":"http://www.onlinelinguisticdatabase.org/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dativebase.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.txt","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-03T18:23:33.000Z","updated_at":"2023-04-03T17:28:22.000Z","dependencies_parsed_at":"2024-01-07T18:10:44.841Z","dependency_job_id":null,"html_url":"https://github.com/dativebase/old-pyramid","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dativebase/old-pyramid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Fold-pyramid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Fold-pyramid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Fold-pyramid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Fold-pyramid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dativebase","download_url":"https://codeload.github.com/dativebase/old-pyramid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dativebase%2Fold-pyramid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275136757,"owners_count":25411709,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["linguistics","linguistics-databases","pyramid-framework","python3"],"created_at":"2024-08-03T04:00:55.451Z","updated_at":"2025-09-14T16:57:42.706Z","avatar_url":"https://github.com/dativebase.png","language":"Python","readme":".. image:: https://circleci.com/gh/dativebase/old-pyramid.svg?style=shield\n    :target: https://circleci.com/gh/dativebase/old-pyramid\n\n\n================================================================================\n  The Online Linguistic Database (OLD)\n================================================================================\n\n.. image:: OLD-logo.png\n   :align: left\n\nThe Online Linguistic Database (OLD) is software for linguistic fieldwork. It\nhelps groups of linguists, language documenters, and/or language community\nmembers to collaboratively build a web-accessible database of their language\ndata.\n\n\nFeatures\n================================================================================\n\n- Multi-user database creation\n- Advanced search\n- Automatic morpheme cross-referencing\n- Configurable validation\n- Morphological parser \u0026 phonology builder\n- Text creation\n- User access control\n- Documentation\n- Open source\n- Graphical User Interface: Dative\n- RESTful JSON API\n\nFor additional information, see the `OLD Web Site`_.\n\n`Dative`_ is a GUI for the OLD. See the `Dative source code`_, `Dative's web\nsite`_, or the `Dative app`_ for more information.\n\n\nDeployment\n===============================================================================\n\nDeploying the OLD means:\n\n1. downloading its source code and installing it, including its Python\n   dependencies;\n2. installing its operating system dependencies (e.g., Ffmpeg, foma);\n3. making configuration decisions, e.g., the name of the MySQL database to use;\n4. creating its database tables and needed directory structure; and\n5. serving it.\n\n\nDevelopment Deployment using Docker Compose\n-------------------------------------------------------------------------------\n\nThe recommended way of creating a full DativeBase (i.e., Dative and OLD)\ndevelopment deployment is by following the `DativeBase Docker Compose\ninstructions`_.\n\n\nDeploying locally using Vagrant and Ansible\n-------------------------------------------------------------------------------\n\nThe OLD and Dative can also be installed locally for development purposes on a\nvirtual machine using the `Dative/OLD Vagrant/Ansible deploy scripts`_::\n\n    $ git clone git@github.com:dativebase/deploy-dative-old.git\n    $ cd deploy-dative-old/playbooks/dative-old\n    $ ansible-galaxy install -f -p roles/ -r requirements.yml\n    $ vagrant up\n\nIf the above works, you should see something like the following::\n\n    PLAY RECAP *********************************************************************\n    dative-old-local           : ok=84   changed=31   unreachable=0    failed=0\n\nAnd Dative and the OLD should be accessible at the following URLs:\n\n- Dative at http://192.169.169.192:8000\n- OLD instance #1 at http://192.169.169.192/testold/\n- OLD instance #2 at http://192.169.169.192/testold2/\n\nThe above commands assume you have Vagrant (\u003e= 1.7) installed and Ansible (v.\n2.1.1.0) installed. These commands will install the OLD and its dependencies\n(foma, MITLM, ffmpeg, TGrep2) on a virtual machine running Ubuntu 14.04; they\nwill configure and serve two OLD instances as well as the Dative GUI. More\ndetails are available at\nhttps://github.com/dativebase/deploy-dative-old/tree/master/playbooks/dative-old.\n\n\nBuilding and running the OLD in a Docker container\n-------------------------------------------------------------------------------\n\nBuild the OLD docker image::\n\n    $ docker build -t dativebase/old .\n\nRun the old container and launch a bash sell inside it::\n\n    $ docker run -it dativebase/old bash\n    #\n\nConfirm that Python 3.6, Ffmpeg, foma, TGrep2, and MITLM are installed::\n\n    # python3.6 -V\n    Python 3.6.3\n    # ffmpeg -version\n    ffmpeg version 3.4.1-1~16.04.york0 Copyright (c) 2000-2017 the FFmpeg developers\n    # foma -v\n    foma 0.9.18alpha\n    # tgrep2 -h\n    TGrep2 version 1.15\n    # estimate-ngram -h\n    MIT Language Modeling Toolkit 0.4.2\n\nAfter building the image as per above, you may wish to push it to Docker Hub::\n\n    $ docker tag dativebase/old jrwdunham/old-pyramid:2021-07-01\n    $ docker push jrwdunham/old-pyramid:2021-07-01\n\nThe above may require logging out and then back in again::\n\n    $ docker logout\n    $ docker login\n\n\n\nInstallation\n===============================================================================\n\nTo install the OLD manually from source, create and activate a Python3 virtual\nenvironment, clone the OLD source, and use pip to install its dependencies::\n\n    $ virtualenv -p /path/to/python3/executable env\n    $ source env/bin/activate\n    $ git clone git@github.com:dativebase/old-pyramid.git\n    $ cd old-pyramid\n    $ pip install -r requirements.txt -e .\n\n\nBuild the Database Tables\n===============================================================================\n\nYou must manually create the MySQL database that you expect to use for each OLD\ninstance. Here is an example (which assumes a pre-existing user named ``old``)::\n\n    mysql\u003e CREATE DATABASE old DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_bin;\n    mysql\u003e GRANT ALL PRIVILEGES ON old.* TO 'old'@'localhost';\n\nAfter installing the OLD, the `initialize_old` executable should be in your\nPATH. Calling it will create the database tables, add some default values\n(e.g., default users), and will create the directory structure scaffolding::\n\n    $ initialize_old config.ini\n\nTo control the configuration (e.g., the database user, password, host, etc.)\nyou can modify the config file ``config.ini`` or, better yet, use environment\nvariables (see below).\n\n\nServe the OLD\n===============================================================================\n\nYou can use `pserve`_ to serve the OLD::\n\n    $ pserve config.ini\n\nAlternatively, use the serve.sh convenience shell script, providing host and\nport values as environment variables, if desired::\n\n    $ OLD_PORT=62008 ./serve.sh\n\nNow if you navigate to http://localhost:62008/old/ you should see a big JSON\nobject that describes the OLD's API. If you install `Dative`_, you can use it to\ninteract with the OLD.\n\n\nEnvironment Variable Configuration\n===============================================================================\n\nServing the OLD and building its database tables requires configuration which\ncan come from directly modifying the config file (config.ini) or from setting\nspecific environment variables. The latter approach is recommended and the\nfollowing environment variables are recognized by the OLD. See the comments in\nthe config file for what is expected in these variables.\n\n-  ``OLD_DB_RDBMS``\n-  ``OLD_DB_USER``\n-  ``OLD_DB_PASSWORD``\n-  ``OLD_DB_HOST``\n-  ``OLD_DB_PORT``\n-  ``OLD_DB_DIRPATH``\n-  ``SQLALCHEMY_POOL_RECYCLE``\n-  ``OLD_NAME_TESTS``\n-  ``OLD_TESTING``\n-  ``OLD_CREATE_REDUCED_SIZE_FILE_COPIES``\n-  ``OLD_PREFERRED_LOSSY_AUDIO_FORMAT``\n-  ``OLD_PERMANENT_STORE``\n-  ``OLD_ADD_LANGUAGE_DATA``\n-  ``OLD_EMPTY_DATABASE``\n-  ``OLD_PASSWORD_RESET_SMTP_SERVER``\n-  ``OLD_TEST_EMAIL_TO``\n-  ``OLD_GMAIL_FROM_ADDRESS``\n-  ``OLD_GMAIL_FROM_PASSWORD``\n-  ``OLD_SESSION_TYPE``\n-  ``OLD_SESSION_URL``\n-  ``OLD_SESSION_DATA_DIR``\n-  ``OLD_SESSION_LOCK_DIR``\n-  ``OLD_SESSION_KEY``\n-  ``OLD_SESSION_SECRET``\n-  ``OLD_SESSION_COOKIE_EXPIRES``\n\n\n\nTechnical\n================================================================================\n\nThe OLD is software for creating OLD instances, RESTful web services that send\nand receive data in JSON format. It is written in Python using the `Pyramid web\nframework`_. It works with both MySQL and SQLite as the RDBMS.\n\nNote: this is the OLD written using the `Pyramid`_ framework and is the version\nthat will be used for current and future development. For the `Pylons`_\nframework OLD, see the `Pylons OLD source`_ and the `Official OLD\nDocumentation`_.\n\n\nRun the Tests\n================================================================================\n\nTo run tests you must have MySQL v. 5.6 or greater installed. (The tests are\nnot guaranteed to pass currently with SQLite or earlier versions of MySQL.) If\nMySQL is installed, make sure that the MySQL database and user corresponding to\nyour configuration exist. For example, if your testing configuration expects a\ndatabase named ``oldtests`` accessible to the user ``old`` with password\n``demo``, do the following::\n\n    mysql\u003e CREATE DATABASE oldtests\n        DEFAULT CHARACTER SET utf8\n        DEFAULT COLLATE utf8_bin;\n    mysql\u003e CREATE USER 'old'@'localhost' IDENTIFIED BY 'demo';\n    mysql\u003e GRANT ALL PRIVILEGES ON oldtests.* TO 'old'@'localhost';\n\nMake sure that your configuration matches your test database, i.e., modify the\nconfig file to have appropriate corresponding values, e.g., ``db.user = old``,\nor, better yet, set the corresponding environment variables e.g.,\n``OLD_DB_USER=old``. Also, make sure to turn testing on in the configuration:\n``OLD_TESTING=1``.\n\nThen run the tests::\n\n    $ pytest\n\nThe convenience script test.sh will turn testing on for you and will then run\nthe tests::\n\n    $ ./test.sh\n\nThe tests can also be run with tox using specific Python versions::\n\n    $ tox -e py34\n    $ tox -e py35\n    $ tox -e py36\n\nTo run all tests across all supported Python versions, including the pylint\nlinting tests::\n\n    $ tox\n\n\nOpen a Shell\n================================================================================\n\nTo open a Python shell/REPL::\n\n    $ pshell config.ini\n\n\n\n.. _`OLD Web Site`: http://www.onlinelinguisticdatabase.org/\n.. _`Official OLD Documentation`: http://online-linguistic-database.readthedocs.org/en/latest/\n.. _`Dative`: http://www.dative.ca/\n.. _`Dative source code`: https://github.com/dativebase/dative\n.. _`Dative's web site`: http://www.dative.ca/\n.. _`Dative app`: http://app.dative.ca/\n.. _`Pyramid web framework`: http://www.pylonsproject.org/\n.. _`Pyramid`: https://trypyramid.com/\n.. _`Pylons`: http://upcoming.pylonsproject.org/about-pylons-framework.html\n.. _`Pylons OLD source`: https://github.com/dativebase/old\n.. _`Dative/OLD Vagrant/Ansible deploy scripts`: https://github.com/dativebase/deploy-dative-old\n.. _`pserve`: https://docs.pylonsproject.org/projects/pyramid/en/latest/pscripts/pserve.html\n.. _`DativeBase Docker Compose instructions`: https://github.com/dativebase/dativebase/blob/master/docker-compose/README.rst\n","funding_links":[],"categories":["Software"],"sub_categories":["Utilities"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdativebase%2Fold-pyramid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdativebase%2Fold-pyramid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdativebase%2Fold-pyramid/lists"}