--- a/.hgignore Tue Jun 07 10:46:20 2016 +0200
+++ b/.hgignore Mon Jun 13 14:23:58 2016 +0200
@@ -29,3 +29,5 @@
^server/php/basic/resources/config.php$
^server/php/basic/data
.orig$
+^server/python/django2/MANIFEST.in$
+^server/python/django2/renkanmanager.egg-info
--- a/server/python/django2/Readme.md Tue Jun 07 10:46:20 2016 +0200
+++ b/server/python/django2/Readme.md Mon Jun 13 14:23:58 2016 +0200
@@ -5,5 +5,9 @@
The following setting can be defined:
RENKAN_USER_DISPLAY_FIELD
-
-This defines the field that will be used in your user model to serialize the user information your API will send in the responses. ("username", "external_id"...) Will default to the USERNAME_FIELD of the User Model class.
\ No newline at end of file
+
+This defines the field that will be used in your user model to serialize the user information your API will send in the responses. ("username", "external_id"...) Will default to the USERNAME_FIELD of the User Model class.
+
+## Test
+
+ $ DJANGO_SETTINGS_MODULE=tests.settings django-admin test renkanmanager
--- a/server/python/django2/renkanmanager/api/views.py Tue Jun 07 10:46:20 2016 +0200
+++ b/server/python/django2/renkanmanager/api/views.py Mon Jun 13 14:23:58 2016 +0200
@@ -23,22 +23,22 @@
from rest_framework.views import APIView
logger = logging.getLogger(__name__)
-
+
class RenkanList(APIView):
"""
View for listing renkans or posting new renkan
"""
-
+
queryset = Renkan.objects
-
+
def get(self, request, workspace_guid='', format=None):
if workspace_guid == '':
renkans = self.queryset.all()
else:
renkans = self.queryset.filter(workspace__workspace_guid=workspace_guid)
serializer = RenkanSerializer(renkans, many=True)
- return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
-
+ return Response(serializer.data, status=status.HTTP_200_OK, content_type='application/json')
+
def post(self, request, workspace_guid='', format=None):
create_data = {key:request.data[key] for key in request.data.keys()}
source_renkan_guid = request.GET.get("source_renkan_id", request.data.get("source_renkan_id", None))
@@ -65,10 +65,11 @@
create_data["workspace_id"] = workspace_guid
serializer = RenkanSerializer(data=create_data)
if serializer.is_valid():
- serializer.save(creator=request.user)
+ creator = request.user if request.user and not request.user.is_anonymous() else None
+ serializer.save(creator=creator)
return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-
+
class RenkanDetail(APIView):
"""
@@ -76,13 +77,13 @@
"""
lookup_field = "renkan_guid"
queryset = Renkan.objects
-
+
def get_object(self, renkan_guid):
return self.queryset.get(renkan_guid=renkan_guid)
-
+
def dispatch(self, *args, **kwargs):
return super(RenkanDetail, self).dispatch(*args, **kwargs)
-
+
def get(self, request, renkan_guid, format=None):
try:
renkan = self.get_object(renkan_guid=renkan_guid)
@@ -133,9 +134,9 @@
"""
View for listing workspaces or creating new workspace
"""
-
+
queryset = Workspace.objects
-
+
def get(self, request, format=None):
workspaces = self.queryset.all()
serializer = WorkspaceSerializer(workspaces, many=True)
@@ -144,7 +145,8 @@
def post(self, request, format=None):
serializer = WorkspaceSerializer(data=request.data)
if serializer.is_valid():
- serializer.save(creator=request.user)
+ creator = request.user if request.user and not request.user.is_anonymous() else None
+ serializer.save(creator=creator)
return Response(serializer.data, status=status.HTTP_201_CREATED, content_type='application/json')
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@@ -152,13 +154,13 @@
"""
View for retrieving, updating or deleting a single workspace
"""
-
+
lookup_field = "workspace_guid"
queryset = Workspace.objects
-
+
def get_object(self, workspace_guid):
return self.queryset.get(workspace_guid=workspace_guid)
-
+
def get(self, request, workspace_guid, format=None):
try:
workspace = self.get_object(workspace_guid=workspace_guid)
@@ -195,13 +197,13 @@
"""
View for listing revisions from a given renkan
"""
-
+
def get_queryset(self, renkan_guid=""):
if renkan_guid:
return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid)
else:
return Revision.objects
-
+
def get(self, request, renkan_guid, format=None):
revisions = self.get_queryset(renkan_guid)
if not revisions:
@@ -213,15 +215,15 @@
"""
View for retrieving or deleting a single revision from a given renkan
"""
-
+
lookup_field = "revision_guid"
-
+
def get_queryset(self, renkan_guid=""):
if renkan_guid:
return Revision.objects.filter(parent_renkan__renkan_guid=renkan_guid)
else:
return Revision.objects
-
+
def get(self, request, renkan_guid, revision_guid, format=None):
revisions = self.get_queryset(renkan_guid)
if not revisions:
--- a/server/python/django2/renkanmanager/serializers.py Tue Jun 07 10:46:20 2016 +0200
+++ b/server/python/django2/renkanmanager/serializers.py Mon Jun 13 14:23:58 2016 +0200
@@ -25,15 +25,19 @@
modification_date = serializers.SerializerMethodField("get_current_revision_modification_date")
create_new_revision = serializers.BooleanField(write_only=True, required=False) # only used for updating
validation_timestamp = serializers.CharField(write_only=True, required=False) # only used for updating is a content json is not provided
-
+
# ADD ERROR HANDLING
def get_current_revision_last_updator(self, renkan):
- return getattr(renkan.current_revision.last_updated_by, RENKAN_USER_DISPLAY_FIELD)
-
-
+ last_updator = renkan.current_revision.last_updated_by
+ if last_updator:
+ return getattr(last_updator, RENKAN_USER_DISPLAY_FIELD)
+ else:
+ return ''
+
+
def get_current_revision_modification_date(self, renkan):
return renkan.current_revision.modification_date
-
+
@transaction.atomic
def create(self, validated_data):
"""
@@ -52,7 +56,7 @@
)
except ValidationError as ve:
raise serializers.ValidationError(ve.args[0])
-
+
@transaction.atomic
def update(self, renkan, validated_data):
"""
@@ -80,18 +84,18 @@
except ValidationError as ve:
raise serializers.ValidationError(str(ve.args[0]))
return renkan
-
+
def validate_workspace_id(self, value):
if self.instance is not None:
raise serializers.ValidationError("You cannot update workspace_guid")
return value
-
+
def validate_source_revision_id(self, value):
if self.instance is not None:
raise serializers.ValidationError("You cannot update source_revision_guid")
return value
-
- def validate_content(self, value):
+
+ def validate_content(self, value):
try:
loaded_json = json.loads(value)
except ValueError:
@@ -103,9 +107,10 @@
if (not "views" in loaded_json):
raise serializers.ValidationError("Content requires a 'views' entry")
return value
-
+
def validate_validation_timestamp(self, value):
- logger.debug("%r", value)
+ logger.debug("%r < %r", dateparse.parse_datetime(value), self.get_current_revision_modification_date(self.instance))
+
if self.instance and dateparse.parse_datetime(value) < self.get_current_revision_modification_date(self.instance):
raise serializers.ValidationError("Invalid timestamp was provided")
return value
@@ -121,19 +126,19 @@
revision_created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
revision_last_updated_by = serializers.SlugRelatedField(source="last_updated_by", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
revision_modification_date = serializers.ReadOnlyField(source="modification_date")
-
+
def get_related_workspace_guid(self, revision):
if revision.parent_renkan.workspace:
return revision.parent_renkan.workspace.workspace_guid
else:
return ''
-
+
def get_related_renkan_creator(self, revision):
return getattr(revision.parent_renkan.creator, RENKAN_USER_DISPLAY_FIELD)
-
+
def get_related_renkan_creation_date(self, revision):
return revision.parent_renkan.creation_date
-
+
class WorkspaceSerializer(serializers.Serializer):
id = serializers.ReadOnlyField(source="workspace_guid")
@@ -141,15 +146,15 @@
creation_date = serializers.ReadOnlyField()
renkan_count = serializers.ReadOnlyField()
title = serializers.CharField()
-
+
def create(self, validated_data):
creator = validated_data.get('creator')
title = validated_data.get('title', '')
workspace = Workspace.objects.create(creator=creator, title=title)
workspace.save()
return workspace
-
+
def update(self, workspace, validated_data):
workspace.title = validated_data.get('title', '')
workspace.save()
- return workspace
\ No newline at end of file
+ return workspace
--- a/server/python/django2/renkanmanager/tests/v1_0/tests_renkan.py Tue Jun 07 10:46:20 2016 +0200
+++ b/server/python/django2/renkanmanager/tests/v1_0/tests_renkan.py Mon Jun 13 14:23:58 2016 +0200
@@ -5,19 +5,19 @@
from renkanmanager.models import Renkan, Revision
from rest_framework import status
from rest_framework.test import APITestCase
+from rest_framework.test import force_authenticate
User = get_user_model()
class RenkanTests(APITestCase):
-
+
def setUp(self):
User.objects.create_superuser("blop", "blop@blop.com", "blop")
self.user = User.objects.get_by_natural_key(username="blop")
- _ = self.client.login(username="blop", password="blop")
- User.objects.create_user("blip", "blip@blip.com", "blip")
- self.unauthorized_user = User.objects.get_by_natural_key(username="blip")
-
+
+ self.client.force_login(self.user)
+
# POSTing test workspace
post_url = reverse("v1.0:workspace_list")
test_title = "bleh_title"
@@ -66,21 +66,21 @@
"views": []
}
self.third_test_content = json.dumps(self.third_test_content_dict)
-
+
def test_create_renkan(self):
-
+
###################################################
# POSTing new Renkan
###################################################
-
+
post_url = reverse("v1.0:renkan_list")
data = {"title": self.first_test_title, "content": self.first_test_content}
-
+
post_response = self.client.post(post_url, data, format="json")
self.assertEqual(post_response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Renkan.objects.count(), 1)
self.assertEqual(Revision.objects.count(), 1)
-
+
# Checking POSTed Renkan data
post_response_dict = json.loads(post_response.content.decode())
post_response_content_dict = json.loads(post_response_dict.get("content", "{}"))
@@ -96,11 +96,11 @@
for key in list(self.first_test_content_dict.keys()) + list(set(new_renkan_content_dict.keys()) - set(self.first_test_content_dict.keys())):
if key != "updated" and key != "created" and key != "id":
self.assertEqual(new_renkan_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
-
+
# Revision count
self.assertEqual(new_renkan.revision_count, 1)
self.assertEqual(post_response_dict.get("revision_count", ""), 1)
-
+
# Checking POSTed Renkan revision data
new_renkan_revision_guid = post_response_dict.get("current_revision_id", "")
new_renkan_revision = Revision.objects.get(revision_guid = new_renkan_revision_guid)
@@ -113,29 +113,29 @@
for key in list(self.first_test_content_dict.keys()) + list(set(post_response_content_dict.keys()) - set(self.first_test_content_dict.keys())):
if key != "updated" and key != "created" and key != "id":
self.assertEqual(post_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
-
+
# in the database
self.assertEqual(new_renkan_revision.title, self.first_test_title)
new_revision_content_dict = json.loads(new_renkan_revision.content)
for key in list(self.first_test_content_dict.keys()) + list(set(new_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())):
if key != "updated" and key != "created" and key != "id":
self.assertEqual(new_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
-
+
# Checking permission
self.assertTrue(self.user.has_perm("view_renkan", new_renkan))
-
+
###################################################
# POSTing new Renkan into workspace
###################################################
-
+
post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid})
data = {"title": self.second_test_title, "content": self.second_test_content}
-
+
post_response = self.client.post(post_url, data, format="json")
self.assertEqual(post_response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Renkan.objects.count(), 2)
self.assertEqual(Revision.objects.count(), 2)
-
+
# Checking POSTed Renkan data
post_response_dict = json.loads(post_response.content.decode())
new_renkan_guid = post_response_dict.get("id", "")
@@ -152,11 +152,11 @@
for key in list(self.second_test_content_dict.keys()) + list(set(new_renkan_content_dict.keys()) - set(self.second_test_content_dict.keys())):
if key != "updated" and key != "created" and key != "id" and key != "space_id":
self.assertEqual(new_renkan_content_dict.get(key, ""), self.second_test_content_dict.get(key, ""))
-
+
# Revision count
self.assertEqual(new_renkan.revision_count, 1)
self.assertEqual(post_response_dict.get("revision_count", ""), 1)
-
+
###################################################
# POSTing new Renkan with no content
###################################################
@@ -167,136 +167,118 @@
self.assertEqual(post_response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Renkan.objects.count(), 3)
self.assertEqual(Revision.objects.count(), 3)
-
+
###################################################
# POSTing with wrong workspace_guid
###################################################
-
+
post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": "bleh-bad-workspace-guid"})
data = {"title": self.third_test_title, "content": self.third_test_content}
-
+
post_response = self.client.post(post_url, data, format="json")
self.assertEqual(post_response.status_code, status.HTTP_404_NOT_FOUND)
-
+
###################################################
# POSTing with non-JSON serializable content
###################################################
-
+
post_url = reverse("v1.0:renkan_list")
data = {"title": self.third_test_title, "content": "notJson(Serializable}"}
-
+
post_response = self.client.post(post_url, data, format="json")
self.assertEqual(post_response.status_code, status.HTTP_400_BAD_REQUEST)
-
- ###################################################
- # try POSTing with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid})
- data = {"title": self.third_test_title, "content": self.third_test_content}
- post_response = self.client.post(post_url, data, format="json")
- self.assertEqual(post_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
+
def test_get_renkan(self):
-
+
###################################################
# POSTing new Renkan
###################################################
-
+
post_url = reverse("v1.0:renkan_list")
data = {}
post_response = self.client.post(post_url, data, format="json")
post_response_dict = json.loads(post_response.content.decode())
new_renkan_guid = post_response_dict.get("id", "")
new_revision_guid = post_response_dict.get("current_revision_id", "")
-
+
###################################################
# GETting posted Renkan
###################################################
-
+
get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":new_renkan_guid})
get_response = self.client.get(get_url, format="json")
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
-
+
# Checking GET data
get_response_dict = json.loads(get_response.content.decode())
self.assertEqual(new_renkan_guid, get_response_dict.get("id", ""))
self.assertEqual(new_revision_guid, get_response_dict.get("current_revision_id", ""))
self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("created_by", ""))
self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("last_updated_by", ""))
-
+
###################################################
# GETting with wrong guid
###################################################
-
+
get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"})
get_response = self.client.get(get_url, format="json")
self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
-
- ###################################################
- # try GETting with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": new_renkan_guid})
- get_response = self.client.get(get_url, format="json")
- self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
def test_get_renkan_list(self):
-
+
###################################################
# POSTing new Renkans
###################################################
-
+
post_url = reverse("v1.0:renkan_list")
first_data = {"title": self.first_test_title, "content": self.first_test_content}
second_data = {"title": self.second_test_title, "content": self.second_test_content}
self.client.post(post_url, first_data, format="json")
self.client.post(post_url, second_data, format="json")
-
+
###################################################
# GETting posted Renkans
###################################################
-
+
get_url = post_url
get_response = self.client.get(get_url, format="json")
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
-
+
get_response_content = json.loads(get_response.content.decode()) # Should be a list
self.assertTrue(isinstance(get_response_content, list))
self.assertEqual(len(get_response_content), 2)
-
+
###################################################
# POSTing new Renkan into workspace
###################################################
-
+
post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": self.test_workspace_guid})
third_data = {"title": self.third_test_title, "content": self.third_test_content}
self.client.post(post_url, third_data, format="json")
-
+
###################################################
# GETting posted Renkans
###################################################
-
+
get_url = post_url
get_response = self.client.get(get_url, format="json")
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
-
+
get_response_content = json.loads(get_response.content.decode()) # Should be a list
self.assertTrue(isinstance(get_response_content, list))
self.assertEqual(len(get_response_content), 1)
-
-
-
-
-
+
+
+
+
+
def test_update_renkan(self):
###################################################
# POSTing new Renkan
###################################################
-
+
post_url = reverse("v1.0:renkan_list")
data = {}
post_response = self.client.post(post_url, data, format="json")
@@ -304,11 +286,11 @@
post_response_ts = json.loads(post_response_dict.get("content"), "{}").get("updated", "")
renkan_guid = post_response_dict.get("id", "")
revision_guid = post_response_dict.get("current_revision_id", "")
-
+
###################################################
# PUTting by updating current revision
###################################################
-
+
put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid})
put_content_dict = json.loads(self.first_test_content)
put_content_dict["updated"] = post_response_ts
@@ -322,13 +304,13 @@
put_response_dict = json.loads(put_response.content.decode())
put_response_content_dict = json.loads(put_response_dict.get("content", "{}"))
put_response_ts = put_response_content_dict.get("updated", "")
-
+
# checking we"re still on the same revision as the initial one
updated_project = Renkan.objects.get(renkan_guid=renkan_guid)
self.assertEqual(revision_guid, put_response_dict.get("current_revision_id", ""))
self.assertEqual(put_response_dict.get("revision_count", ""), 1)
self.assertEqual(updated_project.revision_count, 1)
-
+
self.assertEqual(revision_guid, updated_project.current_revision.revision_guid)
# checking data was updated
# in the reponse
@@ -336,7 +318,7 @@
for key in list(self.first_test_content_dict.keys()) + list(set(put_response_content_dict.keys()) - set(self.first_test_content_dict.keys())):
if key != "updated" and key!= "id" and key != "space_id":
self.assertEqual(put_response_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
-
+
# in the database
updated_revision = Revision.objects.get(revision_guid=revision_guid)
updated_revision_content_dict = json.loads(updated_revision.content)
@@ -344,11 +326,11 @@
for key in list(self.first_test_content_dict.keys()) + list(set(updated_revision_content_dict.keys()) - set(self.first_test_content_dict.keys())):
if key != "updated" and key!= "id" and key != "space_id":
self.assertEqual(updated_revision_content_dict.get(key, ""), self.first_test_content_dict.get(key, ""))
-
+
###################################################
# PUTting by creating a new revision
###################################################
-
+
put_content_dict = json.loads(self.second_test_content)
put_content_dict["updated"] = put_response_ts
put_data = {
@@ -361,7 +343,7 @@
put_response_dict = json.loads(put_response.content.decode())
put_response_content_dict = json.loads(put_response_dict.get("content", "{}"))
put_response_ts = put_response_content_dict.get("updated", "")
-
+
# checking we created a new revision
updated_project = Renkan.objects.get(renkan_guid=renkan_guid)
created_revision_guid = put_response_dict.get("current_revision_id", "")
@@ -370,7 +352,7 @@
self.assertEqual(Revision.objects.count(), 2)
self.assertEqual(put_response_dict.get("revision_count", ""), 2)
self.assertEqual(updated_project.revision_count, 2)
-
+
# checking project now points towards new revision
self.assertEqual(updated_project.current_revision.revision_guid, created_revision_guid)
# checking data was updated
@@ -386,11 +368,11 @@
for key in list(self.second_test_content_dict.keys()) + list(set(updated_revision_content_dict.keys()) - set(self.second_test_content_dict.keys())):
if key != "updated" and key!= "id" and key != "space_id":
self.assertEqual(updated_revision_content_dict.get(key, ""), self.second_test_content_dict.get(key, ""))
-
+
###################################################
# try to update source_revision_guid or workspace_guid
###################################################
-
+
put_data = {
"title" : self.third_test_title,
"content" : self.third_test_content,
@@ -398,52 +380,39 @@
}
put_response = self.client.put(put_url, put_data, format="json")
self.assertEqual(put_response.status_code, status.HTTP_400_BAD_REQUEST)
-
+
###################################################
# PUTting with wrong guid
###################################################
-
+
put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"})
put_response = self.client.put(put_url, {}, format="json")
self.assertEqual(put_response.status_code, status.HTTP_404_NOT_FOUND)
-
- ###################################################
- # try PUTting with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": renkan_guid})
- put_data = {
- "title" : self.third_test_title,
- "content" : self.third_test_content,
- "create_new_revision": False
- }
- put_response = self.client.put(put_url, put_data, format="json")
- self.assertEqual(put_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
+
def test_copy_renkan(self):
-
+
###################################################
# POSTing new Renkan
###################################################
-
+
post_url = reverse("v1.0:renkan_list")
data = {"title": self.first_test_title, "content": self.first_test_content}
post_response = self.client.post(post_url, data, format="json")
post_response_dict = json.loads(post_response.content.decode())
source_renkan_guid = post_response_dict.get("id", "")
source_revision_guid = post_response_dict.get("current_revision_id", "")
-
+
###################################################
# POSTing copy with query arg for RENKAN guid
###################################################
-
+
first_copy_data = {"title": "new_title_copy_1"}
first_copy_url = post_url+"?source_renkan_id="+source_renkan_guid
first_copy_response = self.client.post(first_copy_url, first_copy_data, format="json")
first_copy_response_dict = json.loads(first_copy_response.content.decode())
first_copy_response_content_dict = json.loads(first_copy_response_dict.get("content", "{}"))
- self.assertEqual(first_copy_response.status_code, status.HTTP_201_CREATED)
+ self.assertEqual(first_copy_response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Renkan.objects.count(), 2)
# Checking data
# in the response
@@ -467,11 +436,11 @@
self.assertEqual(getattr(first_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(getattr(first_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(getattr(first_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
-
+
###################################################
# POSTing copy with source_renkan_guid in data
###################################################
-
+
second_copy_data = {"source_renkan_id": source_renkan_guid, "title": "new_title_copy_2"}
second_copy_url = post_url
second_copy_response = self.client.post(second_copy_url, second_copy_data, format="json")
@@ -501,17 +470,17 @@
self.assertEqual(getattr(second_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(getattr(second_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(getattr(second_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
-
+
###################################################
# POSTing copy with query arg for REVISION guid
###################################################
-
+
third_copy_data = {"title": "new_title_copy_3"}
third_copy_url = post_url+"?source_revision_id="+source_revision_guid
third_copy_response = self.client.post(third_copy_url, third_copy_data, format="json")
third_copy_response_dict = json.loads(third_copy_response.content.decode())
third_copy_response_content_dict = json.loads(third_copy_response_dict.get("content", "{}"))
- self.assertEqual(third_copy_response.status_code, status.HTTP_201_CREATED)
+ self.assertEqual(third_copy_response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Renkan.objects.count(), 4)
# Checking data
# in the response
@@ -535,11 +504,11 @@
self.assertEqual(getattr(third_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(getattr(third_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(getattr(third_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
-
+
###################################################
# POSTing copy with source_revision_guid in data
###################################################
-
+
fourth_copy_data = {"source_revision_id": source_revision_guid}
fourth_copy_url = post_url
fourth_copy_response = self.client.post(fourth_copy_url, fourth_copy_data, format="json")
@@ -569,12 +538,12 @@
self.assertEqual(getattr(fourth_copy.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(getattr(fourth_copy_revision.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(getattr(fourth_copy_revision.last_updated_by, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
-
-
+
+
###################################################
# try POSTing copy with bad query arg guid and with bad data guid
###################################################
-
+
bad_copy_data = {"source_revision_id": "bleh_bad_id"}
# with query arg
qarg_bad_copy_url = post_url+"?source_revision_id=bleh_bad_id"
@@ -584,22 +553,13 @@
data_bad_copy_url = post_url
data_bad_copy_response = self.client.post(data_bad_copy_url, bad_copy_data, format="json")
self.assertEqual(data_bad_copy_response.status_code, status.HTTP_404_NOT_FOUND)
-
- ###################################################
- # try POSTing with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- post_url = reverse("v1.0:renkan_list")+"?source_revision_id="+source_revision_guid
- post_response = self.client.post(post_url, {}, format="json")
- self.assertEqual(post_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
def test_delete_renkan(self):
-
+
###################################################
# POSTing new Renkan
###################################################
-
+
post_url = reverse("v1.0:renkan_list")
data = {"title": self.first_test_title, "content": self.first_test_content}
post_response = self.client.post(post_url, data, format="json")
@@ -607,7 +567,7 @@
to_delete_renkan_guid = post_response_dict.get("id", "")
to_delete_revision_guid = post_response_dict.get("current_revision_id", "")
to_delete_renkan_ts = json.loads(post_response_dict.get("content", "")).get("updated", "")
-
+
###################################################
# POSTing copy
###################################################
@@ -615,55 +575,43 @@
post_response = self.client.post(post_url+"?source="+to_delete_renkan_guid, data, format="json")
post_response_dict = json.loads(post_response.content.decode())
copy_renkan_guid = post_response_dict.get("id", "")
-
+
# Adding another revision
put_data = {"title": self.first_test_title+"_edited!", "validation_timestamp": to_delete_renkan_ts, "create_new_revision": True}
put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid})
put_response = self.client.put(put_url, put_data, format="json")
self.assertEqual(Renkan.objects.count(), 2)
self.assertEqual(Revision.objects.count(), 3)
-
- ###################################################
- # try to DELETE with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid})
- delete_response = self.client.delete(delete_url, format="json")
- self.assertEqual(delete_response.status_code, status.HTTP_403_FORBIDDEN)
-
- # Restoring rightful user
- _ = self.client.login(username="blop", password="blop")
-
+
+
###################################################
# DELETE initial renkan
###################################################
-
+
delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid})
delete_response = self.client.delete(delete_url, format="json")
self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(Renkan.objects.count(), 1) # Only the copy remains
self.assertEqual(Revision.objects.count(), 1) # Only the copy initial revision remains
-
+
###################################################
# Try to GET deleted renkan
###################################################
-
+
get_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid})
get_response = self.client.get(get_url, format="json")
self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
-
+
###################################################
# Check that remaining renkan doesn"t have reference to deleted renkan
###################################################
copy_renkan = Renkan.objects.get(renkan_guid=copy_renkan_guid)
self.assertIsNone(copy_renkan.source_revision)
-
+
###################################################
# Try to DELETE renkan with wrong guid
###################################################
-
+
delete_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid": "bad-id"})
delete_response = self.client.delete(delete_url, format="json")
self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)
-
\ No newline at end of file
--- a/server/python/django2/renkanmanager/tests/v1_0/tests_revision.py Tue Jun 07 10:46:20 2016 +0200
+++ b/server/python/django2/renkanmanager/tests/v1_0/tests_revision.py Mon Jun 13 14:23:58 2016 +0200
@@ -10,18 +10,16 @@
User = get_user_model()
class RevisionTests(APITestCase):
-
+
def setUp(self):
User.objects.create_superuser("blop", "blop@blop.com", "blop")
self.user = User.objects.get_by_natural_key(username="blop")
_ = self.client.login(username="blop", password="blop")
- User.objects.create_user("blip", "blip@blip.com", "blip")
- self.unauthorized_user = User.objects.get_by_natural_key(username="blip")
-
+
###################################################
# POSTing new Renkan
###################################################
-
+
post_url = reverse("v1.0:renkan_list")
self.test_title = "test_title_1"
test_content_dict_init = {
@@ -44,56 +42,47 @@
self.post_response_content_dict = json.loads(post_response_dict.get("content", "{}"))
self.test_renkan_guid = post_response_dict.get("id", "")
self.test_initial_revision_guid = post_response_dict.get("current_revision_id", "")
-
+
def test_get_revision(self):
-
+
###################################################
# GETting revision
###################################################
-
+
get_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
get_response = self.client.get(get_url, {}, format="json")
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
-
+
# Checking data
- get_response_dict = json.loads(get_response.content.decode())
+ get_response_dict = json.loads(get_response.content.decode())
self.assertEqual(get_response_dict.get("id", ""), self.test_initial_revision_guid)
self.assertEqual(get_response_dict.get("parent_renkan_id", ""), self.test_renkan_guid)
self.assertEqual(get_response_dict.get("revision_created_by", ""), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(get_response_dict.get("revision_last_updated_by", ""), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(get_response_dict.get("title", ""), self.test_data.get("title", ""))
-
+
###################################################
# GETting with wrong renkan guid
###################################################
-
+
get_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : "bad-renkan-guid", "revision_guid": self.test_initial_revision_guid})
get_response = self.client.get(get_url, {}, format="json")
self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
-
+
###################################################
# GETting with wrong revision guid
###################################################
-
+
get_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": "bad-revision-guid"})
get_response = self.client.get(get_url, {}, format="json")
self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
-
- ###################################################
- # try GETting with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- get_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
- get_response = self.client.get(get_url, {}, format="json")
- self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
def test_get_revision_list(self):
-
+
###################################################
# PUTting another revision in test renkan
###################################################
-
+
put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid" : self.test_renkan_guid})
put_title = "edited_title"
put_data = {
@@ -102,42 +91,34 @@
"create_new_revision": True
}
put_response = self.client.put(put_url, put_data, format="json")
-
+
###################################################
# GETting revision lists
###################################################
-
+
get_url = reverse("v1.0:revision_list", kwargs={"renkan_guid" : self.test_renkan_guid})
get_response = self.client.get(get_url, {}, format="json")
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
-
+
# Checking data
get_response_content = json.loads(get_response.content.decode()) # Should be a list
self.assertTrue(isinstance(get_response_content, list))
self.assertEqual(len(get_response_content), 2)
-
- ###################################################
- # GETting with wrong renkan guid
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- get_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
- get_response = self.client.get(get_url, {}, format="json")
- self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
+
def test_delete_revision(self):
-
+
###################################################
# Try to DELETE the initial revision (last revision, should 400)
###################################################
delete_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
delete_response = self.client.delete(delete_url, {}, format="json")
self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST)
-
+
###################################################
# PUTting another revision in test renkan
###################################################
-
+
put_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid" : self.test_renkan_guid})
put_title = "edited_title"
put_data = {
@@ -148,48 +129,38 @@
put_response = self.client.put(put_url, put_data, format="json")
put_response_dict = json.loads(put_response.content.decode())
added_revision_guid = put_response_dict.get("current_revision_id", "")
-
+
###################################################
# Try to DELETE the added revision (current revision, should 400)
###################################################
-
+
delete_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": added_revision_guid})
delete_response = self.client.delete(delete_url, {}, format="json")
self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST)
-
-
- ###################################################
- # try to DELETE with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- delete_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
- delete_response = self.client.delete(delete_url, {}, format="json")
- self.assertEqual(delete_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
# Restoring rightful user
_ = self.client.login(username="blop", password="blop")
-
+
###################################################
# Try to DELETE the initial revision (should 204 now that we added a revision)
###################################################
-
+
delete_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": self.test_initial_revision_guid})
delete_response = self.client.delete(delete_url, {}, format="json")
self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT)
-
+
###################################################
# Try to DELETE with wrong renkan guid
###################################################
-
+
delete_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : "bad-renkan-guid", "revision_guid": self.test_initial_revision_guid})
delete_response = self.client.delete(delete_url, {}, format="json")
self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)
-
+
###################################################
# Try to DELETE with wrong revision guid
###################################################
-
+
delete_url = reverse("v1.0:revision_detail", kwargs={"renkan_guid" : self.test_renkan_guid, "revision_guid": "bad-revision-guid"})
delete_response = self.client.delete(delete_url, {}, format="json")
- self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)
\ No newline at end of file
+ self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)
--- a/server/python/django2/renkanmanager/tests/v1_0/tests_workspace.py Tue Jun 07 10:46:20 2016 +0200
+++ b/server/python/django2/renkanmanager/tests/v1_0/tests_workspace.py Mon Jun 13 14:23:58 2016 +0200
@@ -8,27 +8,25 @@
User = get_user_model()
class WorkspaceTests(APITestCase):
-
+
def setUp(self):
User.objects.create_superuser("blop", "blop@blop.com", "blop")
self.user = User.objects.get_by_natural_key("blop")
_ = self.client.login(username="blop", password="blop")
- User.objects.create_user("blip", "blip@blip.com", "blip")
- self.unauthorized_user = User.objects.get_by_natural_key("blip")
-
+
def test_post_workspace(self):
-
+
###################################################
# POSTing test Workspace
###################################################
-
+
post_url = reverse("v1.0:workspace_list")
test_title = "bleh_title"
data = {"title": test_title}
post_response = self.client.post(post_url, data, format="json")
post_response_dict = json.loads(post_response.content.decode())
self.assertEqual(post_response.status_code, status.HTTP_201_CREATED)
-
+
# Checking data
# in the response
self.assertEqual(post_response_dict.get("workspace_created_by"), getattr(self.user, User.USERNAME_FIELD))
@@ -38,27 +36,17 @@
created_workspace = Workspace.objects.get(workspace_guid=created_workspace_guid)
self.assertEqual(getattr(created_workspace.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(created_workspace.title, test_title)
-
+
# Checking permission
self.assertTrue(self.user.has_perm("view_workspace", created_workspace))
-
- ###################################################
- # try POSTing with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- post_url = reverse("v1.0:workspace_list")
- data = {"title": "wont_work"}
- post_response = self.client.post(post_url, data, format="json")
- self.assertEqual(post_response.status_code, status.HTTP_403_FORBIDDEN)
-
-
+
+
def test_get_workspace_list(self):
-
+
###################################################
# POSTing new Workspaces
###################################################
-
+
post_url = reverse("v1.0:workspace_list")
first_test_title = "bleh_title_2"
second_test_title = "bleh_title_3"
@@ -66,37 +54,37 @@
second_data = {"title": second_test_title}
self.client.post(post_url, first_data, format="json")
self.client.post(post_url, second_data, format="json")
-
+
###################################################
# GETting Workspaces
###################################################
-
+
get_url = post_url
get_response = self.client.get(get_url, format=json)
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
-
+
# Check data
get_response_content = json.loads(get_response.content.decode()) # Should be a list
self.assertTrue(isinstance(get_response_content, list))
self.assertEqual(len(get_response_content), 2)
-
+
def test_get_workspace(self):
-
+
###################################################
# POSTing test Workspace
###################################################
-
+
workspace_post_url = reverse("v1.0:workspace_list")
test_title = "bleh_title"
data = {"title": test_title}
post_response = self.client.post(workspace_post_url, data, format="json")
post_response_dict = json.loads(post_response.content.decode())
test_workspace_guid = post_response_dict.get("id")
-
+
###################################################
# POSTing new Renkans into test Workspace
###################################################
-
+
renkan_post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": test_workspace_guid})
first_test_title = "bleh_title"
second_test_title = "bleh_title_2"
@@ -104,63 +92,54 @@
second_data = {"title": second_test_title}
self.client.post(renkan_post_url, first_data, format="json")
self.client.post(renkan_post_url, second_data, format="json")
-
+
###################################################
# GETting test Workspace
###################################################
-
+
get_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid})
get_response = self.client.get(get_url, format="json")
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
-
+
# Checking GET data
get_response_dict = json.loads(get_response.content.decode())
self.assertEqual(test_workspace_guid, get_response_dict.get("id", ""))
self.assertEqual(test_title, get_response_dict.get("title", ""))
self.assertEqual(getattr(self.user, User.USERNAME_FIELD), get_response_dict.get("workspace_created_by", ""))
self.assertEqual(2, get_response_dict.get("renkan_count"))
-
+
###################################################
# GETting wrong workspace_guid
###################################################
-
+
get_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": "bleh-bad-workspace-id"})
get_response = self.client.get(get_url, format="json")
self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)
-
- ###################################################
- # try GETting with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- get_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid})
- get_response = self.client.get(get_url, format="json")
- self.assertEqual(get_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
def test_update_workspace(self):
-
+
###################################################
# POSTing test Workspace
###################################################
-
+
workspace_post_url = reverse("v1.0:workspace_list")
test_title = "bleh_title"
data = {"title": test_title}
post_response = self.client.post(workspace_post_url, data, format="json")
post_response_dict = json.loads(post_response.content.decode())
test_workspace_guid = post_response_dict.get("id")
-
+
###################################################
# PUTting into test Workspace
###################################################
-
+
put_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid})
edited_title = "bleh_title_2"
put_data = {"title": edited_title}
put_response = self.client.put(put_url, put_data, format="json")
put_response_dict = json.loads(put_response.content.decode())
self.assertEqual(put_response.status_code, status.HTTP_200_OK)
-
+
# Checking data
# in the response
self.assertEqual(put_response_dict.get("workspace_created_by"), getattr(self.user, User.USERNAME_FIELD))
@@ -172,83 +151,59 @@
self.assertEqual(getattr(edited_workspace.creator, User.USERNAME_FIELD), getattr(self.user, User.USERNAME_FIELD))
self.assertEqual(edited_workspace.title, edited_title)
self.assertEqual(edited_workspace.renkan_count, 0)
-
- ###################################################
- # try PUTting with unauthorized user
- ###################################################
-
- _ = self.client.login(username="blip", password="blip")
- put_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": test_workspace_guid})
- put_data = {
- "title" : "wont_work"
- }
- put_response = self.client.put(put_url, put_data, format="json")
- self.assertEqual(put_response.status_code, status.HTTP_403_FORBIDDEN)
-
+
+
def test_delete_workspace(self):
-
+
###################################################
# POSTing test Workspace
###################################################
-
+
workspace_post_url = reverse("v1.0:workspace_list")
test_title = "bleh_title"
data = {"title": test_title}
post_response = self.client.post(workspace_post_url, data, format="json")
post_response_dict = json.loads(post_response.content.decode())
to_delete_workspace_guid = post_response_dict.get("id", "")
-
+
###################################################
# POSTing new Renkan into test Workspace
###################################################
-
+
renkan_post_url = reverse("v1.0:renkan_list_workspace", kwargs={"workspace_guid": to_delete_workspace_guid})
renkan_test_title = "bleh_title"
renkan_test_data = {"title": renkan_test_title}
post_response = self.client.post(renkan_post_url, renkan_test_data, format="json")
to_delete_renkan_guid = json.loads(post_response.content.decode()).get("id", "")
-
+
###################################################
# Try to DELETE test Workspace (should fail, it still contains a Renkan)
###################################################
-
+
delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid":to_delete_workspace_guid})
delete_response = self.client.delete(delete_url, {}, format="json")
self.assertEqual(delete_response.status_code, status.HTTP_400_BAD_REQUEST)
-
+
###################################################
# DELETE posted Renkan
###################################################
-
+
delete_renkan_url = reverse("v1.0:renkan_detail", kwargs={"renkan_guid":to_delete_renkan_guid})
delete_renkan_response = self.client.delete(delete_renkan_url, format="json")
self.assertEqual(delete_renkan_response.status_code, status.HTTP_204_NO_CONTENT)
-
- ###################################################
- # try to DELETE with unauthorized user
+
###################################################
-
- _ = self.client.login(username="blip", password="blip")
- delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid":to_delete_workspace_guid})
- delete_response = self.client.delete(delete_url, {}, format="json")
- self.assertEqual(delete_response.status_code, status.HTTP_403_FORBIDDEN)
-
- # Restoring rightful user
- _ = self.client.login(username="blop", password="blop")
-
+ # DELETE test Workspace
###################################################
- # DELETE test Workspace
- ###################################################
-
+
delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid":to_delete_workspace_guid})
delete_response = self.client.delete(delete_url, {}, format="json")
self.assertEqual(delete_response.status_code, status.HTTP_204_NO_CONTENT)
-
+
###################################################
# Try to DELETE workspace with wrong guid
###################################################
-
+
delete_url = reverse("v1.0:workspace_detail", kwargs={"workspace_guid": "bad-workspace-guid"})
delete_response = self.client.delete(delete_url, format=json)
self.assertEqual(delete_response.status_code, status.HTTP_404_NOT_FOUND)
-
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/python/django2/requirements.txt Mon Jun 13 14:23:58 2016 +0200
@@ -0,0 +1,3 @@
+--index-url https://pypi.python.org/simple/
+
+-e .
--- a/server/python/django2/setup.py Tue Jun 07 10:46:20 2016 +0200
+++ b/server/python/django2/setup.py Mon Jun 13 14:23:58 2016 +0200
@@ -10,13 +10,13 @@
data_files = []
-
+
root_dir = os.path.dirname(__file__)
if root_dir != '':
os.chdir(root_dir)
source_dir = 'renkanmanager'
-
+
for dirpath, dirnames, filenames in os.walk(source_dir):
# Ignore dirnames that start with '.'
for i, dirname in enumerate(dirnames):
@@ -25,7 +25,7 @@
data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])
#write MANIFEST.in
-
+
with open("MANIFEST.in", "w") as m:
m.write("include MANIFEST.in\n")
for entry in data_files:
@@ -46,6 +46,12 @@
packages=find_packages(),
include_package_data=True,
zip_safe=False,
+ install_requires = [
+ 'Django>=1.9',
+ 'djangorestframework>=3.3',
+ 'easy-thumbnails>=2.3',
+ 'pytz'
+ ],
classifiers=[
'Development Status :: 3 - Alpha',
'Environment :: Web Environment',
@@ -62,10 +68,10 @@
'Topic :: Software Development :: Libraries :: Python Modules',
],
)
-
+
if __name__ == "__main__":
-
+
script_name = os.path.basename(sys.argv[0])
script_args = sys.argv[1:]
-
+
launch_setup(script_name, script_args)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/python/django2/tests/settings.py Mon Jun 13 14:23:58 2016 +0200
@@ -0,0 +1,57 @@
+import os
+import django.conf.global_settings as defaults
+
+DEBUG = True
+USE_TZ = True
+
+ROOT_URLCONF = 'renkanmanager.urls'
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'APP_DIRS': True,
+ },
+]
+
+LOGGING = {
+ 'version': 1,
+ 'disable_existing_loggers': False,
+ 'handlers': {
+ 'console': {
+ 'class': 'logging.StreamHandler',
+ },
+ },
+ 'loggers': {
+ 'django': {
+ 'handlers': ['console'],
+ 'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
+ },
+ 'renkanmanager': {
+ 'handlers': ['console'],
+ 'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
+ },
+ },
+}
+
+SECRET_KEY = "1Xks0ybXuEVZI32HbgGKje9L97ezev5vJJIohGB5aLo9rUi1BV"
+
+MIDDLEWARE_CLASSES = defaults.MIDDLEWARE_CLASSES + [
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+]
+
+INSTALLED_APPS = (
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.auth',
+ 'easy_thumbnails',
+ 'renkanmanager'
+)
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3'
+ }
+}
+
+AUTH_USER_MODEL='auth.User'