implement mongodb post and getall todo: get single
This commit is contained in:
parent
c52f031845
commit
39f0beb87e
@ -38,6 +38,34 @@ def send_image(identifier, image_path, metadata_payload):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def get_image(identifier):
|
||||||
|
print("Getting image with identifier "+identifier)
|
||||||
|
|
||||||
|
baseurl = "http://127.0.0.1:8000"
|
||||||
|
get_url = "/image/get?id="+identifier
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(baseurl + get_url)
|
||||||
|
print_response(response)
|
||||||
|
except os.error:
|
||||||
|
print("Error sending request")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_all():
|
||||||
|
print("Getting all images")
|
||||||
|
|
||||||
|
baseurl = "http://127.0.0.1:8000"
|
||||||
|
get_url = "/image/get"
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(baseurl + get_url)
|
||||||
|
print_response(response)
|
||||||
|
except os.error:
|
||||||
|
print("Error sending request")
|
||||||
|
return True
|
||||||
|
|
||||||
metadata = None
|
metadata = None
|
||||||
index = 0
|
index = 0
|
||||||
metadata_folder = "." + os.path.sep
|
metadata_folder = "." + os.path.sep
|
||||||
@ -85,6 +113,8 @@ while (command.lower() not in ["exit", "quit", "end"]):
|
|||||||
print("imagefolder <path> - selected new image folder")
|
print("imagefolder <path> - selected new image folder")
|
||||||
print("show - opens image next in line in default os program")
|
print("show - opens image next in line in default os program")
|
||||||
print("trigger - next image in line is sent to backend")
|
print("trigger - next image in line is sent to backend")
|
||||||
|
print("fetch - gets the next image from database if exists")
|
||||||
|
print("fetchall - get all images")
|
||||||
print("rapid <#amount> - next <amound> images in line are sent to backend in 2 second intervals")
|
print("rapid <#amount> - next <amound> images in line are sent to backend in 2 second intervals")
|
||||||
print("skip [<#amount>] - skips the next <amount> number of images in line or 1 if no <amount> is given")
|
print("skip [<#amount>] - skips the next <amount> number of images in line or 1 if no <amount> is given")
|
||||||
print("set <#index> - sets image on given <index> as next in line")
|
print("set <#index> - sets image on given <index> as next in line")
|
||||||
@ -157,6 +187,29 @@ while (command.lower() not in ["exit", "quit", "end"]):
|
|||||||
send_image(filename[:-4], image_folder + os.path.sep + filename, meta_payload)
|
send_image(filename[:-4], image_folder + os.path.sep + filename, meta_payload)
|
||||||
index = index + 1
|
index = index + 1
|
||||||
|
|
||||||
|
if command.lower() == "fetch":
|
||||||
|
if metadata is None:
|
||||||
|
print("No metadata loaded")
|
||||||
|
continue
|
||||||
|
if image_folder is None:
|
||||||
|
print("No image folder selected")
|
||||||
|
continue
|
||||||
|
meta_payload = metadata[index]
|
||||||
|
filename = meta_payload['filename']
|
||||||
|
get_image(filename[:-4])
|
||||||
|
index = index + 1
|
||||||
|
|
||||||
|
|
||||||
|
if command.lower() == "fetchall":
|
||||||
|
if metadata is None:
|
||||||
|
print("No metadata loaded")
|
||||||
|
continue
|
||||||
|
if image_folder is None:
|
||||||
|
print("No image folder selected")
|
||||||
|
continue
|
||||||
|
get_all()
|
||||||
|
index = index + 1
|
||||||
|
|
||||||
if command.lower() == "rapid":
|
if command.lower() == "rapid":
|
||||||
if metadata is None:
|
if metadata is None:
|
||||||
print("No metadata loaded")
|
print("No metadata loaded")
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
|
|
||||||
|
|||||||
@ -11,12 +11,10 @@ import os
|
|||||||
# set the websocket routing module location here
|
# set the websocket routing module location here
|
||||||
ASGI_APPLICATION = 'app_be.routing.application'
|
ASGI_APPLICATION = 'app_be.routing.application'
|
||||||
|
|
||||||
|
|
||||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
|
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
|
||||||
# Quick-start development settings - unsuitable for production
|
# Quick-start development settings - unsuitable for production
|
||||||
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
|
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
|
||||||
|
|
||||||
@ -37,7 +35,7 @@ INSTALLED_APPS = [
|
|||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'channels',
|
'channels',
|
||||||
'rest_framework'
|
'rest_framework',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
@ -49,6 +47,7 @@ MIDDLEWARE = [
|
|||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -67,7 +66,6 @@ REST_FRAMEWORK = {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# configuration of jason web token authentication
|
# configuration of jason web token authentication
|
||||||
JWT_AUTH = {
|
JWT_AUTH = {
|
||||||
'JWT_VERIFY': True,
|
'JWT_VERIFY': True,
|
||||||
@ -117,15 +115,16 @@ TEMPLATES = [
|
|||||||
|
|
||||||
WSGI_APPLICATION = 'app_be.wsgi.application'
|
WSGI_APPLICATION = 'app_be.wsgi.application'
|
||||||
|
|
||||||
|
|
||||||
# Database
|
# Database
|
||||||
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
|
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
|
||||||
|
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
|
|
||||||
'default': {
|
'default': {
|
||||||
'ENGINE': 'django.db.backends.sqlite3',
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AUTH_PASSWORD_VALIDATORS = [
|
AUTH_PASSWORD_VALIDATORS = [
|
||||||
@ -219,4 +218,4 @@ LOGGING = {
|
|||||||
# increase the maximum upload size of files
|
# increase the maximum upload size of files
|
||||||
DATA_UPLOAD_MAX_MEMORY_SIZE = 104857600
|
DATA_UPLOAD_MAX_MEMORY_SIZE = 104857600
|
||||||
|
|
||||||
DROPBOX_OAUTH2_ACCESS_TOKEN = 'SDt1aqMQg7EAAAAAAAAAARV4CNnOSTjYLc05W2YAxIArG93DnaK9Si9VbwE-aBbQ'
|
DROPBOX_OAUTH2_ACCESS_TOKEN = 'SDt1aqMQg7EAAAAAAAAAARV4CNnOSTjYLc05W2YAxIArG93DnaK9Si9VbwE-aBbQ'
|
||||||
|
|||||||
@ -24,7 +24,7 @@ urlpatterns = [
|
|||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
url(r'^test/', TestApiClass.test_api),
|
url(r'^test/', TestApiClass.test_api),
|
||||||
url(r'^image/get$', ImageEndpoint.image_api_get_all),
|
url(r'^image/get$', ImageEndpoint.image_api_get_all),
|
||||||
url(r'^image/get/(?P<id>[0-9]+)$', ImageEndpoint.image_api_get_single),
|
url(r'^image/get(?P<id>[-|a-zA-Z0-9]+)$', ImageEndpoint.image_api_get_single),
|
||||||
url(r'^image/post$', ImageEndpoint.image_api_post)
|
url(r'^image/post$', ImageEndpoint.image_api_post)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
19
middleware/app_be/views/mongo_db.py
Normal file
19
middleware/app_be/views/mongo_db.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import pymongo
|
||||||
|
|
||||||
|
class MongoManager:
|
||||||
|
__instance = None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def getInstance():
|
||||||
|
if MongoManager.__instance == None:
|
||||||
|
MongoManager()
|
||||||
|
return MongoManager.__instance
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
if MongoManager.__instance != None:
|
||||||
|
raise Exception("This class is a singleton!")
|
||||||
|
else:
|
||||||
|
MongoManager.__instance = pymongo.MongoClient('127.0.0.1', 27017)
|
||||||
|
db = MongoManager.__instance.AIC
|
||||||
|
coll = db.metadata
|
||||||
|
coll.create_index("filename",unique=True)
|
||||||
@ -2,6 +2,9 @@ import logging
|
|||||||
import json
|
import json
|
||||||
import base64
|
import base64
|
||||||
import dropbox
|
import dropbox
|
||||||
|
import pymongo
|
||||||
|
|
||||||
|
from app_be.views.mongo_db import MongoManager
|
||||||
|
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
@ -25,12 +28,43 @@ class ImageEndpoint:
|
|||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
def image_api_get_all(request):
|
def image_api_get_all(request):
|
||||||
logger.debug('Image GET all call: {}'.format(request))
|
logger.debug('Image GET all call: {}'.format(request))
|
||||||
|
|
||||||
|
instance = MongoManager.getInstance()
|
||||||
|
|
||||||
|
db = instance.AIC
|
||||||
|
col = db.metadata
|
||||||
|
|
||||||
|
print("hier")
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
for resp in col.find():
|
||||||
|
print(resp)
|
||||||
|
|
||||||
|
except:
|
||||||
|
print("Could not find Metadata")
|
||||||
|
|
||||||
return JsonResponse({'Result': 'success1'}, safe=False)
|
return JsonResponse({'Result': 'success1'}, safe=False)
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@api_view(['GET'])
|
@api_view(['GET'])
|
||||||
def image_api_get_single(request, id):
|
def image_api_get_single(request, id):
|
||||||
logger.debug('Image GET single call: {}'.format(request))
|
logger.debug('Image GET single call: {}'.format(request))
|
||||||
|
|
||||||
|
print("im single")
|
||||||
|
|
||||||
|
instance = MongoManager.getInstance()
|
||||||
|
|
||||||
|
db = instance.AIC
|
||||||
|
col = db.metadata
|
||||||
|
|
||||||
|
try:
|
||||||
|
resp = col.find({"filename": id+".jpg"})
|
||||||
|
print(resp[0]);
|
||||||
|
except:
|
||||||
|
print("Could not find Metadata")
|
||||||
|
|
||||||
return JsonResponse({'Result': 'success1', 'id': id}, safe=False)
|
return JsonResponse({'Result': 'success1', 'id': id}, safe=False)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -39,9 +73,22 @@ class ImageEndpoint:
|
|||||||
logger.debug('Image POST call: {}'.format(request))
|
logger.debug('Image POST call: {}'.format(request))
|
||||||
payload = json.loads(request.body.decode('utf-8'))
|
payload = json.loads(request.body.decode('utf-8'))
|
||||||
b64encoded_image = payload['image_data']
|
b64encoded_image = payload['image_data']
|
||||||
filename = payload['filename']
|
filename = payload['id']
|
||||||
metadata = payload['metadata']
|
metadata = payload['metadata']
|
||||||
|
|
||||||
|
instance = MongoManager.getInstance()
|
||||||
|
|
||||||
|
db = instance.AIC
|
||||||
|
col = db.metadata
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
resp = col.insert_one(metadata)
|
||||||
|
except:
|
||||||
|
print("Could not insert Metadata")
|
||||||
|
|
||||||
decoded_image = base64.b64decode(b64encoded_image)
|
decoded_image = base64.b64decode(b64encoded_image)
|
||||||
dbx = dropbox.Dropbox(settings.DROPBOX_OAUTH2_ACCESS_TOKEN)
|
dbx = dropbox.Dropbox(settings.DROPBOX_OAUTH2_ACCESS_TOKEN)
|
||||||
dbx.files_upload(decoded_image,'/Apps/AIC Federated Storage Infrastructure/' + filename)
|
dbx.files_upload(decoded_image, '/Apps/AIC Federated Storage Infrastructure/' + filename)
|
||||||
return JsonResponse({'Result': 'success2', 'received file': filename, 'metadata': metadata}, safe=False)
|
return JsonResponse({'Result': 'success2', 'received file': filename},
|
||||||
|
safe=False) # 'metadata': metadata response beinhaltet ObjectId welche nicht serializable is?
|
||||||
|
|||||||
@ -18,7 +18,8 @@ setup(
|
|||||||
'channels_redis==3.2.0',
|
'channels_redis==3.2.0',
|
||||||
'whitenoise==5.2.0',
|
'whitenoise==5.2.0',
|
||||||
'Pillow==8.0.1',
|
'Pillow==8.0.1',
|
||||||
'dropbox==10.10.0'
|
'dropbox==10.10.0',
|
||||||
|
'pymongo=3.11.1',
|
||||||
],
|
],
|
||||||
license='BSD License', # example license
|
license='BSD License', # example license
|
||||||
description='DESCRIPTION'
|
description='DESCRIPTION'
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user