From 9df15665411d780c6362e43851c04f535ed495c5 Mon Sep 17 00:00:00 2001 From: Haider_Majid Date: Thu, 20 Oct 2022 16:22:03 +0300 Subject: [PATCH] solved task 2 --- config/settings.py | 1 + config/urls.py | 19 +++----- files_management/controller.py | 2 - files_management/mycontroller.py | 75 ++++++++++++++++++++++++++++++++ files_management/utils.py | 22 +++++++--- 5 files changed, 98 insertions(+), 21 deletions(-) create mode 100644 files_management/mycontroller.py diff --git a/config/settings.py b/config/settings.py index e332a2b..91faf4d 100644 --- a/config/settings.py +++ b/config/settings.py @@ -37,6 +37,7 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'files_management' ] MIDDLEWARE = [ diff --git a/config/urls.py b/config/urls.py index b6601c1..da1a0b4 100644 --- a/config/urls.py +++ b/config/urls.py @@ -1,21 +1,12 @@ -"""config URL Configuration -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/4.1/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" from django.contrib import admin from django.urls import path +from files_management.mycontroller import files_controller +from ninja import NinjaAPI +api = NinjaAPI() +api.add_router('/', files_controller) urlpatterns = [ path('admin/', admin.site.urls), + path('api/', api.urls), ] diff --git a/files_management/controller.py b/files_management/controller.py index 45a329d..e69de29 100644 --- a/files_management/controller.py +++ b/files_management/controller.py @@ -1,2 +0,0 @@ -from django.shortcuts import render -# Create your views here. diff --git a/files_management/mycontroller.py b/files_management/mycontroller.py new file mode 100644 index 0000000..eb2f24a --- /dev/null +++ b/files_management/mycontroller.py @@ -0,0 +1,75 @@ +from files_management.utils import list_posts, get_post, save_post, del_post, exist_post + +from ninja import Router, Schema + + + +class FileBody(Schema): + + file_title: str + file_content: str = None + + +class FileBodyUpdate(Schema): + + file_content: str = None + + +files_controller = Router() + + +# list all Posts +@files_controller.get('/posts') +def get_files(request): + return list_posts() + + +@files_controller.get('/posts/{paraTitle}') +def get_files_by_title(request, paraTitle: str): + try: + if get_post(title=paraTitle): + return get_post(title=paraTitle) + elif get_post(title=paraTitle) is None: + return {'Message': 'There is no post with that name'} + except: + return {'Message': 'There is an error occurs'} + + +@files_controller.post('/posts') +def post_file(request, payload: FileBody): + try: + if payload.file_title is not None: + save_post(title=payload.file_title, content=payload.file_content) + return {'Message': 'File Saved Successfully'} + else: + return {'Message': 'Please provide file name'} + except: + return {'Message': 'There is an error occurs'} + + + +@files_controller.put('/posts/{paraTitle}') +def update_file(request, payload: FileBodyUpdate, paraTitle): + try: + if exist_post(paraTitle): + if paraTitle is not None and payload.file_content is not None: + save_post(title=paraTitle, content=payload.file_content) + return {'Message': 'File Updated Successfully'} + else: + return {'Message': 'Please provide file name and file content to update'} + else: + return {'Message': 'There is no file with that name'} + except: + return {'Message': 'There is an error occurs'} + + +@files_controller.delete('/posts/{paraTitle}') +def delete_file(request, paraTitle): + try: + if paraTitle is not None: + if del_post(paraTitle): + return {'Message': 'File deleted Successfully'} + else: + return {'Message': 'There is no file with that name, Please provide a correct file name to delete it'} + except: + return {'Message': 'There is an error occurs'} diff --git a/files_management/utils.py b/files_management/utils.py index fbcb059..ecbee11 100644 --- a/files_management/utils.py +++ b/files_management/utils.py @@ -26,10 +26,7 @@ def save_post(title, content): def get_post(title): - """ - Retrieves a post by its title. If no such - post exists, the function returns None. - """ + try: f = default_storage.open(f"posts/{title}.md") return f.read().decode("utf-8") @@ -38,4 +35,19 @@ def get_post(title): def del_post(title): - pass + + filename = f"posts/{title}.md" + if default_storage.exists(filename): + default_storage.delete(filename) + else: + return False + return {'Message': 'File deleted Successfully'} + + +def exist_post(title): + + filename = f"posts/{title}.md" + if default_storage.exists(filename): + return True + else: + return False \ No newline at end of file