Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Align scaife-viewer backend with Pythoin 3.12 and Django 3.2.25 #79

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
6 changes: 3 additions & 3 deletions atlas/scaife_viewer/atlas/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
ref https://github.com/graphql-python/graphene-django/pull/1017
"""

from django_jsonfield_backport.models import JSONField
from django.db.models import JSONField
from graphene_django.converter import (
convert_django_field,
convert_postgres_field_to_string,
convert_json_field_to_string,
)


@convert_django_field.register(JSONField)
def convert_jsonfield_to_string(field, registry=None):
return convert_postgres_field_to_string(field, registry=registry)
return convert_json_field_to_string(field, registry=registry)
44 changes: 21 additions & 23 deletions atlas/scaife_viewer/atlas/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
from django.db import models
from django.utils.functional import cached_property

# @@@ optional for Django 3.1+
from django_jsonfield_backport.models import JSONField
from graphene_django.utils import camelize
from sortedm2m.fields import SortedManyToManyField
from treebeard.mp_tree import MP_Node
Expand All @@ -33,7 +31,7 @@ class TextAlignment(models.Model):
"""
metadata contains author / attribution information
"""
metadata = JSONField(default=dict, blank=True)
metadata = models.JSONField(default=dict, blank=True)

"""
versions being sorted maps onto the "items" within a particular record
Expand All @@ -52,7 +50,7 @@ class TextAlignmentRecord(models.Model):
"""

urn = models.CharField(max_length=255, unique=True)
metadata = JSONField(default=dict, blank=True)
metadata = models.JSONField(default=dict, blank=True)

idx = models.IntegerField(help_text="0-based index")

Expand Down Expand Up @@ -86,7 +84,7 @@ class TextAnnotationCollection(models.Model):

label = models.CharField(blank=True, null=True, max_length=255)
# TODO: Move out to attributions model
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)
# TODO: Do we denorm kind here?

urn = models.CharField(
Expand All @@ -105,7 +103,7 @@ class TextAnnotation(models.Model):
default=hookset.TEXT_ANNOTATION_DEFAULT_KIND,
choices=hookset.TEXT_ANNOTATION_KIND_CHOICES,
)
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)
idx = models.IntegerField(help_text="0-based index")

text_parts = SortedManyToManyField(
Expand Down Expand Up @@ -142,7 +140,7 @@ def resolve_references(self):
class MetricalAnnotation(models.Model):
# @@@ in the future, we may ingest any attributes into
# `data` and query via JSON
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)

html_content = models.TextField()
short_form = models.TextField(
Expand Down Expand Up @@ -265,7 +263,7 @@ class ImageAnnotation(models.Model):
default=IMAGE_ANNOTATION_KIND_CANVAS,
choices=IMAGE_ANNOTATION_KIND_CHOICES,
)
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)
# @@@ denormed from data
image_identifier = models.CharField(max_length=255, blank=True, null=True)
canvas_identifier = models.CharField(max_length=255, blank=True, null=True)
Expand All @@ -282,7 +280,7 @@ class ImageROI(models.Model):
# TODO: revisit unique constraints of URN throughout
urn = models.CharField(max_length=255, blank=True, null=True)

data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)

# @@@ denormed from data; could go away when Django's SQLite backend has proper
# JSON support
Expand All @@ -303,7 +301,7 @@ class ImageROI(models.Model):


class AudioAnnotation(models.Model):
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)
asset_url = models.URLField(max_length=200)
idx = models.IntegerField(help_text="0-based index")

Expand Down Expand Up @@ -342,7 +340,7 @@ class Node(MP_Node):
rank = models.IntegerField(blank=True, null=True)
text_content = models.TextField(blank=True, null=True)
# @@@ we may want to furthe de-norm label from metadata
metadata = JSONField(default=dict, blank=True, null=True)
metadata = models.JSONField(default=dict, blank=True, null=True)

# NOTE: We currently assume SQLite for ATLAS databases;
# if we end up supporting other backends, there may be additional
Expand Down Expand Up @@ -478,7 +476,7 @@ class TokenAnnotationCollection(models.Model):
urn = models.CharField(max_length=255, unique=True)
label = models.CharField(max_length=255)

metadata = JSONField(default=dict, blank=True, null=True)
metadata = models.JSONField(default=dict, blank=True, null=True)


class TokenAnnotation(models.Model):
Expand All @@ -487,7 +485,7 @@ class TokenAnnotation(models.Model):
related_name="annotations",
on_delete=models.CASCADE,
)
data = JSONField(default=dict, blank=True, null=True)
data = models.JSONField(default=dict, blank=True, null=True)

# TODO: Determine if this needs to be CITEable / addressable
# Also determine if we need more of an EAV approach for addressable
Expand Down Expand Up @@ -595,7 +593,7 @@ class NamedEntityCollection(models.Model):

label = models.CharField(blank=True, null=True, max_length=255)
# TODO: Move out to attributions model
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)

urn = models.CharField(
max_length=255,
Expand All @@ -609,7 +607,7 @@ class NamedEntity(models.Model):
description = models.TextField(blank=True, null=True)
kind = models.CharField(max_length=6, choices=constants.NAMED_ENTITY_KINDS)
url = models.URLField(max_length=200)
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)

idx = models.IntegerField(help_text="0-based index", blank=True, null=True)
urn = models.CharField(max_length=255, unique=True)
Expand All @@ -635,7 +633,7 @@ class Dictionary(models.Model):
"""

label = models.CharField(blank=True, null=True, max_length=255)
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)

urn = models.CharField(
max_length=255, unique=True, help_text="urn:cite2:<site>:dictionaries.atlas_v1"
Expand All @@ -654,7 +652,7 @@ class Repo(models.Model):
name = models.CharField(blank=True, null=True, max_length=255)
sha = models.CharField(blank=True, null=True, max_length=255)
urns = models.ManyToManyField("scaife_viewer_atlas.Node", related_name="repos")
metadata = JSONField(default=dict, blank=True)
metadata = models.JSONField(default=dict, blank=True)


class AttributionPerson(models.Model):
Expand Down Expand Up @@ -688,7 +686,7 @@ class AttributionRecord(models.Model):

# TODO: Enforce person or organization constraint

data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)
# NOTE:
# data --> references are CTS URNs (maybe database field is too)
# data --> annotations are CITE URNs (also maybe further modeled in the database)
Expand Down Expand Up @@ -724,7 +722,7 @@ class DictionaryEntry(models.Model):
max_length=255, blank=True, null=True, db_index=True
)

data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)

idx = models.IntegerField(help_text="0-based index")
urn = models.CharField(
Expand Down Expand Up @@ -776,7 +774,7 @@ class Citation(models.Model):
related_name="citations",
on_delete=models.CASCADE,
)
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)
# TODO: There may be additional optimizations we can do on the text part / citation relation
# TODO: Higher-order URNs?
text_parts = SortedManyToManyField(
Expand Down Expand Up @@ -809,7 +807,7 @@ class GrammaticalEntryCollection(models.Model):

label = models.CharField(blank=True, null=True, max_length=255)
# TODO: Move out to attributions model
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)

urn = models.CharField(
max_length=255,
Expand All @@ -821,7 +819,7 @@ class GrammaticalEntryCollection(models.Model):
# TODO: Refactor with a common pattern
class GrammaticalEntry(models.Model):
label = models.CharField(blank=True, null=True, max_length=255)
data = JSONField(default=dict, blank=True)
data = models.JSONField(default=dict, blank=True)

idx = models.IntegerField(help_text="0-based index", blank=True, null=True)
urn = models.CharField(max_length=255, unique=True)
Expand Down Expand Up @@ -880,7 +878,7 @@ class Metadata(models.Model):
)
label = models.CharField(max_length=255)
value = models.CharField(blank=True, null=True, max_length=255)
value_obj = JSONField(default=dict, blank=True)
value_obj = models.JSONField(default=dict, blank=True)

index = models.BooleanField(default=True, help_text="Include in search index")
visibility = models.CharField(
Expand Down
6 changes: 2 additions & 4 deletions atlas/scaife_viewer/atlas/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,9 @@ def connection_resolver(
resolver,
connection,
default_manager,
queryset_resolver,
max_limit,
enforce_first_or_last,
filterset_class,
filtering_args,
root,
info,
**resolver_kwargs,
Expand All @@ -99,10 +98,9 @@ def connection_resolver(
resolver,
connection,
default_manager,
queryset_resolver,
max_limit,
enforce_first_or_last,
filterset_class,
filtering_args,
root,
info,
**resolver_kwargs,
Expand Down
18 changes: 7 additions & 11 deletions atlas/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,14 @@
include_package_data=True,
test_suite="runtests.runtests",
install_requires=[
"django_appconf>=1.0.4",
"django-extensions>=2.2.6,<3",
"django-filter>=2.3.0,<3",
"django-sortedm2m>=2.0.0,<3",
"django-treebeard>=4.3.0,<5",
"Django>=2.2.15,<3",
# @@@ can be dropped in Django 3.1+
"django-jsonfield-backport>=1.0.0,<2",
"graphene-django==2.6.0",
"django_appconf>=1.0.6",
"django-extensions==3.2.3",
"django-filter>=21.1,<24.1",
"django-sortedm2m>=3.0.0,<4.0.0",
"django-treebeard>=4.7.1,<5",
"Django>=3.1,<4",
"graphene-django==3.2.2",
"PyYAML==6.0.2",
# @@@ can be dropped in Python > 3.8
"importlib-resources>=5.1.2,<6",
"jsonlines>=2.0.0,<3",
"regex>=2020.11.13",
"tqdm>= 4.48.2,<5",
Expand Down