Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Communications Backbone System
communications-backbone
Commits
92db11ce
Unverified
Commit
92db11ce
authored
2 years ago
by
Dan Jones
Browse files
Options
Download
Email Patches
Plain Diff
feat: define notify and send endpoints
parent
fad98403
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
110 additions
and
47 deletions
+110
-47
Pipfile
Pipfile
+1
-0
Pipfile.lock
Pipfile.lock
+35
-4
api.py
api.py
+4
-0
endpoints/notify.py
endpoints/notify.py
+31
-20
endpoints/receive.py
endpoints/receive.py
+2
-2
endpoints/send.py
endpoints/send.py
+37
-21
No files found.
Pipfile
View file @
92db11ce
...
...
@@ -10,6 +10,7 @@ pyrabbit = "*"
flask
=
"*"
flask-restful
=
"*"
marshmallow
=
"*"
bson
=
"*"
[dev-packages]
...
...
This diff is collapsed.
Click to expand it.
Pipfile.lock
View file @
92db11ce
{
"_meta"
:
{
"hash"
:
{
"sha256"
:
"
b71ec6300f7c04a8d222991089770e4384941bf5553cfa12031330227ad043cb
"
"sha256"
:
"
6197445b839f98b90944ea771c7c0f63db31f0e455b325be3435fa2d17a89517
"
},
"pipfile-spec"
:
6
,
"requires"
:
{
...
...
@@ -31,6 +31,13 @@
],
"version"
:
"==9.0.1"
},
"bson"
:
{
"hashes"
:
[
"sha256:d6511b2ab051139a9123c184de1a04227262173ad593429d21e443d6462d6590"
],
"index"
:
"pypi"
,
"version"
:
"==0.5.10"
},
"click"
:
{
"hashes"
:
[
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"
,
...
...
@@ -70,6 +77,14 @@
"markers"
:
"python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'"
,
"version"
:
"==0.21.0"
},
"importlib-metadata"
:
{
"hashes"
:
[
"sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"
,
"sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"
],
"markers"
:
"python_version < '3.10'"
,
"version"
:
"==5.0.0"
},
"itsdangerous"
:
{
"hashes"
:
[
"sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"
,
...
...
@@ -142,11 +157,11 @@
},
"marshmallow"
:
{
"hashes"
:
[
"sha256:
35e02a3a06899c9119b785c12a22f4cda361745d66a71ab691fd7610202ae104
"
,
"sha256:
6804c16114f7fce1f5b4dadc31f4674af23317fcc7f075da21e35c1a35d781f7
"
"sha256:
90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78
"
,
"sha256:
93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b
"
],
"index"
:
"pypi"
,
"version"
:
"==3.1
8
.0"
"version"
:
"==3.1
9
.0"
},
"packaging"
:
{
"hashes"
:
[
...
...
@@ -187,6 +202,14 @@
"index"
:
"pypi"
,
"version"
:
"==1.1.0"
},
"python-dateutil"
:
{
"hashes"
:
[
"sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"
,
"sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
],
"markers"
:
"python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'"
,
"version"
:
"==2.8.2"
},
"pytz"
:
{
"hashes"
:
[
"sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"
,
...
...
@@ -217,6 +240,14 @@
],
"markers"
:
"python_version >= '3.7'"
,
"version"
:
"==2.2.2"
},
"zipp"
:
{
"hashes"
:
[
"sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"
,
"sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"
],
"markers"
:
"python_version >= '3.7'"
,
"version"
:
"==3.10.0"
}
},
"develop"
:
{}
...
...
This diff is collapsed.
Click to expand it.
api.py
View file @
92db11ce
...
...
@@ -3,6 +3,8 @@ from flask_restful import Api
from
endpoints.hello
import
HelloWorld
from
endpoints.clients
import
Client
,
ClientList
from
endpoints.receive
import
Receive
from
endpoints.send
import
Send
from
endpoints.notify
import
Notify
app
=
Flask
(
__name__
)
api
=
Api
(
app
)
...
...
@@ -11,6 +13,8 @@ api.add_resource(HelloWorld, "/")
api
.
add_resource
(
ClientList
,
"/client"
)
api
.
add_resource
(
Client
,
"/client/<client_id>"
)
api
.
add_resource
(
Receive
,
"/receive"
)
api
.
add_resource
(
Send
,
"/send"
)
api
.
add_resource
(
Notify
,
"/notify"
)
if
__name__
==
"__main__"
:
app
.
run
(
debug
=
True
)
This diff is collapsed.
Click to expand it.
endpoints/notify.py
View file @
92db11ce
from
flask_restful
import
Resource
,
reqparse
,
abort
,
fields
,
marshal_with
from
marshmallow
import
Schema
,
field
import
json
class
NotifySchema
(
Schema
):
client_id
=
fields
.
Str
(
required
=
True
)
secret
=
fields
.
Str
(
required
=
True
)
body
=
fields
.
Str
(
required
=
True
)
class
Notify
(
Resource
):
def
setup_request_parser
(
self
):
parser
=
reqparse
.
RequestParser
()
parser
.
add_argument
(
"client_id"
,
type
=
str
,
help
=
"A unique name to identify the client"
)
parser
.
add_argument
(
"secret"
,
type
=
str
,
help
=
"A human friendly name to identify the client"
)
parser
.
add_argument
(
"content"
,
type
=
str
,
help
=
"The message"
)
self
.
parser
=
parser
clients
=
None
schema
=
None
def
parse
(
self
):
return
self
.
parser
.
parse_args
()
def
__init__
(
self
):
self
.
schema
=
ReceiveSchema
()
with
open
(
"clients.json"
,
"r"
)
as
clients_file
:
self
.
clients
=
json
.
load
(
clients_file
)
def
put
(
self
,
client_id
):
args
=
clients_file
.
parse
()
def
post
(
self
):
errors
=
self
.
schema
.
validate
(
request
.
args
)
if
errors
:
abort
(
400
,
str
(
errors
))
client
=
clients_file
.
find
(
client_id
)
if
not
client
:
abort
(
404
,
message
=
"No client with id: {}"
.
format
(
client_id
))
else
:
client
=
clients_file
.
update
(
args
)
return
client
,
201
messages
=
[]
allow
=
False
body
=
request
.
args
.
get
(
"body"
)
client_id
=
request
.
args
.
get
(
"client_id"
)
notify_queue
=
client_id
+
"-notify"
if
client_id
in
self
.
clients
:
client
=
self
.
clients
.
get
(
client_id
)
if
request
.
args
.
get
(
"secret"
)
==
client
.
get
(
"secret"
):
allow
=
True
if
allow
:
connection
=
pika
.
BlockingConnection
(
pika
.
ConnectionParameters
(
host
=
"localhost"
))
channel
=
connection
.
channel
()
channel
.
queue_declare
(
queue
=
notify_queue
,
durable
=
True
)
channel
.
basic_publish
(
exchange
=
""
,
routing_key
=
notify_queue
,
body
=
body
)
deliver_connection
.
close
()
This diff is collapsed.
Click to expand it.
endpoints/receive.py
View file @
92db11ce
...
...
@@ -4,7 +4,7 @@ import pika
import
json
class
ReceiveSchema
(
Schema
):
class
Receive
Query
Schema
(
Schema
):
client_id
=
fields
.
Str
(
required
=
True
)
secret
=
fields
.
Str
(
required
=
True
)
max_messages
=
fields
.
Int
(
required
=
False
)
...
...
@@ -15,7 +15,7 @@ class Receive(Resource):
schema
=
None
def
__init__
(
self
):
self
.
schema
=
ReceiveSchema
()
self
.
schema
=
Receive
Query
Schema
()
with
open
(
"clients.json"
,
"r"
)
as
clients_file
:
self
.
clients
=
json
.
load
(
clients_file
)
...
...
This diff is collapsed.
Click to expand it.
endpoints/send.py
View file @
92db11ce
from
flask_restful
import
Resource
,
reqparse
,
abort
,
fields
,
marshal_with
from
marshmallow
import
Schema
,
field
import
json
class
SendSchema
(
Schema
):
client_id
=
fields
.
Str
(
required
=
True
)
secret
=
fields
.
Str
(
required
=
True
)
body
=
fields
.
Str
(
required
=
True
)
topic
=
fields
.
Str
(
required
=
True
)
class
Send
(
Resource
):
def
setup_request_parser
(
self
):
parser
=
reqparse
.
RequestParser
()
parser
.
add_argument
(
"client_id"
,
type
=
str
,
help
=
"A unique name to identify the client"
)
parser
.
add_argument
(
"secret"
,
type
=
str
,
help
=
"A human friendly name to identify the client"
)
parser
.
add_argument
(
"topic"
,
type
=
str
,
help
=
"Publisher topic"
)
parser
.
add_argument
(
"content"
,
type
=
str
,
help
=
"The message"
)
self
.
parser
=
parser
clients
=
None
schema
=
None
def
parse
(
self
):
return
self
.
parser
.
parse_args
()
def
__init__
(
self
):
self
.
schema
=
ReceiveSchema
()
with
open
(
"clients.json"
,
"r"
)
as
clients_file
:
self
.
clients
=
json
.
load
(
clients_file
)
def
put
(
self
,
client_id
):
args
=
clients_file
.
parse
()
def
post
(
self
):
errors
=
self
.
schema
.
validate
(
request
.
args
)
if
errors
:
abort
(
400
,
str
(
errors
))
client
=
clients_file
.
find
(
client_id
)
if
not
client
:
abort
(
404
,
message
=
"No client with id: {}"
.
format
(
client_id
))
else
:
client
=
clients_file
.
update
(
args
)
return
client
,
201
messages
=
[]
allow
=
False
body
=
request
.
args
.
get
(
"body"
)
topic
=
request
.
args
.
get
(
"topic"
)
client_id
=
request
.
args
.
get
(
"client_id"
)
outbox_queue
=
client_id
+
"-outbox"
if
client_id
in
self
.
clients
:
client
=
self
.
clients
.
get
(
client_id
)
if
request
.
args
.
get
(
"secret"
)
==
client
.
get
(
"secret"
):
allow
=
True
if
allow
:
connection
=
pika
.
BlockingConnection
(
pika
.
ConnectionParameters
(
host
=
"localhost"
))
channel
=
connection
.
channel
()
channel
.
queue_declare
(
queue
=
notify_queue
,
durable
=
True
)
message
=
{
'topic'
:
topic
,
'message'
:
body
,
}
channel
.
basic_publish
(
exchange
=
""
,
routing_key
=
notify_queue
,
body
=
message
)
deliver_connection
.
close
()
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment