Tangent MicroServices Documentation

Similar documents
MapEntity Documentation

django-jenkins Documentation

Bambu API Documentation

MIT AITI Python Software Development Lab DJ1:

Graphene Documentation

Django IPRestrict Documentation

Django MFA Documentation

Tomasz Szumlak WFiIS AGH 23/10/2017, Kraków

django-teamwork Documentation

Building a Django Twilio Programmable Chat Application

Django Groups Manager Documentation

The simple but powerful elegance of Django REST Framework. start

django-openid Documentation

DJOAuth2 Documentation

Ninja Typers Web Application Design Document By Marvin Farrell C

Building APIs with Django and Django Rest Framework

ClickToCall SkypeTest Documentation

SagePay payment gateway package for django-oscar Documentation

Trunk Player Documentation

django-ratelimit-backend Documentation

open-helpdesk Documentation

Rapid Development with Django and App Engine. Guido van Rossum May 28, 2008

django-allauth-2fa Documentation

Koalix ERP. Release 0.2

django-cas Documentation

Django Localized Recurrence Documentation

Django Groups Manager Documentation

django-selenium Documentation

cmsplugin-blog Release post 0 Øyvind Saltvik

Django Web Framework: A Comprehensive Introduction and Step by Step Installation

Easy-select2 Documentation

django cms Documentation

django-embed-video Documentation

Contents. 1. What is otree? 2. The Shell and Python. 3. Example: simple questionnaire. 4. Example: public goods game. 5. Test bots.

Reminders. Full Django products are due next Thursday! CS370, Günay (Emory) Spring / 6

silk Documentation Release 0.3 Michael Ford

Django-frontend-notification Documentation

Technology modeling. Ralf Lämmel Software Languages Team University of Koblenz-Landau

django-rest-auth Documentation

Webdev: Building Django Apps. Ryan Fox Andrew Glassman MKE Python

django-embed-video Documentation

django-embed-video Documentation

tally Documentation Release Dan Watson

django-facetools Documentation

Django PAM Documentation

django-templation Documentation

Django starting guide

Lightweight. Django USING REST, WEBSOCKETS & BACKBONE. Julia Elman & Mark Lavin

Django design patterns Documentation

Django OAuth Toolkit Documentation

django-oscar-paypal Documentation

django-telegram-bot Documentation

django-audiofield Documentation

django-audit-log Documentation

neo4django Documentation

First Django Admin Documentation

django-users2 Documentation

Django by errors. Release 0.2. Sigurd Gartmann

django-konfera Documentation

The Django Web Framework Part VI

django-oscar Documentation

Django Admin Sortable Documentation

FCS Documentation. Release 1.0 AGH-GLK

staff Documentation Release 1.2

django-photologue Documentation

Aldryn Installer Documentation

django-oauth2-provider Documentation

docs-python2readthedocs Documentation

Web Development with Python and Django. Mike Crute Mike Pirnat David Stanek

nacelle Documentation

puput Documentation Release 0.9 Marc Tudurí

wagtail-robots Documentation

Gunnery Documentation

django-cron Documentation

django-ad-code Documentation

Linguistic Architecture

Bishop Blanchet Intranet Documentation

ganetimgr Documentation

RandoPony Documentation

django-private-chat Documentation

Biostar Central Documentation. Release latest

froide Documentation Release alpha Stefan Wehrmeyer

Stepic Plugins Documentation

django-plotly-dash Documentation Mark Gibbs

Quoting Wikipedia, software

django-scaffold Documentation

Django File Picker Documentation

django-storages Documentation

django-mongonaut Documentation

Getting Django Set Up Using a Functional Test

django SHOP Release dev0

django-reinhardt Documentation

SendCloud OpenCart 2 Extension Documentation

django-waffle Documentation

I hate money. Release 1.0

django-geoip Documentation

django-subdomains Documentation

puput Documentation Release 1.0 Marc Tudurí

BriCS. University of Bristol Cloud Service Simulation Runner. User & Developer Guide. 1 October John Cartlidge & M.

Django REST Framework JSON API Documentation

Transcription:

Tangent MicroServices Documentation Release 1 Tangent Solutions March 10, 2015

Contents 1 Getting Started 3 1.1 Micro Services Projects......................................... 3 2 Service Registry 5 3 Writing a MicroService with Python (Django) 7 3.1 Typical Project Layout.......................................... 7 3.2 Toolset.................................................. 7 3.3 Project Setup............................................... 7 3.4 Build the Database............................................ 10 3.5 Initial Data................................................ 10 3.6 Writing some Code............................................ 10 3.7 Authentication.............................................. 11 3.8 Documenting............................................... 11 3.9 Testing.................................................. 12 3.10 Continious Integration with Jenkins................................... 12 4 Standards and Conventions 15 4.1 Resource Naming............................................ 15 4.2 Service Requirements.......................................... 15 5 Indices and tables 17 i

ii

Contents: Contents 1

2 Contents

CHAPTER 1 Getting Started Every project within the MicroServices suite has an individual read me file with specific instructions on getting started with the project. 1.1 Micro Services Projects User Service 3

4 Chapter 1. Getting Started

CHAPTER 2 Service Registry UserService HoursService 5

6 Chapter 2. Service Registry

CHAPTER 3 Writing a MicroService with Python (Django) 3.1 Typical Project Layout api migrations init.py init.py admin.py api.py models.py tests.py views.py projectservice init.py settings.py urls.py wsgi.py data initial.json.gitignore db.sqlite3 manage.py README.md requirements.txt 3.2 Toolset Documentation: Sphinx + ReadTheDocs. Django Rest Framework 3.3 Project Setup Instructions 1. Setup and activate your virtual environment virtualenv env source env/bin/activate 7

2. Create a requirements.txt file with the following and run it django==1.7 gunicorn requests djangorestframework==3 django-rest-swagger django-filter ## dev requirements sphinx sphinx_rtd_theme mock responses ipdb ipython ## Test and quality analysis pylint coverage django-jenkins django-extensions django-cors-headers ## custom libs: -e git://github.com/tangentmicroservices/pythonauthenticationlib.git#egg=tokenauth Run the requirements file using: pip install -r requirements.txt 3. Create the python project django-admin.py startproject projectservice. Note: projectservice all lowercase note that. at the end: so it creates it in the current directory 4. Check that your structure is as follows: LICENSE README.md manage.py requirements.txt projectservice init.py settings.py urls.py wsgi.py 5. Create an API app: python manage.py startapp api 6. Create api.py in the api app: 8 Chapter 3. Writing a MicroService with Python (Django)

touch api/api.py 7. Add the following to settings.py: # CUSTOM AUTH AUTHENTICATION_BACKENDS = ( django.contrib.auth.backends.modelbackend, tokenauth.authbackends.tokenauthbackend ) ## REST REST_FRAMEWORK = { DEFAULT_PERMISSION_CLASSES : ( rest_framework.permissions.isauthenticated, ), DEFAULT_AUTHENTICATION_CLASSES : ( ## we need this for the browsable API to work rest_framework.authentication.sessionauthentication, tokenauth.authbackends.resttokenauthbackend, ) } # Services: ## Service base urls without a trailing slash: USER_SERVICE_BASE_URL = http://staging.userservice.tangentme.com JENKINS_TASKS = ( django_jenkins.tasks.run_pylint, django_jenkins.tasks.with_coverage, # django_jenkins.tasks.run_sloccount, # django_jenkins.tasks.run_graphmodels ) PROJECT_APPS = ( api, ) 8. Update INSTALLED_APPS in settings.py: INSTALLED_APPS = (... ## 3rd party rest_framework, rest_framework_swagger, ## custom tokenauth, api, ) # testing etc: django_jenkins, django_extensions, corsheaders, 9. Update MIDDLEWARE_CLASSES in setttings.py: 3.3. Project Setup 9

MIDDLEWARE_CLASSES = ( ) ## add this: tokenauth.middleware.tokenauthmiddleware, corsheaders.middleware.corsmiddleware, django.middleware.common.commonmiddleware, Note: Note that CorsMiddleware needs to come before Django s CommonMiddleware if you are using Django s USE_ETAGS = True setting, otherwise the CORS headers will be lost from the 304 not-modified responses, causing errors in some browsers. 10. Update settings.py with the following setting at the bottom CORS_ORIGIN_ALLOW_ALL = True 3.4 Build the Database 1. Sync the database: python manage.py syncdb Note: Make the username admin and password a by default 2. Perform any migrations if necessary: python manage.py makemigrations python manage.py migrate 3.5 Initial Data 1. Login to the admin panel and create some test data 2. Dump the data: python manage.py dumpdata > data/initial.json 3. Run the data to test that it works: python manage.py loaddata data/initial.json 3.6 Writing some Code Create some end points using - Django REST Framework. Note: To include a Swagger API explorer for your API. Add: url(r ^api-explorer/, include( rest_framework_swagger.urls )), to urls.py. for more info on using Swagger with Django Rest Framework, see: 10 Chapter 3. Writing a MicroService with Python (Django)

Warning: The following code is for the hours service using entry. Rename accordingly. 1. In models.py add the following: from django.contrib.auth.models import User... class Entry(models.Model): user = models.foreignkey(user) title = models.charfield(max_length=200) 2. In api.py add the following: from rest_framework import viewsets, routers, serializers from rest_framework.decorators import detail_route from rest_framework.response import Response... class EntryViewSet(viewsets.ModelViewSet): model = Entry serializer_class=entryserializer hours_router = routers.defaultrouter() hours_router.register( entry, EntryViewSet) 3. In urls.py add the following: from api.api import hours_router... urlpatterns = patterns(, url(r ^, include(hours_router.urls)), ) 4. python manage.py runserver 3.7 Authentication 3.8 Documenting 1. Build the documentation in Sphinx sphinx-quickstart This will create a folder called /docs and the structure should like this this: Makefile make.bat build/ source/ _static _templates conf.py index.rst 2. Add /docs/build/ to.gitignore file 3.7. Authentication 11

3. Write your own documentation as you go - RST Docs. 4. Update the readme file with instructions on how to setup the project Warning: The following code is for the hours service. Rename accordingly. # HoursService [![Build Status](http://jenkins.tangentme.com/buildStatus/icon?job=Build HoursService)](http://jenkin A Service for time tracking ## Setting Up 1. Start and activate environment Virtualenv env source env/bin/activate 1. Run the requirements pip install -r requirements.txt 1. Install the database python manage.py syncdb 1. Run the initial data (if required - this is test data only) python manage.py loaddata data/initial.json 1. Run the tests to ensure the project is up and running correctly python manage.py test 3.9 Testing 3.9.1 Unit Tests Uint tests can be run with: python manage.py test 3.9.2 Integration Tests Integration tests should be stored in files matching the pattern *_ITCase.py. They can be run with: python manage.py test --pattern="*_itcase.py" 3.10 Continious Integration with Jenkins Requirements 12 Chapter 3. Writing a MicroService with Python (Django)

pip install pylint pip install coverage pip install django-jenkins pip install django-extensions Instructions 1. Install requirements: pip install -r requirements.txt pip install pylint pip install coverage pip install django-jenkins pip install django-extensions 2. Configure settings.py: JENKINS_TASKS = ( django_jenkins.tasks.run_pylint, django_jenkins.tasks.with_coverage, # django_jenkins.tasks.run_sloccount, # django_jenkins.tasks.run_graphmodels ) ## Apps to run analysis over: PROJECT_APPS = ( api, ) 3. Run: This will:./manage.py jenkins Run tests (build junit report) Generate coverage report (cobertura) Run pylint (generate checkstyle report) All files are generated in the reports directory 3.10. Continious Integration with Jenkins 13

14 Chapter 3. Writing a MicroService with Python (Django)

CHAPTER 4 Standards and Conventions 4.1 Resource Naming 4.2 Service Requirements A MicroService is required to provide the following resources to be considered stable: A minimum of setup instructions so that a developer can check the project out, get it running and run the tests Up-to-date documentation on REST API Unit test coverage > 80% Integration tests against any other Services on which this service is dependent Default data that is generated on the staging version of the Service (for other services to integration test against). * This should be documented 15

16 Chapter 4. Standards and Conventions

CHAPTER 5 Indices and tables genindex modindex search 17