Commit 3b7c35da118ffbf3d8de8dff1af84ff0222c1e71

Authored by antonygc91
1 parent c452bde3
Exists in master

change db url to ini file

wscserver/__init__.py
1 -from pyramid.config import Configurator  
2 -from pyramid_restler import includeme  
3 1
4 -from sqlalchemy import engine_from_config, create_engine  
5 -from sqlalchemy.orm import sessionmaker  
6 2
7 -from wscserver.config.routing import make_routes  
8 -from wscserver.model import initialize_sql, sqlalchemy_url 3 +from sqlalchemy import create_engine
  4 +from pyramid_restler import includeme
  5 +from pyramid.config import Configurator
  6 +from sqlalchemy.orm import sessionmaker
  7 +from sqlalchemy import engine_from_config
9 8
10 9
11 def main(global_config, **settings): 10 def main(global_config, **settings):
12 """ 11 """
13 This function returns a Pyramid WSGI application. 12 This function returns a Pyramid WSGI application.
14 """ 13 """
  14 +
  15 + from wscserver.model import initialize_sql
  16 +
  17 + initialize_sql(settings)
15 config = Configurator(settings=settings) 18 config = Configurator(settings=settings)
16 config.scan('wscserver.model') # the "important" line 19 config.scan('wscserver.model') # the "important" line
17 - engine = create_engine(sqlalchemy_url)  
18 - initialize_sql(engine)  
19 - includeme(config)  
20 20
  21 + from wscserver.config.routing import make_routes
  22 +
  23 + includeme(config)
21 make_routes(config) 24 make_routes(config)
22 config.scan('wscserver') 25 config.scan('wscserver')
  26 +
23 return config.make_wsgi_app() 27 return config.make_wsgi_app()
wscserver/model/__init__.py
1 # from sqlalchemy import engine_from_config 1 # from sqlalchemy import engine_from_config
2 -from sqlalchemy.ext.declarative import declarative_base  
3 -from sqlalchemy.orm import scoped_session, sessionmaker  
4 -from sqlalchemy.engine import create_engine 2 +
  3 +
5 from pyramid import config 4 from pyramid import config
  5 +from sqlalchemy.engine import create_engine
6 from paste.deploy.loadwsgi import appconfig 6 from paste.deploy.loadwsgi import appconfig
  7 +from sqlalchemy.ext.declarative import declarative_base
  8 +from sqlalchemy.orm import scoped_session, sessionmaker
  9 +
  10 +def initialize_sql(settings):
7 11
8 -sqlalchemy_url = 'postgresql://cacic:cacic@localhost/cacic'  
9 -DBSession = scoped_session(sessionmaker())  
10 -Base = declarative_base()  
11 -engine = create_engine(sqlalchemy_url)  
12 -Session = sessionmaker(bind=engine)  
13 -session = Session() 12 + global DBSession
  13 + global sqlalchemy_url
  14 + global DBSession
  15 + global Base
  16 + global engine
  17 + global Session
  18 + global session
14 19
  20 + sqlalchemy_url = settings['sqlalchemy.url']
  21 + DBSession = scoped_session(sessionmaker())
  22 + Base = declarative_base()
  23 + engine = create_engine(sqlalchemy_url)
  24 + Session = sessionmaker(bind=engine)
  25 + session = Session()
15 26
16 -def initialize_sql(engine):  
17 DBSession.configure(bind=engine) 27 DBSession.configure(bind=engine)
18 Base.metadata.bind = engine 28 Base.metadata.bind = engine
19 # Base.metadata.create_all(engine) 29 # Base.metadata.create_all(engine)
  30 +
  31 +
  32 +
  33 +
wscserver/view/restfulview.py
1 import json 1 import json
2 -import hashlib  
3 -  
4 from pyramid.response import Response 2 from pyramid.response import Response
5 from wscserver.model import session 3 from wscserver.model import session
6 - 4 +import zipfile
7 5
8 FILE_BEGIN = '{"results":[' 6 FILE_BEGIN = '{"results":['
9 FILE_END = '], "result_count": %s}' 7 FILE_END = '], "result_count": %s}'
@@ -33,21 +31,20 @@ FILTER_KEYS = str(tuple(COMPUTER_FILTER.keys())) @@ -33,21 +31,20 @@ FILTER_KEYS = str(tuple(COMPUTER_FILTER.keys()))
33 31
34 def viewcoleta(request): 32 def viewcoleta(request):
35 33
36 - #create index idx_id_computador on computador_coleta(id_computador); 34 + # Please ensure this index exists on database
  35 + # CREATE INDEX idx_id_computador ON computador_coleta(id_computador);
37 36
38 limit = request.params.get('limit', 'NULL') 37 limit = request.params.get('limit', 'NULL')
39 38
40 stmt1 = """ 39 stmt1 = """
41 - SELECT  
42 - id_computador 40 + SELECT id_computador
43 FROM computador_coleta 41 FROM computador_coleta
44 GROUP BY id_computador 42 GROUP BY id_computador
45 LIMIT {}; 43 LIMIT {};
46 - """.format(limit) 44 + """.format(limit)
47 45
48 computer_ids = session.execute(stmt1) 46 computer_ids = session.execute(stmt1)
49 47
50 -  
51 stmt2 = """ 48 stmt2 = """
52 SELECT classe.nm_class_name, 49 SELECT classe.nm_class_name,
53 cp.nm_property_name, 50 cp.nm_property_name,
@@ -56,7 +53,7 @@ def viewcoleta(request): @@ -56,7 +53,7 @@ def viewcoleta(request):
56 INNER JOIN class_property as cp ON (cc.id_class_property = 53 INNER JOIN class_property as cp ON (cc.id_class_property =
57 cp.id_class_property) 54 cp.id_class_property)
58 INNER JOIN classe ON (classe.id_class = cp.id_class) 55 INNER JOIN classe ON (classe.id_class = cp.id_class)
59 - WHERE cc.id_computador = {} AND 56 + WHERE cc.id_computador = {} AND
60 classe.nm_class_name IN {}; 57 classe.nm_class_name IN {};
61 """ 58 """
62 59
@@ -80,13 +77,22 @@ def viewcoleta(request): @@ -80,13 +77,22 @@ def viewcoleta(request):
80 77
81 f.write(FILE_END % computer_ids.rowcount) 78 f.write(FILE_END % computer_ids.rowcount)
82 79
83 - return Response('ok')  
84 - #return Response(  
85 - # content_type='application/json',  
86 - # content_disposition='filename=coleta.json',  
87 - # app_iter=[open('/var/antony/coleta.json', 'rb').read()]  
88 - #) 80 + if '1' in tuple(request.params.get('zip')):
89 81
  82 + with zipfile.ZipFile('/tmp/coleta.zip', 'w') as myzip:
  83 + myzip.write('/tmp/coleta.json')
  84 +
  85 + return Response(
  86 + content_type='application/zip',
  87 + content_disposition='filename=coleta.zip',
  88 + body_file=open('/tmp/coleta.zip', 'rb'))
  89 + else:
  90 + return Response(
  91 + content_type='application/json',
  92 + content_disposition='filename=coleta.json',
  93 + body_file=open('/tmp/coleta.json'))
  94 +
  95 + return Response('ok')
90 96
91 97
92 def build_computer_json(computer_group): 98 def build_computer_json(computer_group):
@@ -116,34 +122,3 @@ def build_computer_json(computer_group): @@ -116,34 +122,3 @@ def build_computer_json(computer_group):
116 122
117 return json.dumps(computer) 123 return json.dumps(computer)
118 124
119 -def zipcoleta():  
120 - """Recebe o json da coleta em um arquivo e zipa"""  
121 - coleta = requests.get('http://localhost/wscserver/rest/coleta')  
122 -  
123 - tmpdir = tempfile.gettempdir()  
124 - os.chdir(tmpdir)  
125 - f = open('coleta.json','r')  
126 - arquivozip = 'coleta.zip'  
127 - with zipfile.ZipFile(arquivozip, 'w') as myzip:  
128 - myzip.write(f.name)  
129 - f.close()  
130 - os.remove('coleta.json')  
131 - filepath = os.path.abspath(arquivozip)  
132 - return filepath  
133 -'''  
134 -def zipcoleta():  
135 - """Recebe o json da coleta em um arquivo e zipa"""  
136 - coleta = requests.get('http://localhost/wscserver/rest/coleta')  
137 -  
138 - path = tempfile.gettempdir()  
139 - os.chdir(path)  
140 - f = open('coleta.json','w')  
141 - f.write(coleta.text)  
142 - arquivozip = 'coleta.zip'  
143 - with zipfile.ZipFile(arquivozip, 'w') as myzip:  
144 - myzip.write(f.name)  
145 - f.close()  
146 - os.remove('coleta.json')  
147 - filepath = os.path.abspath(arquivozip)  
148 - return filepath  
149 -'''