Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Pipeline ci cd conteneurisation #37

Open
wants to merge 24 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e889756
initialization
Cyl94700 Feb 27, 2023
2da789e
linting correction
Cyl94700 Feb 27, 2023
de96d2d
adding verbose_name_plural for Adress class
Cyl94700 Feb 27, 2023
6568935
create lettings app
Cyl94700 Feb 28, 2023
e06e471
update urls, views and templates for lettings app
Cyl94700 Feb 28, 2023
0371b6a
bugfix: path lettings app and index into views
Cyl94700 Feb 28, 2023
d7d3ddf
insert lettings data from oc_lettings_site
Cyl94700 Feb 28, 2023
8b0c47c
Merge branch 'modular_architecture' of https://github.com/Cyl94700/Py…
Cyl94700 Mar 1, 2023
b2e54bb
create profiles app
Cyl94700 Mar 1, 2023
e7c4378
Merge branch 'modular_architecture' of https://github.com/Cyl94700/Py…
Cyl94700 Mar 1, 2023
ddd748d
update urls, views and templates for profiles app
Cyl94700 Mar 2, 2023
908318c
update urls, views and templates for finalization
Cyl94700 Mar 3, 2023
607ccec
insert profiles data from oc_lettings_site
Cyl94700 Mar 3, 2023
74ee19b
remove old data and old files
Cyl94700 Mar 4, 2023
4f7316c
create home app and move files
Cyl94700 Mar 4, 2023
d7f5cdd
linting for flake8 run_ok
Cyl94700 Mar 4, 2023
e31b92a
upgrade django and pytest-django for pytest run
Cyl94700 Mar 4, 2023
68d2a60
add home_site tests
Cyl94700 Mar 5, 2023
b034a6e
add lettings tests
Cyl94700 Mar 5, 2023
3e3e6ab
add profiles tests
Cyl94700 Mar 5, 2023
d08dede
add Dockerfile
Cyl94700 Mar 7, 2023
7c9b0ae
add config.yml
Cyl94700 Mar 7, 2023
09f8fc8
bugfix config.yml
Cyl94700 Mar 8, 2023
62fe355
bugfix linting
Cyl94700 Mar 8, 2023
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
24 changes: 24 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# CircleCi version
version: 2.1

orbs:
python: circleci/python@2.1.1

jobs:
build-and-test:
executor: python/default
steps:
- checkout
- python/install-packages:
pip-dependency-file: requirements.txt
pkg-manager: pip
- run:
command: pytest
name: run pytest
- run:
command: flake8
name: run linting
workflows:
master:
jobs:
- build-and-test
7 changes: 7 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
env
.pytest_cache
__pycache__
Dockerfile
.git
venv
.idea
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
**/__pycache__
*.pyc
venv
.idea/

15 changes: 15 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM python:3.10.5-alpine

WORKDIR /code

# Add project files to the code/ folder
ADD ./ .

# Install dependencies
RUN pip install -r requirements.txt

# Define the default port
EXPOSE 8000

# Setup executable command in the container
CMD python manage.py runserver 0.0.0.0:8000
File renamed without changes.
Binary file modified oc-lettings-site.sqlite3
Binary file not shown.
Empty file.
5 changes: 5 additions & 0 deletions oc_lettings_site/home_site/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class WebSiteConfig(AppConfig):
name = 'oc_lettings_site.home_site'
File renamed without changes.
17 changes: 17 additions & 0 deletions oc_lettings_site/home_site/migrations/0002_auto_20230227_1830.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 3.0 on 2023-02-27 17:30

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('oc_lettings_site', '0001_initial'),
]

operations = [
migrations.AlterModelOptions(
name='address',
options={'verbose_name_plural': 'Addresses'},
),
]
19 changes: 19 additions & 0 deletions oc_lettings_site/home_site/migrations/0003_remove_old_tables.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 3.0 on 2023-03-04 09:56

from django.db import migrations


class Migration(migrations.Migration):
initial = True

dependencies = [
('oc_lettings_site', '0002_auto_20230227_1830'),
]

operations = [
migrations.RunSQL("""
DROP TABLE main.oc_lettings_site_address;
DROP TABLE main.oc_lettings_site_letting;
DROP TABLE main.oc_lettings_site_profile;
""")
]
Empty file.
Empty file.
Empty file.
4 changes: 4 additions & 0 deletions oc_lettings_site/home_site/templates/home_site/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<title>Holiday Homes</title>
<h1>Welcome to Holiday Homes</h1>
<div><a href="{% url 'profiles:index' %}">Profiles</a></div>
<div><a href="{% url 'lettings:index' %}">Lettings</a></div>
14 changes: 14 additions & 0 deletions oc_lettings_site/home_site/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import pytest
from django.test import Client
from django.urls import reverse


@pytest.fixture
def client(db) -> Client:
return Client()


def test_home_index(client: Client):
response = client.get(reverse("home:index"), data={})
assert response.status_code == 200
assert "<title>Holiday Homes</title>" in str(response.content)
8 changes: 8 additions & 0 deletions oc_lettings_site/home_site/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from django.urls import path

from oc_lettings_site.home_site import views

app_name = 'home'
urlpatterns = [
path('', views.index, name='index'),
]
11 changes: 11 additions & 0 deletions oc_lettings_site/home_site/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.shortcuts import render


# Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque molestie quam lobortis leo
# consectetur ullamcorper non id est. Praesent dictum, nulla eget feugiat sagittis, sem mi
# convallis eros, vitae dapibus nisi lorem dapibus sem. Maecenas pharetra purus ipsum, eget
# consequat ipsum lobortis quis. Phasellus eleifend ex auctor venenatis tempus.Aliquam vitae erat
# ac orci placerat luctus. Nullam elementum urna nisi, pellentesque iaculis enim cursus in.
# Praesent volutpat porttitor magna, non finibus neque cursus id.
def index(request):
return render(request, 'home_site/index.html')
Empty file.
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
from django.contrib import admin

from .models import Letting
from .models import Address
from .models import Profile


admin.site.register(Letting)
admin.site.register(Address)
admin.site.register(Profile)
5 changes: 5 additions & 0 deletions oc_lettings_site/lettings/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class LettingsConfig(AppConfig):
name = 'oc_lettings_site.lettings'
39 changes: 39 additions & 0 deletions oc_lettings_site/lettings/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Generated by Django 3.0 on 2023-02-28 16:43

import django.core.validators
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Address',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('number', models.PositiveIntegerField(validators=[django.core.validators.MaxValueValidator(9999)])),
('street', models.CharField(max_length=64)),
('city', models.CharField(max_length=64)),
('state', models.CharField(max_length=2, validators=[django.core.validators.MinLengthValidator(2)])),
('zip_code', models.PositiveIntegerField(validators=[django.core.validators.MaxValueValidator(99999)])),
('country_iso_code', models.CharField(max_length=3, validators=[django.core.validators.MinLengthValidator(3)])),
],
options={
'verbose_name_plural': 'Addresses',
},
),
migrations.CreateModel(
name='Letting',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=256)),
('address', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='lettings.Address')),
],
),
]
19 changes: 19 additions & 0 deletions oc_lettings_site/lettings/migrations/0002_insert_lettings_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 3.0 on 2023-03-01 08:39

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('lettings', '0001_initial'),
]

operations = [
migrations.RunSQL("""
INSERT INTO main.lettings_address
SELECT * FROM main.oc_lettings_site_address;
INSERT INTO main.lettings_letting
SELECT * FROM main.oc_lettings_site_letting;
""")
]
Empty file.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from django.db import models
from django.core.validators import MaxValueValidator, MinLengthValidator
from django.contrib.auth.models import User


class Address(models.Model):
@@ -14,18 +13,13 @@ class Address(models.Model):
def __str__(self):
return f'{self.number} {self.street}'

class Meta:
verbose_name_plural = 'Addresses'


class Letting(models.Model):
title = models.CharField(max_length=256)
address = models.OneToOneField(Address, on_delete=models.CASCADE)

def __str__(self):
return self.title


class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
favorite_city = models.CharField(max_length=64, blank=True)

def __str__(self):
return self.user.username
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ <h1>Lettings</h1>
<ul>
{% for letting in lettings_list %}
<li>
<a href="{% url 'letting' letting_id=letting.id %}">
<a href="{% url 'lettings:letting' letting_id=letting.id %}">
{{ letting.title }}
</a>
</li>
@@ -13,5 +13,5 @@ <h1>Lettings</h1>
{% else %}
<p>No lettings are available.</p>
{% endif %}
<div><a href="{% url 'index' %}">Home</a></div>
<div><a href="{% url 'profiles_index' %}">Profiles</a></div>
<div><a href="{% url 'home:index' %}">Home</a></div>
<div><a href="{% url 'profiles:index' %}">Profiles</a></div>
Original file line number Diff line number Diff line change
@@ -3,6 +3,6 @@ <h1>{{ title }}</h1>
<p>{{ address.number }} {{ address.street }}</p>
<p>{{ address.city }}, {{ address.state }} {{ address.zip_code }}</p>
<p>{{ address.country_iso_code }}</p>
<div><a href="{% url 'lettings_index' %}">Back</a></div>
<div><a href="{% url 'index' %}">Home</a></div>
<div><a href="{% url 'profiles_index' %}">Profiles</a></div>
<div><a href="{% url 'lettings:index' %}">Back</a></div>
<div><a href="{% url 'home:index' %}">Home</a></div>
<div><a href="{% url 'profiles:index' %}">Profiles</a></div>
47 changes: 47 additions & 0 deletions oc_lettings_site/lettings/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import pytest
from django.test import Client
from django.urls import reverse

from .models import Address, Letting


@pytest.fixture
def client(db) -> Client:
return Client()


@pytest.fixture
def test_address(db):
return Address.objects.create(
number=1,
street="my street",
city="my city",
state="France",
zip_code="75001",
country_iso_code="FRA",
)


@pytest.fixture
def test_letting(db, test_address):
return Letting.objects.create(title="My vacation home", address=test_address)


def test_index_lettings(client: Client):
response = client.get(reverse("lettings:index"), data={})
assert response.status_code == 200
assert "<title>Lettings</title>" in str(response.content)


def test_detail_letting(client: Client, test_letting: Letting):
response = client.get(reverse("lettings:letting", args=[1]), data={})
assert response.status_code == 200
assert "My vacation home" in str(response.content)


def test_str_letting(test_letting: Letting):
assert str(test_letting) == "My vacation home"


def test_str_address(test_address: Address):
assert str(test_address) == "1 my street"
10 changes: 10 additions & 0 deletions oc_lettings_site/lettings/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path

from oc_lettings_site.lettings import views


app_name = 'lettings'
urlpatterns = [
path('lettings/', views.index, name='index'),
path('lettings/<int:letting_id>/', views.letting, name='letting'),
]
35 changes: 35 additions & 0 deletions oc_lettings_site/lettings/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from django.shortcuts import render
from .models import Letting


# Aenean leo magna, vestibulum et tincidunt fermentum, consectetur quis velit. Sed non placerat
# massa. Integer est nunc, pulvinar a tempor et, bibendum id arcu. Vestibulum ante ipsum primis in
# faucibus orci luctus et ultrices posuere cubilia curae; Cras eget scelerisque.


def index(request):
lettings_list = Letting.objects.all()
context = {'lettings_list': lettings_list}
return render(request, 'lettings/index.html', context)


# Cras ultricies dignissim purus, vitae hendrerit ex varius non. In accumsan porta nisl id
# eleifend. Praesent dignissim, odio eu consequat pretium, purus urna vulputate arcu, vitae
# efficitur lacus justo nec purus. Aenean finibus faucibus lectus at porta. Maecenas auctor, est ut
# luctus congue, dui enim mattis enim, ac condimentum velit libero in magna. Suspendisse potenti.
# In tempus a nisi sed laoreet. Suspendisse porta dui eget sem accumsan interdum. Ut quis urna
# pellentesque justo mattis ullamcorper ac non tellus. In tristique mauris eu velit fermentum,
# tempus pharetra est luctus. Vivamus consequat aliquam libero, eget bibendum lorem. Sed non dolor
# risus. Mauris condimentum auctor elementum. Donec quis nisi ligula. Integer vehicula tincidunt
# enim, ac lacinia augue pulvinar sit amet.
def letting(request, letting_id):
letting = Letting.objects.get(id=letting_id)
context = {
'title': letting.title,
'address': letting.address,
}
return render(request, 'lettings/letting.html', context)

# Sed placerat quam in pulvinar commodo. Nullam laoreet consectetur ex, sed consequat libero
# pulvinar eget. Fusc faucibus, urna quis auctor pharetra, massa dolor cursus neque, quis dictum
# lacus d
Empty file.
4 changes: 4 additions & 0 deletions oc_lettings_site/profiles/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from django.contrib import admin
from .models import Profile

admin.site.register(Profile)
5 changes: 5 additions & 0 deletions oc_lettings_site/profiles/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class ProfilesConfig(AppConfig):
name = 'oc_lettings_site.profiles'
Loading