Skip to content

Commit

Permalink
Merge branch 'main' into fix-create-invitations
Browse files Browse the repository at this point in the history
  • Loading branch information
tinashe committed Jan 29, 2025
2 parents 3724500 + ddfc730 commit 8e29f93
Show file tree
Hide file tree
Showing 90 changed files with 4,409 additions and 1,158 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
![arw_logo](https://github.com/user-attachments/assets/bfadaffe-3528-4544-ac85-f3b07a5e08a1)

![Staging Tag](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/lgkgh/889dd6c34a68d9461b1fd8cdb56b8a21/raw/arw_build_sta-tag.json)
![Staging Status](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/lgkgh/889dd6c34a68d9461b1fd8cdb56b8a21/raw/arw_build_sta-status.json)

Expand Down
3 changes: 3 additions & 0 deletions deployment/docker/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,6 @@ pyjwt
cryptography

Pillow

# fiona
fiona==1.10.1
21 changes: 20 additions & 1 deletion django_project/analysis/admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
from django.contrib import admin
from django.contrib.gis.admin import OSMGeoAdmin

from .models import Analysis, InterventionArea, Landscape, LandscapeCommunity
from .models import (
Analysis,
InterventionArea,
Landscape,
LandscapeCommunity,
UserAnalysisResults
)


@admin.register(Analysis)
Expand Down Expand Up @@ -93,3 +99,16 @@ class LandscapeCommunityAdmin(OSMGeoAdmin):
list_filter = ('landscape',)

map_template = 'gis/admin/osm.html'


class UserAnalysisResultsAdmin(admin.ModelAdmin):
list_display = ('created_by', 'source', 'created_at',)
search_fields = ('created_by__username', 'source',)
list_filter = ('source',)

def view_analysis_results(self, obj):
return str(obj.analysis_results)[:100]
view_analysis_results.short_description = 'Analysis Results...'


admin.site.register(UserAnalysisResults, UserAnalysisResultsAdmin)
26 changes: 26 additions & 0 deletions django_project/analysis/migrations/0004_useranalysisresults.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Generated by Django 4.2.15 on 2025-01-22 07:02

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


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('analysis', '0003_alter_landscape_options_landscape_project_name_and_more'),
]

operations = [
migrations.CreateModel(
name='UserAnalysisResults',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('analysis_results', models.JSONField()),
('created_at', models.DateTimeField(auto_now_add=True)),
('source', models.CharField(blank=True, max_length=255, null=True)),
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Generated by Django 4.2.15 on 2025-01-22 07:34

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


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('analysis', '0004_useranalysisresults'),
]

operations = [
migrations.AlterField(
model_name='useranalysisresults',
name='analysis_results',
field=models.JSONField(blank=True, null=True),
),
migrations.AlterField(
model_name='useranalysisresults',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]
25 changes: 25 additions & 0 deletions django_project/analysis/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,3 +251,28 @@ class Meta:
def __str__(self):
"""Return string representation of LandscapeArea."""
return self.community_name



class UserAnalysisResults(models.Model):
created_by = models.ForeignKey(
User,
on_delete=models.CASCADE,
null=True,
blank=True
)
analysis_results = models.JSONField(
null=True,
blank=True
)
created_at = models.DateTimeField(auto_now_add=True)
source = models.CharField(
max_length=255,
null=True,
blank=True
)

def __str__(self):
created_by = self.created_by.username if self.created_by else 'Unknown'
created_at = self.created_at
return f"Analysis by {created_by} on {created_at}"
14 changes: 14 additions & 0 deletions django_project/analysis/serializer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from rest_framework import serializers
from .models import UserAnalysisResults


class UserAnalysisResultsSerializer(serializers.ModelSerializer):
class Meta:
model = UserAnalysisResults
fields = [
'id',
'created_by',
'analysis_results',
'created_at',
'source'
]
10 changes: 10 additions & 0 deletions django_project/analysis/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import UserAnalysisResultsViewSet

router = DefaultRouter()
router.register(r'user_analysis_results', UserAnalysisResultsViewSet)

urlpatterns = [
path('', include(router.urls)),
]
35 changes: 33 additions & 2 deletions django_project/analysis/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,34 @@
from django.shortcuts import render # noqa: F401
from rest_framework import viewsets
from .models import UserAnalysisResults
from .serializer import UserAnalysisResultsSerializer
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import action

# Create your views here.

class UserAnalysisResultsViewSet(viewsets.ModelViewSet):
queryset = UserAnalysisResults.objects.all()
serializer_class = UserAnalysisResultsSerializer
permission_classes = [IsAuthenticated]

def perform_create(self, serializer):
serializer.save(
created_by=self.request.user,
analysis_results=self.request.data.get('analysis_results')
)

@action(detail=False, methods=['get'])
def fetch_analysis_results(self, request):
analysis_results = UserAnalysisResults.objects.filter(
created_by=request.user
)
serializer = self.get_serializer(analysis_results, many=True)
return Response(serializer.data)

@action(detail=False, methods=['post'])
def save_analysis_results(self, request):
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
serializer.save(created_by=request.user)
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
Loading

0 comments on commit 8e29f93

Please sign in to comment.