Skip to content

Commit

Permalink
Add selenium and CRUD ready
Browse files Browse the repository at this point in the history
Add selenium and CRUD ready
  • Loading branch information
nixocio committed Sep 28, 2019
1 parent 9f9d8e6 commit 7f5cf5b
Show file tree
Hide file tree
Showing 48 changed files with 446 additions and 78 deletions.
7 changes: 7 additions & 0 deletions clean_migrations.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete

rm -r -f *.sqlite3

python manage.py makemigrations
python manage.py migrate
2 changes: 1 addition & 1 deletion core/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@


class CoreConfig(AppConfig):
name = 'core'
name = "core"
10 changes: 7 additions & 3 deletions core/forms.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
from django import forms

from core.models import Site, Category
from core.models import Category, Site


class DateInput(forms.DateInput):
input_type = "date"


class SiteForm(forms.ModelForm):
Expand All @@ -17,5 +21,5 @@ class SiteForm(forms.ModelForm):

class Meta:
model = Site
fields = ("category", "url")

widgets = {"deadline": DateInput()}
fields = ("category", "url", "deadline")
64 changes: 40 additions & 24 deletions core/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# Generated by Django 2.2.2 on 2019-09-22 00:41
# Generated by Django 2.2.2 on 2019-09-27 01:04

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

Expand All @@ -9,36 +8,53 @@ class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
dependencies = []

operations = [
migrations.CreateModel(
name='Category',
name="Category",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('modified_at', models.DateTimeField(auto_now=True)),
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=50, unique=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
("modified_at", models.DateTimeField(auto_now=True)),
],
options={
'verbose_name_plural': 'categories',
'ordering': ('-created_at',),
},
options={"verbose_name_plural": "categories", "ordering": ("-created_at",)},
),
migrations.CreateModel(
name='Site',
name="Site",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('url', models.URLField(verbose_name='Site URL')),
('created_at', models.DateTimeField(auto_now_add=True)),
('modified_at', models.DateTimeField(auto_now=True)),
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='categories', to='core.Category')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("url", models.URLField(unique=True, verbose_name="Site URL")),
("image_path", models.CharField(max_length=300)),
("created_at", models.DateTimeField(auto_now_add=True)),
("modified_at", models.DateTimeField(auto_now=True)),
("deadline", models.DateTimeField()),
(
"category",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="categories",
to="core.Category",
),
),
],
options={
'ordering': ('-modified_at',),
},
options={"ordering": ("-modified_at",)},
),
]
25 changes: 25 additions & 0 deletions core/migrations/0002_site_user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Generated by Django 2.2.2 on 2019-09-27 01:04

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


class Migration(migrations.Migration):

initial = True

dependencies = [
("core", "0001_initial"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.AddField(
model_name="site",
name="user",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
),
)
]
11 changes: 11 additions & 0 deletions core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,20 @@ class Site(models.Model):
category = models.ForeignKey(
Category, on_delete=models.CASCADE, related_name="categories"
)
image_path = models.CharField(max_length=300)
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)
deadline = models.DateTimeField(blank=False)

@property
def image_path_modified(self):
return 'default_image.jpg'

# @property
# def hostname(self):
# return urlparse.urlparse(self.url).hostname


class Meta:
ordering = ("-modified_at",)
Expand Down
1 change: 0 additions & 1 deletion core/templates/core/sites_management.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

<div class="container">

<h2>Striped Rows</h2>
<br>
<table class="table table-striped">
<thead>
Expand Down
3 changes: 2 additions & 1 deletion core/templates/core/sites_read.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@
<div class="card-body">
<p class="card-text">{{ site.url }}</p>
<p class="card-text">{{ site.category }}</p>
<img src="{{ MEDIA_URL }}{{ site.image_path_modified }}" class="card-img-top" width="400" height="400">
<div class="d-flex justify-content-between align-items-center">
<div class="btn-group">
</div>
<small class="text-muted">{{ site.created_at}}</small>
<small class="text-muted">{{ site.deadline }}</small>
</div>
</div>
</div>
Expand Down
49 changes: 42 additions & 7 deletions core/views.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
from django.shortcuts import render, redirect, get_object_or_404
import os
import urllib.parse as urlparse
from datetime import datetime
from pprint import pprint

from django.conf import settings
from django.contrib import messages
from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import login_required
from django.contrib import messages

from pprint import pprint
from django.shortcuts import get_object_or_404, redirect, render
from selenium.webdriver import Firefox, Chrome
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.chrome.options import Options as ChromeOptions

from core.models import Site
from core.forms import SiteForm
from core.models import Site
from users.forms import CustomUserChangeForm, CustomUserCreationForm


def site_read(request):
sites = Site.objects.all()
return render(request, "core/sites_read.html", {"sites": sites})


def signup(request):
if request.method == "POST":
form = CustomUserCreationForm(request.POST)
Expand All @@ -32,15 +40,42 @@ def sites_create(request):
if form.is_valid():
url = form.cleaned_data["url"]
category = form.cleaned_data["category"]
Site(url=url, category=category, user=request.user).save()
deadline = form.cleaned_data["deadline"]
pprint(url)
image_path, image_name = get_screen_shot(url)

Site(
category=category,
deadline=deadline,
image_path=image_name,
url=url,
user=request.user,
).save()

return redirect("core:site_management")
else:
form = SiteForm()
return render(request, "core/site_create.html", {"form": form})


def get_screen_shot(url):
pass
width = 400
height = 400
options = ChromeOptions()
options.headless = True
# driver = Firefox(options=options)
driver = Chrome(options=options)
driver.get(url)
driver.set_window_size(width, height)
now = str(datetime.today().timestamp())
img_dir = settings.MEDIA_ROOT
img_name = "".join([now, "_image.png"])
full_img_path = os.path.join(img_dir, img_name)
if not os.path.exists(img_dir):
os.makedirs(img_dir)
driver.save_screenshot(full_img_path)
driver.quit()
return full_img_path, img_name


@login_required
Expand Down
Binary file added geckodriver
Binary file not shown.
Binary file added geckodriver-v0.25.0-linux64.tar.gz
Binary file not shown.
Loading

0 comments on commit 7f5cf5b

Please sign in to comment.