Commit cf60a7ac60d2e6286274a9a407a63f6792a39fe6

Authored by pedro
1 parent 922ad5da
Exists in master

post no lighbase funcionando corretamente, porém, funcionamento do put é incerto

git-svn-id: http://svn.brlight.net/svn/lightbase-neo/trunk/LBBulk@825 29b92fdf-8c97-4584-b987-84e8d3c556fa
development.ini
1   -###
2   -# app configuration
3   -# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
4   -###
5   -
6 1 [app:main]
7 2 use = egg:LBBulk
8 3  
... ... @@ -14,7 +9,7 @@ pyramid.default_locale_name = en
14 9 pyramid.includes =
15 10 pyramid_tm
16 11  
17   -sqlalchemy.url = postgresql://postgres:postgres@10.1.0.152/projeto1
  12 +sqlalchemy.url = postgresql://rest:rest@localhost/projeto1
18 13  
19 14 domain = http://localhost/lbgenerator
20 15 base_name = WMI
... ... @@ -48,7 +43,7 @@ handlers =
48 43 qualname = lbbulk
49 44  
50 45 [logger_sqlalchemy]
51   -level = INFO
  46 +level = WARN
52 47 handlers =
53 48 qualname = sqlalchemy.engine
54 49 # "level = INFO" logs SQL queries.
... ...
lbbulk/config/routing.py
... ... @@ -10,5 +10,5 @@ def make_routes(config):
10 10 config.add_static_view('static', 'static', cache_max_age=3600)
11 11 config.add_route('home', '/')
12 12 config.add_restful_routes('sources', BulkSourcesContextFactory)
13   - config.add_restful_routes('registro', BulkUploadContextFactory,
  13 + config.add_restful_routes('reg', BulkUploadContextFactory,
14 14 view=RegCustomView)
15 15 \ No newline at end of file
... ...
lbbulk/model/BulkUpload.py
... ... @@ -9,25 +9,26 @@ bulk_upload = Table('lb_bulk_upload', metadata,
9 9 Column('chave_externa', String, nullable=False),
10 10 Column('id_source', Integer,
11 11 ForeignKey('lb_bulk_sources.id_source'),
12   - nullable=False)
  12 + nullable=False),
  13 + extend_existing=True
13 14 )
14 15  
15 16 # map to it
16 17 class BulkUpload(Base):
17 18 __table__ = bulk_upload
18 19  
  20 + def verifica_registro(data):
  21 + q = session.query(BulkUpload).filter_by(id_source=data['id_source'], chave_externa=data['json_reg']['id_reg'] )
  22 + registro_existe = q.first()
  23 + return registro_existe
  24 +
  25 +
19 26 class BulkUploadContextFactory(SQLAlchemyORMContext):
20 27 entity = BulkUpload
21 28  
22 29 def session_factory(self):
23 30 return session
24 31  
25   - def create_member(self, data):
26   - member = self.entity(**data)
27   - self.session.add(member)
28   - self.session.commit()
29   - return member
30   -
31 32 def get_member_id_as_string(self, member):
32 33 id = self.get_member_id(member)
33 34 return json.dumps(id, cls=self.json_encoder)
34 35 \ No newline at end of file
... ...
lbbulk/view/restfulview.py
1 1 from pyramid_restler.view import RESTfulView
  2 +from pyramid.response import Response
  3 +from lbbulk.model.BulkUpload import BulkUpload
2 4 import configparser
3 5 import json
4 6 import requests
5 7  
6 8 class RegCustomView(RESTfulView):
  9 +
  10 + def create_member(self):
  11 + member = self.context.create_member(self._get_data())
  12 + id = self.context.get_member_id_as_string(member)
  13 + headers = {'Location': '/'.join((self.request.path, id))}
  14 + return Response(status=201, headers=headers)
  15 +
7 16 def _get_data(self):
8 17 """ Read json data from the post sent by some source """
9   - print('\n\n\n\n\n\n\n\n\n\n\n\n')
10 18 content_type = self.request.content_type
11 19 if content_type == 'application/json':
12 20 data = json.loads(self.request.body)
... ... @@ -22,20 +30,30 @@ class RegCustomView(RESTfulView):
22 30 def send_to_lightbase(self, data):
23 31 """ Sends the register to a lightbase table and returns a dict
24 32 with the external key and lighbase's id_reg """
  33 + data['json_reg'] = json.loads(data['json_reg'])
  34 + # converte os filhos pra dicts
  35 + existente = BulkUpload.verifica_registro(data)
  36 + # print(existente.id_reg)
  37 + print('\n\n\n\n\n\n\n\n\n\n')
25 38 registro = self.is_error(data)
26 39 id_source = registro['id_source']
27 40 registro.pop('id_source', None)
28   - registro['json_reg'] = json.loads(registro['json_reg'])
29 41 chave_externa = registro['json_reg']['id_reg']
30 42 registro['json_reg'].pop('id_reg', None)
  43 + registro['json_reg'] = json.dumps(registro['json_reg'])
31 44 url = self.get_url_lightbase()
32   - r = requests.post(url, data=registro)
33   - id_reg = r.json()
34   - data = {
35   - 'id_source':id_source,
36   - 'id_reg':id_reg,
37   - 'chave_externa':chave_externa
38   - }
  45 + if existente is None:
  46 + r = requests.post(url, data=registro)
  47 + id_reg = self.is_error_resp(r.json())
  48 + data = {
  49 + 'id_source':id_source,
  50 + 'id_reg':id_reg,
  51 + 'chave_externa':chave_externa
  52 + }
  53 + else:
  54 + r = requests.put(url, data=registro)
  55 + id_reg = existente
  56 + data = None
39 57 return data
40 58  
41 59 def get_url_lightbase(self): #TODO
... ... @@ -46,4 +64,9 @@ class RegCustomView(RESTfulView):
46 64 return url
47 65  
48 66 def is_error(self,data): #TODO
49   - return data
50 67 \ No newline at end of file
  68 + return data
  69 +
  70 + def is_error_resp(self,r):
  71 + if type(r) is dict:
  72 + raise TypeError('Lightbase error ' + str(r['_status']) + ': ' + r['_error_message'])
  73 + return r
51 74 \ No newline at end of file
... ...