2013-03-22 19:35:26 +04:00
from django . contrib . auth . models import User
2013-03-21 23:28:40 +04:00
from lib . main . models import *
2013-03-20 06:26:35 +04:00
from rest_framework import serializers , pagination
2013-03-21 23:11:47 +04:00
from django . core . urlresolvers import reverse
import lib . urls
2013-03-21 19:06:47 +04:00
2013-03-21 23:28:40 +04:00
class BaseSerializer ( serializers . ModelSerializer ) :
pass
class OrganizationSerializer ( BaseSerializer ) :
2013-03-20 06:26:35 +04:00
2013-03-21 23:11:47 +04:00
# add the URL and related resources
url = serializers . CharField ( source = ' get_absolute_url ' , read_only = True )
related = serializers . SerializerMethodField ( ' get_related ' )
# make certain fields read only
creation_date = serializers . DateTimeField ( read_only = True )
active = serializers . BooleanField ( read_only = True )
2013-03-21 08:12:03 +04:00
2013-03-20 06:26:35 +04:00
class Meta :
model = Organization
2013-03-21 23:28:40 +04:00
fields = ( ' url ' , ' id ' , ' name ' , ' description ' , ' creation_date ' , ' related ' ) # whitelist
2013-03-21 23:11:47 +04:00
def get_related ( self , obj ) :
''' related resource URLs '''
return dict (
audit_trail = reverse ( lib . urls . views_OrganizationsAuditTrailList , args = ( obj . pk , ) ) ,
projects = reverse ( lib . urls . views_OrganizationsProjectsList , args = ( obj . pk , ) ) ,
users = reverse ( lib . urls . views_OrganizationsUsersList , args = ( obj . pk , ) ) ,
admins = reverse ( lib . urls . views_OrganizationsAdminsList , args = ( obj . pk , ) ) ,
tags = reverse ( lib . urls . views_OrganizationsTagsList , args = ( obj . pk , ) )
)
2013-03-21 23:28:40 +04:00
class AuditTrailSerializer ( BaseSerializer ) :
# add the URL and related resources
url = serializers . CharField ( source = ' get_absolute_url ' , read_only = True )
related = serializers . SerializerMethodField ( ' get_related ' )
class Meta :
model = AuditTrail
fields = ( ' url ' , ' id ' , ' modified_by ' , ' delta ' , ' detail ' , ' comment ' )
def get_related ( self , obj ) :
return dict ( )
class ProjectSerializer ( BaseSerializer ) :
# add the URL and related resources
url = serializers . CharField ( source = ' get_absolute_url ' , read_only = True )
related = serializers . SerializerMethodField ( ' get_related ' )
class Meta :
model = Project
fields = ( ' url ' , ' id ' , ' name ' , ' description ' , ' creation_date ' , ' local_repository ' , ' default_playbook ' , ' scm_type ' )
2013-03-21 23:11:47 +04:00
2013-03-21 23:28:40 +04:00
def get_related ( self , obj ) :
# FIXME: add related resources: inventories
return dict ( )
class UserSerializer ( BaseSerializer ) :
# FIXME: *** this is really about exposing the Django auth_user via REST so it may require
# some custom save hooks in the view.
# add the URL and related resources
url = serializers . CharField ( source = ' get_absolute_url ' , read_only = True )
related = serializers . SerializerMethodField ( ' get_related ' )
class Meta :
model = User
2013-03-22 19:35:26 +04:00
# FIXME: make sure is_active is and is_superuser is read only
fields = ( ' url ' , ' id ' , ' username ' , ' first_name ' , ' last_name ' , ' email ' , ' is_active ' , ' is_superuser ' )
2013-03-21 23:28:40 +04:00
def get_related ( self , obj ) :
2013-03-22 19:35:26 +04:00
# FIXME: add related lookups?
2013-03-21 23:28:40 +04:00
return dict ( )
class TagSerializer ( BaseSerializer ) :
# add the URL and related resources
url = serializers . CharField ( source = ' get_absolute_url ' , read_only = True )
related = serializers . SerializerMethodField ( ' get_related ' )
class Meta :
model = Tag
fields = ( ' url ' , ' id ' , ' name ' )
def get_related ( self , obj ) :
return dict ( )
2013-03-21 23:11:47 +04:00