From 1e733ddffb52c24cf102326c91051bc4fc166c62 Mon Sep 17 00:00:00 2001 From: charltonaustin Date: Fri, 7 Oct 2016 15:56:58 -0400 Subject: [PATCH] Adding in a new message data model and the corresponding methods to in the API. --- data/database.py | 2 ++ .../a3002f7638d5_adding_in_messages_table.py | 26 +++++++++++++++++++ data/model/__init__.py | 1 + data/model/message.py | 12 +++++++++ endpoints/api/superuser.py | 14 +++++++--- initdb.py | 2 ++ static/js/directives/quay-message-bar.js | 1 + test/test_api_usage.py | 6 ++++- 8 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 data/migrations/versions/a3002f7638d5_adding_in_messages_table.py create mode 100644 data/model/message.py diff --git a/data/database.py b/data/database.py index d93bba30f..fe59c9171 100644 --- a/data/database.py +++ b/data/database.py @@ -774,6 +774,8 @@ class LogEntry(BaseModel): (('repository', 'datetime', 'kind'), False), ) +class Message(BaseModel): + content = TextField() class RepositoryActionCount(BaseModel): repository = ForeignKeyField(Repository) diff --git a/data/migrations/versions/a3002f7638d5_adding_in_messages_table.py b/data/migrations/versions/a3002f7638d5_adding_in_messages_table.py new file mode 100644 index 000000000..c16ea7339 --- /dev/null +++ b/data/migrations/versions/a3002f7638d5_adding_in_messages_table.py @@ -0,0 +1,26 @@ +"""Adding in messages table + +Revision ID: a3002f7638d5 +Revises: c9b91bee7554 +Create Date: 2016-10-07 11:14:15.054546 + +""" + +# revision identifiers, used by Alembic. +revision = 'a3002f7638d5' +down_revision = 'c9b91bee7554' + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +def upgrade(tables): + op.create_table('messages', + sa.Column("id", sa.INTEGER, primary_key=True), + sa.Column("content", sa.UnicodeText, nullable=False), + sa.PrimaryKeyConstraint('id', name=op.f('pk_messages')) + ) + + +def downgrade(tables): + op.drop_table('messages') diff --git a/data/model/__init__.py b/data/model/__init__.py index 9845a6014..6c35a6ae9 100644 --- a/data/model/__init__.py +++ b/data/model/__init__.py @@ -124,6 +124,7 @@ from data.model import ( image, label, log, + message, modelutil, notification, oauth, diff --git a/data/model/message.py b/data/model/message.py new file mode 100644 index 000000000..6fec3a73f --- /dev/null +++ b/data/model/message.py @@ -0,0 +1,12 @@ +from data.database import Message + + +def get_messages(): + messages = [] + for message in Message.select(): + messages.append({'id': message.id, 'content': message.content}) + return messages + +def create(messages): + for message in messages: + Message.create(content=message['content']) \ No newline at end of file diff --git a/endpoints/api/superuser.py b/endpoints/api/superuser.py index 429eae2a7..ab37c1b02 100644 --- a/endpoints/api/superuser.py +++ b/endpoints/api/superuser.py @@ -820,7 +820,7 @@ class SuperUserServiceKeyApproval(ApiResource): abort(403) -@resource('/v1/superuser/messages') +@resource('/v1/messages') @show_if(features.SUPER_USERS) class Messages(ApiResource): """ Resource for getting a list of super user messages """ @@ -838,6 +838,10 @@ class Messages(ApiResource): 'type': 'object', 'description': 'A single message', 'properties': { + 'id':{ + 'type': 'integer', + 'description': 'The message id', + }, 'content': { 'type': 'string', 'description': 'The actual message', @@ -852,12 +856,16 @@ class Messages(ApiResource): @nickname('getMessages') def get(self): """ Return a super users messages """ - messages = [] + messages = model.message.get_messages() return { 'messages': messages, } @require_scope(scopes.SUPERUSER) + @verify_not_prod + @nickname('createMessages') def post(self): """ Create a message """ - pass + body = request.get_json() + print body + model.message.create(body['messages']) diff --git a/initdb.py b/initdb.py index 69ccb38e5..3ce6b487b 100644 --- a/initdb.py +++ b/initdb.py @@ -776,6 +776,8 @@ def populate_database(minimal=False, with_storage=False): 'trigger_id': trigger.uuid, 'config': json.loads(trigger.config), 'service': trigger.service.name}) + model.message.create([{'content': 'We love you Quay customers!'}]) + fake_queue = WorkQueue('fakequeue', tf) fake_queue.put(['canonical', 'job', 'name'], '{}') diff --git a/static/js/directives/quay-message-bar.js b/static/js/directives/quay-message-bar.js index a85ae0b17..4c05893b9 100644 --- a/static/js/directives/quay-message-bar.js +++ b/static/js/directives/quay-message-bar.js @@ -11,6 +11,7 @@ angular.module('quay').directive('quayMessageBar', function () { scope: {}, controller: function ($scope, $element, ApiService) { $scope.messages = []; + ApiService.getMessages().then(function(data){ $scope.messages = data['messages'] || []; }); } }; }); diff --git a/test/test_api_usage.py b/test/test_api_usage.py index 53d19bb01..90665aff9 100644 --- a/test/test_api_usage.py +++ b/test/test_api_usage.py @@ -4283,7 +4283,11 @@ class TestSuperUserManagement(ApiTestCase): self.login(ADMIN_ACCESS_USER) # Create a message - self.postJsonResponse(Messages) + self.postJsonResponse(Messages, data=dict(messages=[{"content": "new message"}])) + + json = self.getJsonResponse(Messages) + + self.assertEquals(len(json['messages']), 2) if __name__ == '__main__': unittest.main()