Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
5450bf0
Models for Iterable and IterValue working and tested
termlen0 Sep 10, 2016
b877be0
Update admin and models
termlen0 Sep 12, 2016
1bb4712
working copy
termlen0 Sep 12, 2016
d9dfbda
Partially working API post - Iterable
termlen0 Sep 13, 2016
5b6f672
Fixed API POST 400 error
termlen0 Sep 13, 2016
7709001
Iterable API tested for create/update/get_next
termlen0 Sep 15, 2016
a8a5ae8
All API tests for Iterable and Itervalue are passing
termlen0 Sep 19, 2016
cfc5e2c
line added
termlen0 Sep 19, 2016
7a8bd3a
incrementor validation > max_val check
termlen0 Sep 19, 2016
2da098e
local stash
termlen0 Sep 19, 2016
eea135e
Code review recommendations addded
termlen0 Sep 19, 2016
2bdc257
iter_key replaced with iterable etc for api tests
termlen0 Sep 20, 2016
32d455d
Remove bin
termlen0 Sep 20, 2016
c480895
Remove share
termlen0 Sep 20, 2016
cbf53f4
Original migrations
termlen0 Sep 20, 2016
3e4649d
Updated migrations
termlen0 Sep 20, 2016
44fd4da
Remove include dir
termlen0 Sep 20, 2016
64eca6e
Fixed the failing tests - iter_key -> iterable
termlen0 Sep 20, 2016
0857302
models tested for itervalue with attribute
termlen0 Oct 4, 2016
3cb343b
Working commit
termlen0 Oct 6, 2016
85c10c8
All tests working
termlen0 Oct 10, 2016
cafd56d
Merging to latest release from
termlen0 Oct 14, 2016
7c0eee9
Merge https://github.com/dropbox/nsot
termlen0 Nov 20, 2016
f303298
remove bin
termlen0 Nov 20, 2016
46a1f55
removed index files
termlen0 Nov 20, 2016
c46639e
removed api test cassestes
termlen0 Nov 20, 2016
05bd9cc
removed more cassettes
termlen0 Nov 20, 2016
0b54f60
line break clean up
termlen0 Nov 20, 2016
5591f1b
Merge remote-tracking branch 'upstream/master'
termlen0 Jan 31, 2017
68335f1
merge migrations
termlen0 Feb 1, 2017
e7c3404
swagger fix
termlen0 Feb 2, 2017
fadb44b
swagger fix
termlen0 Feb 2, 2017
1cb932d
linting for models.py
termlen0 Feb 15, 2017
c7999b9
Prevent duplicate itervalues in the model
termlen0 Feb 16, 2017
03459c4
Merging from master
termlen0 Apr 25, 2017
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
13 changes: 13 additions & 0 deletions nsot/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,16 @@ class InterfaceAdmin(admin.ModelAdmin):

fields = list_display
admin.site.register(models.Interface, InterfaceAdmin)


class IterableAdmin(admin.ModelAdmin):
list_display = ('name', 'description', 'min_val', 'max_val', 'increment', 'site')
fields = list_display

admin.site.register(models.Iterable, IterableAdmin)

class ItervalueAdmin(admin.ModelAdmin):
list_display = ('value', 'iterable', 'site')
fields = list_display

admin.site.register(models.Itervalue, ItervalueAdmin)
6 changes: 6 additions & 0 deletions nsot/api/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ class Meta:
model = models.Device
fields = ['hostname', 'attributes']

class ItervalueFilter(ResourceFilter):
"""Filter for Itervalue objects."""
class Meta:
model = models.Itervalue
fields = ['iterable', 'value', 'attributes']


class NetworkFilter(ResourceFilter):
"""Filter for Network objects."""
Expand Down
83 changes: 83 additions & 0 deletions nsot/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,89 @@ class Meta:
fields = ('id', 'name', 'description', 'type', 'mac_address', 'speed',
'parent_id', 'addresses', 'attributes')

###########
# Iterable
###########
class IterableSerializer(NsotSerializer):
"""Used for GET, DELETE on Iterables."""
class Meta:
model = models.Iterable
fields = '__all__'

class IterableCreateSerializer(IterableSerializer):
"""Used for POST on Iterables."""
site_id = fields.IntegerField(
label = get_field_attr(models.Iterable, 'site', 'verbose_name'),
help_text = get_field_attr(models.Iterable, 'site', 'help_text')
)

class Meta:
model = models.Iterable
fields = ( 'name', 'description', 'min_val', 'max_val', 'increment', 'site_id')


class IterableUpdateSerializer(BulkSerializerMixin,
IterableCreateSerializer):
""" Used for PUT on Iterables. """
class Meta:
model = models.Iterable
list_serializer_class = BulkListSerializer
fields = ('id', 'name', 'description', 'min_val', 'max_val', 'increment')


class IterablePartialUpdateSerializer(BulkSerializerMixin,
IterableCreateSerializer):
""" Used for PATCH, on Iterables. """
class Meta:
model = models.Iterable
list_serializer_class = BulkListSerializer
fields = ('id', 'name', 'description', 'min_val', 'max_val', 'increment')


###########
# Itervalue
###########
class ItervalueSerializer(ResourceSerializer):
"""Used for GET, DELETE on Itervalues."""
class Meta:
model = models.Itervalue
fields = '__all__'


class ItervalueCreateSerializer(ItervalueSerializer):
"""Used for POST on Itervalues."""
site_id = fields.IntegerField(
label = get_field_attr(models.Iterable, 'site', 'verbose_name'),
help_text = get_field_attr(models.Iterable, 'site', 'help_text')
)

class Meta:
model = models.Itervalue
fields = ('iterable', 'value', 'attributes', 'site_id')


class ItervalueUpdateSerializer(BulkSerializerMixin,
ItervalueCreateSerializer):
""" Used for PUT on Itervalues. """
attributes = JSONDictField(
required=True,
help_text='Dictionary of attributes to set.'
)

class Meta:
model = models.Itervalue
list_serializer_class = BulkListSerializer
fields = ('id', 'iterable', 'value', 'attributes')


class ItervaluePartialUpdateSerializer(BulkSerializerMixin,
ItervalueCreateSerializer):
""" Used for PATCH, on Itervalues. """
class Meta:
model = models.Itervalue
list_serializer_class = BulkListSerializer
fields = ('id', 'iterable', 'value', 'attributes')


#########
# Circuit
Expand Down
4 changes: 4 additions & 0 deletions nsot/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
router.register(r'networks', views.NetworkViewSet)
router.register(r'users', views.UserViewSet)
router.register(r'values', views.ValueViewSet)
router.register(r'iterables', views.IterableViewSet)
router.register(r'itervalues', views.ItervalueViewSet)

# Nested router for resources under /sites
sites_router = routers.BulkNestedRouter(
Expand All @@ -34,6 +36,8 @@
sites_router.register(r'interfaces', views.InterfaceViewSet)
sites_router.register(r'networks', views.NetworkViewSet)
sites_router.register(r'values', views.ValueViewSet)
sites_router.register(r'iterables', views.IterableViewSet)
sites_router.register(r'itervalues', views.ItervalueViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
Expand Down
48 changes: 48 additions & 0 deletions nsot/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,54 @@ def get_serializer_class(self):
return serializers.AttributeUpdateSerializer
return self.serializer_class

class IterableViewSet(ResourceViewSet):
"""
API endpoint that allows Iterables to be viewed or edited.
"""
queryset = models.Iterable.objects.all()
serializer_class = serializers.IterableSerializer
filter_fields = ('name', 'description', 'min_val', 'max_val', 'increment')
natural_key = 'name'

def get_serializer_class(self):
if self.request.method == 'POST':
return serializers.IterableCreateSerializer
if self.request.method in ('PUT'):
return serializers.IterableUpdateSerializer
if self.request.method in ('PATCH'):
return serializers.IterablePartialUpdateSerializer
return self.serializer_class

def get_natural_key_kwargs(self, filter_value):
"""Return a dict of kwargs for natural_key lookup."""
return {self.natural_key: filter_value}

@detail_route(methods=['get'])
def next_value(self, request, pk=None, site_pk=None, *args, **kwargs):
"""Return next available Iterable value from this Network."""
iterable = self.get_resource_object(pk, site_pk)
value = iterable.get_next_value()
return self.success(value)


class ItervalueViewSet(ResourceViewSet):
"""
API endpoint that allows Itervalues to be viewed or edited.
"""
queryset = models.Itervalue.objects.all()
serializer_class = serializers.ItervalueSerializer
filter_class = filters.ItervalueFilter

def get_serializer_class(self):
if self.request.method == 'POST':
return serializers.ItervalueCreateSerializer
if self.request.method in ('PUT'):
return serializers.ItervalueUpdateSerializer
if self.request.method in ('PATCH'):
return serializers.ItervaluePartialUpdateSerializer

return self.serializer_class


class DeviceViewSet(ResourceViewSet):
"""
Expand Down
Loading