Initial commit
This commit is contained in:
commit
39d3f304e5
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
dist
|
||||
*.egg-info
|
||||
build
|
||||
__pycache__
|
30
.gitlab-ci.yml
Normal file
30
.gitlab-ci.yml
Normal 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
66
README.md
Normal 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.
|
2
djangoldp_example/__init__.py
Normal file
2
djangoldp_example/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
__version__ = '0.0.0'
|
||||
name = "djangoldp_example"
|
4
djangoldp_example/admin.py
Normal file
4
djangoldp_example/admin.py
Normal file
@ -0,0 +1,4 @@
|
||||
from django.contrib import admin
|
||||
from .models import ExampleModel
|
||||
|
||||
admin.site.register(ExampleModel)
|
4
djangoldp_example/apps.py
Normal file
4
djangoldp_example/apps.py
Normal file
@ -0,0 +1,4 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
class DjangoldpExampleConfig(AppConfig):
|
||||
name = 'djangoldp_example'
|
12
djangoldp_example/factories.py
Normal file
12
djangoldp_example/factories.py
Normal 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
|
0
djangoldp_example/management/__init__.py
Normal file
0
djangoldp_example/management/__init__.py
Normal file
0
djangoldp_example/management/commands/__init__.py
Normal file
0
djangoldp_example/management/commands/__init__.py
Normal file
12
djangoldp_example/management/commands/mock_example.py
Normal file
12
djangoldp_example/management/commands/mock_example.py
Normal 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'))
|
0
djangoldp_example/migrations/__init__.py
Normal file
0
djangoldp_example/migrations/__init__.py
Normal file
4
djangoldp_example/models.py
Normal file
4
djangoldp_example/models.py
Normal file
@ -0,0 +1,4 @@
|
||||
from django.db import models
|
||||
|
||||
class ExampleModel(models.Model):
|
||||
# Please refer to Django documentation
|
9
djangoldp_example/urls.py
Normal file
9
djangoldp_example/urls.py
Normal 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
22
setup.cfg
Normal 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
|
Reference in New Issue
Block a user