Implement Feed creation

This commit is contained in:
Tobias Eidelpes
2021-05-02 17:49:42 +02:00
parent b96a8d35c5
commit e648a03166
13 changed files with 186 additions and 113 deletions
+1
View File
@@ -1,6 +1,7 @@
venv
*.pyc
staticfiles
media
.env
*.sqlite3
*.sqlite
+6 -7
View File
@@ -1,26 +1,25 @@
from django.core.validators import URLValidator, FileExtensionValidator
from django.db import models
# Create your models here.
class User(models.Model):
pass
class Icon(models.Model):
image = models.ImageField(upload_to='feed_icons')
class Feed(models.Model):
url = models.CharField(max_length=100)
url = models.TextField(blank=False, null=False, validators=[URLValidator(['http', 'https'])])
active = models.BooleanField()
icon = models.FileField(upload_to='feed-icons', blank=True, null=True,
validators=[FileExtensionValidator(['png', 'svg'])])
keywords = models.TextField(blank=False, null=False)
class FeedEntry(models.Model):
feed = models.ForeignKey(Feed, on_delete=models.CASCADE)
tweeted = models.BooleanField()
class Tweet(models.Model):
icon = models.ForeignKey(Icon, on_delete=models.CASCADE)
text = models.CharField(max_length=137)
date_time = models.DateTimeField()
url = models.CharField(max_length=100)
+25 -2
View File
@@ -1,3 +1,26 @@
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from rest_framework.serializers import ModelSerializer
# add serializer here
from app_be.models import Feed
class FeedSerializer(ModelSerializer):
class Meta:
model = Feed
fields = '__all__'
def validate_icon(self, value):
if value is not None and value.size > 10240:
raise ValidationError("Invalid icon: Maximum size is 10KB")
return value
def validate_keywords(self, value):
split = [x.strip() for x in value.split(',')]
if len(split) > 3:
raise ValidationError("Invalid keywords: No more than three entries")
elif len(split) == 0:
raise ValidationError("Invalid keywords: Need at least one entry")
for entry in split:
if len(entry) < 3:
raise ValidationError("Invalid keywords: Keywords have to be of length greater than 2")
return value
+3
View File
@@ -161,6 +161,9 @@ STATICFILES_DIRS = [
os.path.join(PROJECT_ROOT, 'static'),
]
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'
# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
+1
View File
@@ -28,5 +28,6 @@ urlpatterns = [
]
router = DefaultRouter()
router.register(r'feeds', FeedViewSet, basename='feeds')
urlpatterns.extend(router.urls)
+11 -1
View File
@@ -2,9 +2,14 @@ import logging
from django.http import JsonResponse
from rest_framework.decorators import api_view
from py_jwt_validator import PyJwtValidator, PyJwtException
from rest_framework.decorators import api_view
from rest_framework.viewsets import ModelViewSet
from app_be.models import Feed
from app_be.serializers import FeedSerializer
logger = logging.getLogger(__name__)
@@ -58,3 +63,8 @@ class TwitterClass:
def getLastSixTweets():
return JsonResponse({[{"asdf", "asdf", "sdfasdf", "asdf"}, {"asdf", "asdf", "sdfasdf", "asdf"}]}, safe=False,
status=200)
class FeedViewSet(ModelViewSet):
queryset = Feed.objects.all()
serializer_class = FeedSerializer
+2 -2
View File
@@ -39,10 +39,10 @@ class twitter_bot:
def scan_active_feed(self):
starttime = time.time()
while True:
# while True:
# Search RSS Feed
time.sleep(60.0 - ((time.time() - starttime) % 60.0))
# time.sleep(60.0 - ((time.time() - starttime) % 60.0))
twitter_bot = twitter_bot()