Initial commit

This commit is contained in:
Nicolas Mérigot 2019-01-11 15:15:11 +01:00
commit 39d3f304e5
15 changed files with 174 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
dist
*.egg-info
build
__pycache__

30
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,30 @@
---
image: python:3.6
stages:
- test
- release
test:
stage: test
script:
- echo 'Make your tests here !'
except:
- master
tags:
- sib
publish:
stage: release
before_script:
- git config user.name "${GITLAB_USER_NAME}"
- git config user.email "${GITLAB_USER_EMAIL}"
- git remote set-url origin "https://gitlab-ci-token:${GL_TOKEN}@git.happy-dev.fr/${CI_PROJECT_PATH}.git"
- pip install git+https://github.com/plup/python-semantic-release
- pip install sib-commit-parser
script:
- semantic-release publish
only:
- do_not_publish
tags:
- sib

66
README.md Normal file
View File

@ -0,0 +1,66 @@
# Django LDP example
## Step by step quickstart
1. Installation
- `git clone git@git.happy-dev.fr:startinblox/djangoldp-packages/djangoldp-example.git /path/to/myawesomepackage`
- `git remote set-url origin the_repository_url`
- rename djangoldp_example directory to djangoldp_myawesomepackage
NB:
- replace /path/to/myawesomepackage with the local path of your package.
- replace the_repository_url with the git url of your package (example: git@git.happy-dev.fr:startinblox/djangoldp-packages/djangoldp-example.git).
- replace djangoldp_myawesomepackage with your package name. Please respect the naming convention (singular word, starting by `djangoldp_`)
2. Developpement environnement
In order to test and developp your package, you need to put the package src directory at the same level of a working django ldp app. By exemple, you can clone the sib app data server
`git clone git@git.happy-dev.fr:startinblox/applications/sib-app-data-server.git server /path/to/app`
- The classical way :
`ln -s /path/to/myawesomepackage/djangoldp_myawesomepackage /path/to/app/djangoldp_myawesomepackage`
- The docker way : in the *volumes* section, add a line in docker-compose.override.yml. Example
```
volumes:
- ./:/app
- /path/to/myawesomepackage/djangoldp_myawesomepackage:/app/djangoldp_myawesomepackage
```
Add your package in settings.py of the app. Now, you can test if your package is imported propefully by doing a
`python manage.py shell` then
from djangoldp_myawesomepackage.models import ExampleModel
If, no error, it's working.
3. Customization
- `setup.cfg` : please, fill the name, version, url, author_email, description
- `djangoldp_example/__init__.py`: fill the name, don't touch the version number !
- everything under the djangoldp_example is part of your package, you probably would replace "example" by your package name.
4. Push on the repository you've created
## Notes
### CICD
When you're ready to publish your app :
1. Add the `sib-deploy` user as a `maintainer` to the project (`Settings > Members`)
2. Configure `pipeline strategy` to `clone` (`Settings > CI/CD > Pipelines`)
3. Protect the `master` branch allowing only `maintainers` to push (`Settings > Repository > Protected branches`)
4. Configure CI/CD variables to authenticate on pypi.org:
Variable | Value | Protection
----------------|--------------------|-----------
`GL_TOKEN` | `sib-deploy-token` | protected
`PYPI_PASSWORD` | `pypi-password` | protected
`PYPI_USERNAME` | startinblox | protected
5. Replace the "do_not_publish" by "master" in the .gitlab-ci.yml
### Factories
If you dont need factory, you can remove the mock_example command, the factories files and the extras_require section in setup.cfg
Provide a factory is a good pratice in order to simplify the mocking of data on a server / in a test pipeline.

View File

@ -0,0 +1,2 @@
__version__ = '0.0.0'
name = "djangoldp_example"

View File

@ -0,0 +1,4 @@
from django.contrib import admin
from .models import ExampleModel
admin.site.register(ExampleModel)

View File

@ -0,0 +1,4 @@
from django.apps import AppConfig
class DjangoldpExampleConfig(AppConfig):
name = 'djangoldp_example'

View File

@ -0,0 +1,12 @@
import factory
import hashlib
from .models import ExampleModel
from django.db.models.signals import post_save
@factory.django.mute_signals(post_save)
class ExampleFactory(factory.django.DjangoModelFactory):
class Meta:
model = ExampleModel
# Please refer to Factory boy documentation
# https://factoryboy.readthedocs.io

View File

View File

@ -0,0 +1,12 @@
from django.core.management.base import BaseCommand, CommandError
from djangoldp_example.factories import ExampleFactory
class Command(BaseCommand):
help = 'Mock data'
def add_arguments(self, parser):
parser.add_argument('--size', type=int, default=0, help='Number of example to create')
def handle(self, *args, **options):
ExampleFactory.create_batch(options['size'], thread=thread)
self.stdout.write(self.style.SUCCESS('Successful data mock install'))

View File

View File

@ -0,0 +1,4 @@
from django.db import models
class ExampleModel(models.Model):
# Please refer to Django documentation

View File

@ -0,0 +1,9 @@
"""djangoldp project URL Configuration"""
from django.conf.urls import url
from djangoldp.views import LDPViewSet
from .models import ExampleModel
urlpatterns = [
url(r'^examples/', LDPViewSet.urls(model=ExampleModel)),
]

22
setup.cfg Normal file
View File

@ -0,0 +1,22 @@
[metadata]
name = djangoldp_example
version = attr: djangoldp_example.__version__
url = http://git.happy-dev.fr/startinblox/djangoldp_example
author = Startin'blox
author_email = nicolas@happy-dev.fr
description = djangoldp example package
license = MIT
[options]
packages = find:
install_requires =
djangoldp~=0.5
[options.extras_require]
dev =
factory_boy>=2.11.0
[semantic_release]
version_source = tag
version_variable = djangoldp_example/__init__.py:__version__
commit_parser = commit_parser.parse

5
setup.py Normal file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env python
from setuptools import setup
setup()