/
AgenteExtEntidadBancaria.py
190 lines (148 loc) · 5.3 KB
/
AgenteExtEntidadBancaria.py
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# -*- coding: utf-8 -*-
from multiprocessing import Process, Queue
from string import Template
import socket
import sys
import uuid
from rdflib import Namespace, Graph, RDF
from rdflib.namespace import FOAF
from rdflib.term import Literal
from flask import Flask, request, render_template
from AgentUtil.ACLMessages import get_message_properties, build_message, send_message
from AgentUtil.FlaskServer import shutdown_server
from AgentUtil.OntoNamespaces import ACL
from AgentUtil.Agent import Agent
import requests
import logging
logging.basicConfig(level=logging.DEBUG)
import Constants.Constants as Constants
# Configuration stuff
hostname = '127.0.1.1'
port = 9009
agn = Namespace(Constants.ONTOLOGY)
# Contador de mensajes
mss_cnt = 0
#Operaciones bancarias
operaciones = []
# Datos del Agente
AgenteExtEntidadBancaria = Agent('AgenteExtEntidadBancaria',
agn.AgenteExtEntidadBancaria,
'http://%s:%d/comm' % (hostname, port),
'http://%s:%d/Stop' % (hostname, port))
# Directory agent address
DirectoryAgent = Agent('DirectoryAgent',
agn.Directory,
'http://%s:9000/Register' % hostname,
'http://%s:9000/Stop' % hostname)
# Global triplestore graph
dsgraph = Graph()
cola1 = Queue()
# Flask stuff
app = Flask(__name__)
@app.route("/", methods=['GET'])
def index():
return render_template('entidad_bancaria.html', operaciones=operaciones)
@app.route("/comm")
def comunicacion():
global dsgraph
global mss_cnt
req = Graph()
req.parse(data=request.args['content'])
message_properties = get_message_properties(req)
content = message_properties['content']
accion = str(req.value(subject=content, predicate=RDF.type))
logging.info('Accion: ' + accion)
if accion == 'CobrarP':
return cobrarP(req, content)
elif accion == 'Pagar':
return pagar(req, content)
elif accion == 'PagarTiendaExterna':
return pagarTiendaExterna(req, content)
def cobrarP(req, content):
global mss_cnt
mss_cnt = mss_cnt + 1
tarjeta_bancaria = req.value(content, agn.tarjeta_bancaria)
precio_total = req.value(content, agn.precio_total)
logging.info("Se ha realizado el cobro en la tarjeta bancaria " + str(tarjeta_bancaria) +
" de un importe de " + str(precio_total)+ "€")
respuesta = str("Cobro realizado correctamente")
operaciones.append(dict(
tipo='Cobro',
tarjeta=tarjeta_bancaria,
cuenta='No aplicable',
importe='+' + str(precio_total)
))
gCobroRealizado = Graph()
cobroRealizado = agn['cobroRealizado_' + str(mss_cnt)]
gCobroRealizado.add((cobroRealizado, RDF.type, Literal('CobroRealizado')))
gCobroRealizado.add((cobroRealizado, agn.respuesta, Literal(respuesta)))
return gCobroRealizado.serialize(format='xml')
def pagar(req, content):
global mss_cnt
mss_cnt = mss_cnt + 1
tarjeta_bancaria = req.value(content, agn.tarjeta_bancaria)
precio_total = req.value(content, agn.precio_total)
logging.info("Se ha realizado el pago a la tarjeta bancaria " + str(tarjeta_bancaria) +
" de un importe de " + str(precio_total)+ "€")
respuesta = str("Pago realizado correctamente")
operaciones.append(dict(
tipo='Pago',
tarjeta=tarjeta_bancaria,
cuenta='No aplicable',
importe='-' + str(precio_total)
))
gCobroRealizado = Graph()
cobroRealizado = agn['pagoRealizado_' + str(mss_cnt)]
gCobroRealizado.add((cobroRealizado, RDF.type, Literal('PagoRealizado')))
gCobroRealizado.add((cobroRealizado, agn.respuesta, Literal(respuesta)))
return gCobroRealizado.serialize(format='xml')
def pagarTiendaExterna(req, content):
global mss_cnt
mss_cnt = mss_cnt + 1
cuenta_bancaria = req.value(content, agn.cuenta_bancaria)
precio = req.value(content, agn.precio)
nombreProd = req.value(content, agn.nombre_prod)
logging.info("Se ha realizado el pago del producto externo " + str(nombreProd) +
" a la cuenta bancaria " + str(cuenta_bancaria) + " de un importe de " + str(precio) + "€")
operaciones.append(dict(
tipo='Pago',
tarjeta='No aplicable',
cuenta=cuenta_bancaria,
importe='-' + str(precio)
))
respuesta = str("Pago realizado correctamente")
gCobroRealizado = Graph()
cobroRealizado = agn['pagoRealizado_' + str(mss_cnt)]
gCobroRealizado.add((cobroRealizado, RDF.type, Literal('PagoRealizado')))
gCobroRealizado.add((cobroRealizado, agn.respuesta, Literal(respuesta)))
return gCobroRealizado.serialize(format='xml')
@app.route("/Stop")
def stop():
"""
Entrypoint que para el agente
:return:
"""
tidyup()
shutdown_server()
return "Parando Servidor"
def tidyup():
"""
Acciones previas a parar el agente
"""
pass
def agentbehavior1(cola):
"""
Un comportamiento del agente
:return:
"""
AgenteExtEntidadBancaria.register_agent(DirectoryAgent)
pass
if __name__ == '__main__':
# Ponemos en marcha los behaviors
ab1 = Process(target=agentbehavior1, args=(cola1,))
ab1.start()
# Ponemos en marcha el servidor
app.run(host=hostname, port=port)
# Esperamos a que acaben los behaviors
ab1.join()
print('The End')