ATLAS implementation for the Scaife "SV Mini" prototype
This repository is part of the Scaife Viewer project, an open-source ecosystem for building rich online reading environments.
Make sure you are using a virtual environment of some sort (e.g. virtualenv or
pyenv).
pip install -r requirements-dev.txt
Populate the database:
./manage.py prepare_db
./manage.py loaddata sites
Run the Django dev server:
./manage.py runserver
Browse to http://localhost:8000/.
Create a superuser:
./manage.py createsuperuser
Browse to /admin/library/
Retrieve a list of versions.
{
versions {
edges {
node {
id
urn
metadata
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Retrieve the first version.
{
versions(first: 1) {
edges {
node {
metadata
}
}
}
}
Retrieve books within a particular version.
{
textParts(urn_Startswith: "urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:", rank: 1) {
edges {
node {
ref
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Retrieve text part by its URN.
{
textParts(urn: "urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:1.1") {
edges {
node {
ref
textContent
}
}
}
}
Retrieve tokens via a text part URN:
{
tokens (textPart_Urn:"urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:1.1") {
edges {
node {
value
uuid
idx
position
}
}
}
}
Retrieve a passage by its URN along with relevant metadata.
{
passageTextParts(reference: "urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:1-2") {
metadata
edges {
node {
ref
textContent
}
}
}
}
Retrieve lines within a book within a particular version.
{
textParts(urn_Startswith: "urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:2.", first: 5) {
edges {
node {
ref
textContent
}
}
}
}
Retrieve lines and tokens within a book within a particular version.
{
textParts(urn_Startswith: "urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:2.", first: 5) {
edges {
node {
ref
textContent
tokens {
edges {
node {
value
idx
}
}
}
}
}
}
}
Page through text parts ten at a time.
{
textParts(urn_Startswith: "urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:", rank: 2, first: 10) {
edges {
cursor
node {
id
ref
textContent
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
And then the next ten lines after that (use the endCursor value for after).
{
textParts(urn_Startswith: "urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:", rank: 3, first: 10, after: "YXJyYXljb25uZWN0aW9uOjk=") {
edges {
cursor
node {
id
label
textContent
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Dump an entire Node tree rooted by URN and halting at kind. For example,
here we serialize all CTS URNs from their NID root up to (and including) the
level of Version nodes, maintaining the tree structure in the final payload.
{
tree(urn: "urn:cts:", upTo: "version") {
tree
}
}
The annotations below are invoked by the prepare_db script.
While developing new annotations or ingesting data in alternate formats,
it can be helpful to run the annotation importer script in isolation
from prepare_db:
from sv_mini_atlas import importers
importers.text_annotations.import_text_annotations(reset=True)Get text alignment chunks for a given reference:
{
textAlignmentChunks(reference: "urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:1.8") {
edges {
cursor
node {
id
citation
items
alignment {
name
}
}
}
}
}
Get a version annotated with text alignment chunks:
{
versions (urn:"urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:") {
edges {
node {
metadata,
textAlignmentChunks (first:2){
edges {
node {
citation
}
}
}
}
}
}
}
Retrieve named entities
{
namedEntities (first: 10) {
edges {
node {
urn
title
description
url
tokens {
edges {
node {
value
textPart {
urn
}
}
}
}
}
}
}
}
Retrieve named entities for text part tokens
{
tokens(textPart_Urn:"urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:1.16") {
edges {
node {
value,
namedEntities {
edges {
node {
title
description
url
}
}
}
}
}
}
}
Retreive named entities given a passage reference
{
namedEntities(reference:"urn:cts:greekLit:tlg0012.tlg001.perseus-grc2:1.1-1.7") {
edges {
node {
id
title
description
url
}
}
}
}
Invoke tests via:
pytest
PRs against develop will automatically be deployed to Heroku as a "review app" after tests pass on CircleCI.
The review app for a PR will be deleted when the PR is closed / merged, or after 30 days after no new commits are added to an open PR.