Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ dist/
downloads/
eggs/
.eggs/
lib/
./lib/
lib64/
parts/
sdist/
Expand Down
37 changes: 23 additions & 14 deletions ohmg/accounts/views.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,35 @@
from avatar.templatetags.avatar_tags import avatar_url
from django.conf import settings
from django.contrib.auth import get_user_model
from django.http import JsonResponse
from django.shortcuts import render, get_object_or_404
from django.views import View
from django.urls import reverse

from .schemas import UserSchema
from ohmg.accounts.schemas import UserSchema
from ohmg.api.models import Key

class ProfileView(View):

def get(self, request, username):

u = get_object_or_404(get_user_model(), username=username)

api_keys = [i for i in Key.objects.filter(account=u).values_list('value', flat=True)]

return render(
request,
"accounts/profile.html",
"index.html",
context={
"svelte_params": {
"CURRENT_USERNAME": request.user.username,
"PROFILE_USER": UserSchema.from_orm(u).dict(),
"CHANGE_AVATAR_URL": reverse('avatar_change'),
"SESSION_API_URL": reverse("api-beta:session_list"),
"OHMG_API_KEY": settings.OHMG_API_KEY,
"params": {
"PAGE_NAME": 'profile',
"PARAMS": {
"CURRENT_USERNAME": request.user.username,
"PROFILE_USER": UserSchema.from_orm(u).dict(),
"CHANGE_AVATAR_URL": reverse('avatar_change'),
"SESSION_API_URL": reverse("api-beta:session_list"),
"OHMG_API_KEY": settings.OHMG_API_KEY,
"USER_API_KEYS": api_keys,
}
}
}
)
Expand All @@ -35,11 +41,14 @@ def get(self, request):

return render(
request,
"accounts/participants.html",
"index.html",
context={
"svelte_params": {
"USER_API_URL": reverse("api-beta:user_list"),
"OHMG_API_KEY": settings.OHMG_API_KEY,
"params": {
"PAGE_NAME": "profiles",
"PARAMS": {
"OHMG_API_KEY": settings.OHMG_API_KEY,
"USER_API_URL": reverse("api-beta:user_list"),
}
}
},
)
)
9 changes: 9 additions & 0 deletions ohmg/api/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.contrib import admin

from ohmg.api.models import Key

class KeyAdmin(admin.ModelAdmin):
list_display = ('value', 'account', 'active', 'request_count')
readonly_fields = ('value', 'request_count')

admin.site.register(Key, KeyAdmin)
10 changes: 9 additions & 1 deletion ohmg/api/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

from ohmg.accounts.models import User
from ohmg.accounts.schemas import UserSchema
from ohmg.api.models import Key
from ohmg.loc_insurancemaps.models import Volume
from ohmg.content.schemas import ItemListSchema
from ohmg.georeference.models.sessions import SessionBase
Expand All @@ -30,6 +31,9 @@ class ApiKey(APIKeyHeader):
def authenticate(self, request, key):
if key == settings.OHMG_API_KEY:
return key
elif key in Key.objects.filter(active=True).values_list('value', flat=True):
Key.objects.get(value=key).increment_count()
return key

# going to be useful eventually for Geo support
# https://github.com/vitalik/django-ninja/issues/335
Expand All @@ -45,7 +49,11 @@ def authenticate(self, request, key):
@api.get('sessions/', response=List[SessionSchema], url_name="session_list")
@paginate
def list_sessions(request, filters: FilterSessionSchema = Query(...)):
queryset = SessionBase.objects.all().order_by("-date_created")
sort = request.GET.get('sort', '')
if sort == 'oldest_first':
queryset = SessionBase.objects.all().order_by("date_created")
else:
queryset = SessionBase.objects.all().order_by("-date_created")
queryset = filters.filter(queryset)
return list(queryset)

Expand Down
27 changes: 27 additions & 0 deletions ohmg/api/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Generated by Django 3.2.18 on 2023-09-16 12:44

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import ohmg.api.models


class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name='Key',
fields=[
('value', models.CharField(default=ohmg.api.models.generate_key, editable=False, max_length=22, primary_key=True, serialize=False)),
('active', models.BooleanField(default=True)),
('request_count', models.IntegerField(default=0, editable=False)),
('account', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
Empty file added ohmg/api/migrations/__init__.py
Empty file.
30 changes: 30 additions & 0 deletions ohmg/api/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import secrets
from django.conf import settings
from django.db import models

def generate_key():
return secrets.token_urlsafe(16)

class Key(models.Model):

value = models.CharField(
primary_key=True,
default=generate_key,
max_length=22,
editable=False,
)
account = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
active = models.BooleanField(
default=True,
)
request_count = models.IntegerField(
default=0,
editable=False
)

def increment_count(self):
self.request_count += 1
self.save(update_fields=['request_count'])
8 changes: 5 additions & 3 deletions ohmg/content/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@

The eventual migration plan is this:

ohmg.loc_insurancemaps.models.Volume --> content.models.Item
ohmg.loc_insurancemaps.models.Sheet --> content.models.Resource
ohmg.loc_insurancemaps.models.Volume --> content.models.Item
ohmg.loc_insurancemaps.models.Sheet --> content.models.Resource
ohmg.georeference.models.resources.Document --> content.models.VirtualResource
ohmg.georeference.models.resources.Layer --> content.models.VirtualResource

new model --> content.models.ItemConfigPreset
new model --> content.models.ItemConfigPreset
This would allow an extraction of Sanborn-specific properties vs. generic item
uploads. Still unclear exactly what to call this, or everything that it would have.
'''
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading