Thanks to visit codestin.com
Credit goes to github.com

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
7 changes: 5 additions & 2 deletions bugheist/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
GloalLeaderboardView,
SpecificMonthLeaderboardView,
LeaderboardApiViewSet,
LikeIssueApiView,
FlagIssueApiView,
IssueView,
AllIssuesView,
SpecificIssuesView,
Expand All @@ -51,11 +49,16 @@
GithubLogin,
GoogleLogin,
GoogleConnect,
)
from website.api.views import (
IssueViewSet,
DomainViewSet,
UserIssueViewSet,
UserProfileViewSet,
LikeIssueApiView,
FlagIssueApiView,
)

from bugheist import settings
from rest_framework import permissions, routers
from drf_yasg.views import get_schema_view
Expand Down
155 changes: 155 additions & 0 deletions website/api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
import requests.exceptions


from django.core.mail import send_mail
from django.template.loader import render_to_string

from rest_framework import viewsets, filters
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated

from website.models import (
Issue,
Domain,
)
from website.serializers import (
IssueSerializer,
UserProfileSerializer,
DomainSerializer,
)

from website.models import UserProfile


# API's


class UserIssueViewSet(viewsets.ModelViewSet):
"""
User Issue Model View Set
"""

queryset = Issue.objects.all()
serializer_class = IssueSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ("user__username", "user__id")
http_method_names = ["get", "post", "head"]


class UserProfileViewSet(viewsets.ModelViewSet):
"""
User Profile View Set
"""

serializer_class = UserProfileSerializer
queryset = UserProfile.objects.all()
filter_backends = (filters.SearchFilter,)
search_fields = ("id", "user__id", "user__username")
http_method_names = ["get", "post", "head"]


class DomainViewSet(viewsets.ModelViewSet):
"""
Domain View Set
"""

serializer_class = DomainSerializer
queryset = Domain.objects.all()
filter_backends = (filters.SearchFilter,)
search_fields = ("url", "name")
http_method_names = ["get", "post", "head"]


class IssueViewSet(viewsets.ModelViewSet):
"""
Issue View Set
"""

queryset = Issue.objects.all()
serializer_class = IssueSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ("url", "description", "user__id")
http_method_names = ["get", "post", "head"]



class LikeIssueApiView(APIView):

authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]

def get(self,request,id,format=None,*args, **kwargs):
return Response({
"likes":UserProfile.objects.filter(issue_upvoted__id=id).count(),
})

def post(self,request,id,format=None,*args,**kwargs):

issue = Issue.objects.get(id=id)
userprof = UserProfile.objects.get(user=request.user)
if userprof in UserProfile.objects.filter(issue_upvoted=issue):
userprof.issue_upvoted.remove(issue)
userprof.save()
return Response({"issue":"unliked"})
else:
userprof.issue_upvoted.add(issue)
userprof.save()

liked_user = issue.user
liker_user = request.user
issue_pk = issue.pk
msg_plain = render_to_string(
"email/issue_liked.txt",
{
"liker_user": liker_user.username,
"liked_user": liked_user.username,
"issue_pk": issue_pk,
},
)
msg_html = render_to_string(
"email/issue_liked.txt",
{
"liker_user": liker_user.username,
"liked_user": liked_user.username,
"issue_pk": issue_pk,
},
)

send_mail(
"Your issue got an upvote!!",
msg_plain,
"Bugheist <[email protected]>",
[liked_user.email],
html_message=msg_html,
)

return Response({"issue":"liked"})

class FlagIssueApiView(APIView):
'''
api for Issue like,flag and bookmark
'''

authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]

def get(self,request,id,format=None,*args, **kwargs):
return Response({
"flags":UserProfile.objects.filter(issue_flaged__id=id).count(),
})

def post(self,request,id,format=None,*args,**kwargs):


issue = Issue.objects.get(id=id)
userprof = UserProfile.objects.get(user=request.user)
if userprof in UserProfile.objects.filter(issue_flaged=issue):
userprof.issue_flaged.remove(issue)
userprof.save()
return Response({"issue":"unflagged"})
else:
userprof.issue_flaged.add(issue)
userprof.save()
return Response({"issue":"flagged"})
5 changes: 3 additions & 2 deletions website/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
os.environ['DJANGO_LIVE_TEST_SERVER_ADDRESS'] = 'localhost:8082'

from django.test.utils import override_settings
from selenium.webdriver.firefox.webdriver import WebDriver
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver.common.by import By

class MySeleniumTests(LiveServerTestCase):
Expand All @@ -18,7 +19,7 @@ class MySeleniumTests(LiveServerTestCase):
@classmethod
def setUpClass(cls):
print (sys.path)
cls.selenium = WebDriver()
cls.selenium = webdriver.Firefox(executable_path=GeckoDriverManager(cache_valid_range=1).install())
super(MySeleniumTests, cls).setUpClass()

@classmethod
Expand Down
143 changes: 2 additions & 141 deletions website/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
from django.db.models import Sum, Count, Q
from django.db.models.functions import ExtractMonth
from django.dispatch import receiver
from django.http import Http404, QueryDict
from django.http import Http404
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.http import JsonResponse
Expand All @@ -49,14 +49,10 @@
from django.views.decorators.http import require_GET
from django.conf import settings

from rest_framework import viewsets, filters
from user_agents import parse
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import action

from allauth.socialaccount.providers.facebook.views import FacebookOAuth2Adapter
from dj_rest_auth.registration.views import SocialLoginView
Expand Down Expand Up @@ -88,11 +84,6 @@
import stripe
import humanize

from .serializers import (
IssueSerializer,
UserProfileSerializer,
DomainSerializer,
)


def index(request, template="index.html"):
Expand Down Expand Up @@ -3058,138 +3049,8 @@ def company_hunt_results(request, pk, template="company_hunt_results.html"):
return render(request, template, context)


# API's


class UserIssueViewSet(viewsets.ModelViewSet):
"""
User Issue Model View Set
"""

queryset = Issue.objects.all()
serializer_class = IssueSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ("user__username", "user__id")
http_method_names = ["get", "post", "head"]


class UserProfileViewSet(viewsets.ModelViewSet):
"""
User Profile View Set
"""

serializer_class = UserProfileSerializer
queryset = UserProfile.objects.all()
filter_backends = (filters.SearchFilter,)
search_fields = ("id", "user__id", "user__username")
http_method_names = ["get", "post", "head"]


class DomainViewSet(viewsets.ModelViewSet):
"""
Domain View Set
"""

serializer_class = DomainSerializer
queryset = Domain.objects.all()
filter_backends = (filters.SearchFilter,)
search_fields = ("url", "name")
http_method_names = ["get", "post", "head"]


class IssueViewSet(viewsets.ModelViewSet):
"""
Issue View Set
"""

queryset = Issue.objects.all()
serializer_class = IssueSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ("url", "description", "user__id")
http_method_names = ["get", "post", "head"]


def handler404(request, exception):
return render(request, "404.html", {}, status=404)

def handler500(request, exception=None):
return render(request, "500.html", {}, status=500)

class LikeIssueApiView(APIView):

authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]

def get(self,request,id,format=None,*args, **kwargs):
return Response({
"likes":UserProfile.objects.filter(issue_upvoted__id=id).count(),
})

def post(self,request,id,format=None,*args,**kwargs):

issue = Issue.objects.get(id=id)
userprof = UserProfile.objects.get(user=request.user)
if userprof in UserProfile.objects.filter(issue_upvoted=issue):
userprof.issue_upvoted.remove(issue)
userprof.save()
return Response({"issue":"unliked"})
else:
userprof.issue_upvoted.add(issue)
userprof.save()

liked_user = issue.user
liker_user = request.user
issue_pk = issue.pk
msg_plain = render_to_string(
"email/issue_liked.txt",
{
"liker_user": liker_user.username,
"liked_user": liked_user.username,
"issue_pk": issue_pk,
},
)
msg_html = render_to_string(
"email/issue_liked.txt",
{
"liker_user": liker_user.username,
"liked_user": liked_user.username,
"issue_pk": issue_pk,
},
)

send_mail(
"Your issue got an upvote!!",
msg_plain,
"Bugheist <[email protected]>",
[liked_user.email],
html_message=msg_html,
)

return Response({"issue":"liked"})

class FlagIssueApiView(APIView):
'''
api for Issue like,flag and bookmark
'''

authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]

def get(self,request,id,format=None,*args, **kwargs):
return Response({
"flags":UserProfile.objects.filter(issue_flaged__id=id).count(),
})

def post(self,request,id,format=None,*args,**kwargs):


issue = Issue.objects.get(id=id)
userprof = UserProfile.objects.get(user=request.user)
if userprof in UserProfile.objects.filter(issue_flaged=issue):
userprof.issue_flaged.remove(issue)
userprof.save()
return Response({"issue":"unflagged"})
else:
userprof.issue_flaged.add(issue)
userprof.save()
return Response({"issue":"flagged"})
return render(request, "500.html", {}, status=500)