-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.py
More file actions
152 lines (128 loc) · 4.44 KB
/
app.py
File metadata and controls
152 lines (128 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import datetime
import pymongo
import sys
from flask import Flask, jsonify
from flask import request
from flask import make_response
import json
from bson import json_util
app = Flask(__name__)
##Create a MongoDB client and open connection to Amazon DocumentDB
client = pymongo.MongoClient('MONGODB CONNECTION-STRING')
def myconverter(o):
if isinstance(o, datetime.datetime):
o.replace(tzinfo=None)
millisec = o.timestamp() * 1000
return (o.timestamp() * 1000) - 1000
##DB to use
def db_to_use(DB_Name, client):
myDB = client[DB_Name]
return myDB
##Collection to use
def Collection_to_use(Collection_Name, database):
myCol = database[Collection_Name]
return myCol
##Update or Add Record
def Update_Record(Json_Query,Json_Update,collection):
mydate = datetime.datetime.utcnow()
Json_Update['last_modified'] = mydate.strftime('%Y-%m-%d %H:%M:%S+00:00')
myObj = {}
myObj = {"$set": Json_Update}
results = collection.update_one(Json_Query,myObj,True)
return results
##Query and print Record
def Query_Collection(Json_Query, collection):
docs = collection.find(Json_Query)
return docs
#Get and return Doc By SysID
def sysIDquery_Collection(sysid, collection):
myquery = {}
myquery.sys_id = sysid
docs = collection.find(myquery)
return docs
#Query for attribute and return matching Sys_ID
def matchingquery_Collection(DocQuery, Collection):
sys_ids = []
docs = collection.find(DocQuery)
for doc in docs:
sys_ids.append(doc.sys_id)
return sys_ids
##Error
Error = {
'Error': 500,
'Error Message': u'Bad request malformed JSON. System Expects {"DB": "Name of Database", "Collection": "Name of Collection", "Payload": "<Your JSON Payload>", "Query": "<Your JSON Query>"}',
'done': False
}
##End Error
##Success Message
Success = {
'ExitCode': 201,
'Message': u'Payload was written',
'Document': u'',
'done': True
}
##End Success Message
##Error Writing to DB
Error = {
'Error': 550,
'Error Message': u'Error writing to DB',
'Error Details': u'',
'done': False
}
##End Writing Error
@app.route('/lighthouse/api/v1.0/Update', methods=['POST'])
def get_tasks():
# if not request.json or not "DB" in request.json or not "Collection" in request.json:
# return jsonify(Error), 500
requestPayload = request.json['payload']
requestCol = request.json['Collection']
requestDB = request.json['DB']
requestQuery = request.json['Query']
myDB = db_to_use(requestDB, client)
myCol = Collection_to_use(requestCol, myDB)
rec = Update_Record(requestQuery,requestPayload,myCol)
myDocs = Query_Collection(requestQuery, myCol)
for doc in myDocs:
# Success['Document'] = doc
print(doc)
return jsonify(Success), 201
# return jsonify(request.json), 201
##Write Updates to the system
@app.route('/lighthouse/api/v1.0/Query/raw', methods=['POST'])
def get_rawdoc():
print(request.json)
requestCol = request.json['Collection']
requestDB = request.json['DB']
requestQuery = request.json['Query']
myDB = db_to_use(requestDB, client)
myCol = Collection_to_use(requestCol, myDB)
#rec = Update_Record(requestQuery,requestPayload,myCol)
myobj = {}
myobj['Results'] = []
myDocs = Query_Collection(requestQuery, myCol)
for doc in myDocs:
doc.pop('_id', None)
myobj['Results'].append(doc)
#print(doc)
return json.dumps(myobj, default = myconverter), 201
# return jsonify(request.json), 201
@app.route('/lighthouse/api/v1.0/Query/SYSID', methods=['POST'])
def get_sysids():
# if not request.json or not "DB" in request.json or not "Collection" in request.json:
# return jsonify(Error), 500
requestCol = request.json['Collection']
requestDB = request.json['DB']
requestQuery = request.json['Query']
myDB = db_to_use(requestDB, client)
myCol = Collection_to_use(requestCol, myDB)
#rec = Update_Record(requestQuery,requestPayload,myCol)
myDocs = Query_Collection(requestQuery, myCol)
sysIDs = []
for doc in myDocs:
sysIDs.append(doc['sys_id'])
#Success['Document'] = doc
#print(doc)
return json.dumps(sysIDs), 201
# return jsonify(request.json), 201
if __name__ == '__main__':
app.run(debug=True,host="0.0.0.0",port=8080)