Skip to content

Commit 8c97747

Browse files
committed
cleanup
- bumped some requirements (solves github complaining about security issues) - fixes to be python 3.x compatible - fix some functions not using key to post - general cleanup
1 parent 87a6605 commit 8c97747

File tree

16 files changed

+77
-69
lines changed

16 files changed

+77
-69
lines changed

contrib/monitor/monitor.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
rabbitmq_uri = os.getenv('RABBITMQ_URI', 'amqp://guest:guest@localhost/%2F')
1616
rabbitmq_mgmt_port = os.getenv('RABBITMQ_MGMT_PORT', '15672')
1717
rabbitmq_mgmt_url = ''
18+
rabbitmq_username = None
19+
rabbitmq_password = None
1820

1921
extractors = {}
2022

@@ -32,7 +34,7 @@ def do_GET(self):
3234
self.send_response(200)
3335
self.send_header('Content-type', 'application/json')
3436
self.end_headers()
35-
self.wfile.write(bytes(json.dumps(extractors), 'utf-8'))
37+
self.wfile.write(json.dumps(extractors).encode())
3638

3739

3840
def http_server():
@@ -52,7 +54,7 @@ def get_mgmt_queue_messages(queue):
5254
response = requests.get(rabbitmq_mgmt_url + queue, auth=(rabbitmq_username, rabbitmq_password), timeout=5)
5355
response.raise_for_status()
5456
return response.json()['messages']
55-
except:
57+
except Exception:
5658
logging.exception("Error getting list of messages in %s" % queue)
5759
return 0
5860

@@ -121,9 +123,8 @@ def extractors_monitor():
121123
connection = pika.BlockingConnection(params)
122124

123125
# create management url
124-
rabbitmq_url = ''
125126
if rabbitmq_mgmt_port != '':
126-
if params.ssl:
127+
if params.ssl_options:
127128
rabbitmq_mgmt_url = 'https://'
128129
else:
129130
rabbitmq_mgmt_url = 'http://'

pyclowder/client.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,10 @@ def get(self, path, params=None, headers=None):
9999
except requests.HTTPError as e:
100100
attempt += 1
101101
if attempt > self.retries:
102-
self.logger.exception("Error calling GET url %s: %s" % (url, e.message))
102+
self.logger.exception("Error calling GET url %s: %s" % (url, str(e)))
103103
raise e
104104
else:
105-
self.logger.debug("Error calling GET url %s: %s" % (url, e.message))
105+
self.logger.debug("Error calling GET url %s: %s" % (url, str(e)))
106106

107107
def post(self, path, content, params=None, headers=None):
108108
"""
@@ -138,10 +138,10 @@ def post(self, path, content, params=None, headers=None):
138138
except requests.HTTPError as e:
139139
attempt += 1
140140
if attempt > self.retries:
141-
self.logger.exception("Error calling POST url %s: %s" % (url, e.message))
141+
self.logger.exception("Error calling POST url %s: %s" % (url, str(e)))
142142
raise e
143143
else:
144-
self.logger.debug("Error calling POST url %s: %s" % (url, e.message))
144+
self.logger.debug("Error calling POST url %s: %s" % (url, str(e)))
145145

146146
def delete(self, path, params=None, headers=None):
147147
"""
@@ -175,10 +175,10 @@ def delete(self, path, params=None, headers=None):
175175
except requests.HTTPError as e:
176176
attempt += 1
177177
if attempt > self.retries:
178-
self.logger.exception("Error calling DELETE url %s: %s" % (url, e.message))
178+
self.logger.exception("Error calling DELETE url %s: %s" % (url, str(e)))
179179
raise e
180180
else:
181-
self.logger.debug("Error calling DELETE url %s: %s" % (url, e.message))
181+
self.logger.debug("Error calling DELETE url %s: %s" % (url, str(e)))
182182

183183
def get_file(self, path, filename=None, params=None, headers=None):
184184
"""
@@ -262,7 +262,7 @@ def post_file(self, path, filename, params=None, headers=None):
262262
except requests.HTTPError as e:
263263
attempt += 1
264264
if attempt > self.retries:
265-
self.logger.exception("Error calling POST url %s: %s" % (url, e.message))
265+
self.logger.exception("Error calling POST url %s: %s" % (url, str(e)))
266266
raise e
267267
else:
268-
self.logger.debug("Error calling POST url %s: %s" % (url, e.message))
268+
self.logger.debug("Error calling POST url %s: %s" % (url, str(e)))

pyclowder/collections.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def create_empty(connector, host, key, collectionname, description, parentid=Non
6060

6161

6262
def delete(connector, host, key, collectionid):
63-
url = "%sapi/collections/%s" % (host, collectionid)
63+
url = "%sapi/collections/%s?key=%s" % (host, collectionid, key)
6464

6565
result = requests.delete(url, verify=connector.ssl_verify if connector else True)
6666
result.raise_for_status()

pyclowder/connectors.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ def _build_resource(self, body, host, secret_key):
254254
"metadata": body['metadata']
255255
}
256256

257-
def _check_for_local_file(self, host, secret_key, file_metadata):
257+
def _check_for_local_file(self, file_metadata):
258258
""" Try to get pointer to locally accessible copy of file for extractor."""
259259

260260
# first check if file is accessible locally
@@ -285,7 +285,7 @@ def _download_file_metadata(self, host, secret_key, fileid, filepath):
285285
md_dir = tempfile.mkdtemp(suffix=fileid)
286286
(fd, md_file) = tempfile.mkstemp(suffix=md_name, dir=md_dir)
287287

288-
with os.fdopen(fd, "w") as tmp_file:
288+
with os.fdopen(fd, "wb") as tmp_file:
289289
tmp_file.write(json.dumps(file_md))
290290

291291
return (md_dir, md_file)
@@ -303,13 +303,13 @@ def _prepare_dataset(self, host, secret_key, resource):
303303
# first check if any files in dataset accessible locally
304304
ds_file_list = pyclowder.datasets.get_file_list(self, host, secret_key, resource["id"])
305305
for ds_file in ds_file_list:
306-
file_path = self._check_for_local_file(host, secret_key, ds_file)
306+
file_path = self._check_for_local_file(ds_file)
307307
if not file_path:
308308
missing_files.append(ds_file)
309309
else:
310310
# Create a link to the original file if the "true" name of the file doesn't match what's on disk
311311
if not file_path.lower().endswith(ds_file['filename'].lower()):
312-
ln_name = io.path.join(temp_link_dir, ds_file['filename'])
312+
ln_name = os.path.join(temp_link_dir, ds_file['filename'])
313313
os.symlink(file_path, ln_name)
314314
tmp_files_created.append(ln_name)
315315
file_path = ln_name
@@ -342,7 +342,7 @@ def _prepare_dataset(self, host, secret_key, resource):
342342
md_name = "%s_dataset_metadata.json" % resource["id"]
343343
md_dir = tempfile.mkdtemp(suffix=resource["id"])
344344
(fd, md_file) = tempfile.mkstemp(suffix=md_name, dir=md_dir)
345-
with os.fdopen(fd, "w") as tmp_file:
345+
with os.fdopen(fd, "wb") as tmp_file:
346346
tmp_file.write(json.dumps(ds_md))
347347
located_files.append(md_file)
348348
tmp_files_created.append(md_file)
@@ -409,7 +409,7 @@ def _process_message(self, body):
409409
try:
410410
if check_result != pyclowder.utils.CheckMessage.bypass:
411411
file_metadata = pyclowder.files.download_info(self, host, secret_key, resource["id"])
412-
file_path = self._check_for_local_file(host, secret_key, file_metadata)
412+
file_path = self._check_for_local_file(file_metadata)
413413
if not file_path:
414414
file_path = pyclowder.files.download(self, host, secret_key, resource["id"],
415415
resource["intermediate_id"],
@@ -460,7 +460,7 @@ def _process_message(self, body):
460460
self.message_ok(resource)
461461

462462
except SystemExit as exc:
463-
status = "sys.exit : " + exc.message
463+
status = "sys.exit : " + str(exc)
464464
logger.exception("[%s] %s", resource['id'], status)
465465
self.status_update(pyclowder.utils.StatusMessage.error, resource, status)
466466
self.message_resubmit(resource, retry_count)
@@ -483,7 +483,7 @@ def _process_message(self, body):
483483
self.status_update(pyclowder.utils.StatusMessage.error, resource, status)
484484
self.message_error(resource)
485485
except Exception as exc: # pylint: disable=broad-except
486-
status = "Error processing : " + exc.message
486+
status = "Error processing : " + str(exc)
487487
logger.exception("[%s] %s", resource['id'], status)
488488
self.status_update(pyclowder.utils.StatusMessage.error, resource, status)
489489
if retry_count < 10:
@@ -635,6 +635,7 @@ def __init__(self, extractor_name, extractor_info,
635635
self.connection = None
636636
self.consumer_tag = None
637637
self.worker = None
638+
self.announcer = None
638639

639640
def connect(self):
640641
"""connect to rabbitmq using URL parameters"""
@@ -688,13 +689,15 @@ def listen(self):
688689
self.connect()
689690

690691
# create listener
691-
self.consumer_tag = self.channel.basic_consume(self.on_message, queue=self.rabbitmq_queue, no_ack=False)
692+
self.consumer_tag = self.channel.basic_consume(queue=self.rabbitmq_queue,
693+
on_message_callback=self.on_message,
694+
auto_ack=False)
692695

693696
# start listening
694697
logging.getLogger(__name__).info("Starting to listen for messages.")
695698
try:
696699
# pylint: disable=protected-access
697-
while self.channel and self.channel._consumer_infos:
700+
while self.channel and self.channel.is_open and self.channel._consumer_infos:
698701
self.channel.connection.process_data_events(time_limit=1) # 1 second
699702
if self.worker:
700703
self.worker.process_messages(self.channel, self.rabbitmq_queue)
@@ -710,20 +713,18 @@ def listen(self):
710713
logging.getLogger(__name__).exception("Error while consuming messages.")
711714
finally:
712715
logging.getLogger(__name__).info("Stopped listening for messages.")
713-
if self.channel:
716+
if self.channel and self.channel.is_open:
714717
try:
715718
self.channel.close()
716719
except Exception:
717720
logging.getLogger(__name__).exception("Error while closing channel.")
718-
finally:
719-
self.channel = None
720-
if self.connection:
721+
self.channel = None
722+
if self.connection and self.connection.is_open:
721723
try:
722724
self.connection.close()
723725
except Exception:
724726
logging.getLogger(__name__).exception("Error while closing connection.")
725-
finally:
726-
self.connection = None
727+
self.connection = None
727728

728729
def stop(self):
729730
"""Tell the connector to stop listening for messages."""
@@ -734,7 +735,9 @@ def alive(self):
734735
return self.connection is not None
735736

736737
@staticmethod
737-
def _decode_body(body, codecs=['utf8', 'iso-8859-1']):
738+
def _decode_body(body, codecs=None):
739+
if not codecs:
740+
codecs = ['utf8', 'iso-8859-1']
738741
# see https://stackoverflow.com/a/15918519
739742
for i in codecs:
740743
try:
@@ -778,6 +781,9 @@ def __init__(self, rabbitmq_uri, extractor_info, rabbitmq_queue, heartbeat):
778781
self.rabbitmq_queue = rabbitmq_queue
779782
self.heartbeat = heartbeat
780783
self.id = str(uuid.uuid4())
784+
self.connection = None
785+
self.channel = None
786+
self.thread = None
781787

782788
def start_thread(self):
783789
parameters = pika.URLParameters(self.rabbitmq_uri)

pyclowder/datasets.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def delete(connector, host, key, datasetid):
7171
key -- the secret key to login to clowder
7272
datasetid -- the dataset to delete
7373
"""
74-
url = "%sapi/datasets/%s" % (host, datasetid)
74+
url = "%sapi/datasets/%s?key=%s" % (host, datasetid, key)
7575

7676
result = requests.delete(url, verify=connector.ssl_verify if connector else True)
7777
result.raise_for_status()
@@ -122,7 +122,7 @@ def download(connector, host, key, datasetid):
122122
result.raise_for_status()
123123

124124
(filedescriptor, zipfile) = tempfile.mkstemp(suffix=".zip")
125-
with os.fdopen(filedescriptor, "w") as outfile:
125+
with os.fdopen(filedescriptor, "wb") as outfile:
126126
for chunk in result.iter_content(chunk_size=10 * 1024):
127127
outfile.write(chunk)
128128

@@ -303,7 +303,7 @@ def datasets_get(self):
303303
try:
304304
return self.client.get("/datasets")
305305
except Exception as e:
306-
logging.error("Error retrieving dataset list: %s", e.message)
306+
logging.error("Error retrieving dataset list: %s", str(e))
307307

308308
def dataset_get(self, dataset_id):
309309
"""
@@ -316,7 +316,7 @@ def dataset_get(self, dataset_id):
316316
try:
317317
return self.client.get("/datasets/%s" % dataset_id)
318318
except Exception as e:
319-
logging.error("Error retrieving dataset %s: %s" % (dataset_id, e.message))
319+
logging.error("Error retrieving dataset %s: %s" % (dataset_id, str(e)))
320320

321321
def create_empty(self, dataset_id):
322322
"""
@@ -329,7 +329,7 @@ def create_empty(self, dataset_id):
329329
try:
330330
return self.client.post("/datasets/createempty", dataset_id)
331331
except Exception as e:
332-
logging.error("Error adding datapoint %s: %s" % (dataset_id, e.message))
332+
logging.error("Error adding datapoint %s: %s" % (dataset_id, str(e)))
333333

334334
def dataset_delete(self, dataset_id):
335335
"""
@@ -342,7 +342,7 @@ def dataset_delete(self, dataset_id):
342342
try:
343343
return self.client.delete("/datasets/%s" % dataset_id)
344344
except Exception as e:
345-
logging.error("Error retrieving dataset %s: %s" % (dataset_id, e.message))
345+
logging.error("Error retrieving dataset %s: %s" % (dataset_id, str(e)))
346346

347347
def upload_file(self, dataset_id, file):
348348
"""
@@ -355,7 +355,7 @@ def upload_file(self, dataset_id, file):
355355
try:
356356
return self.client.post_file("/uploadToDataset/%s" % dataset_id, file)
357357
except Exception as e:
358-
logging.error("Error upload to dataset %s: %s" % (dataset_id, e.message))
358+
logging.error("Error upload to dataset %s: %s" % (dataset_id, str(e)))
359359

360360
def add_metadata(self, dataset_id, metadata):
361361
"""
@@ -368,5 +368,5 @@ def add_metadata(self, dataset_id, metadata):
368368
logging.debug("Update metadata of dataset %s" % dataset_id)
369369
try:
370370
return self.client.post("/datasets/%s/metadata" % dataset_id, metadata)
371-
except Exception:
372-
logging.error("Error upload to dataset %s: %s" % (dataset_id, e.message))
371+
except Exception as e:
372+
logging.error("Error upload to dataset %s: %s" % (dataset_id, str(e)))

pyclowder/extractors.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ def start(self):
205205
except BaseException:
206206
logger.exception("Error while consuming messages.")
207207

208-
while connectors:
209-
connectors.pop(0).stop()
208+
for c in connectors:
209+
c.stop()
210210

211211
def get_metadata(self, content, resource_type, resource_id, server=None):
212212
"""Generate a metadata field.
@@ -297,9 +297,9 @@ class SimpleExtractor(Extractor):
297297
"""
298298

299299
def __init__(self):
300-
'''
300+
"""
301301
Initialize the extractor and setup the logger.
302-
'''
302+
"""
303303
Extractor.__init__(self)
304304
self.setup()
305305

pyclowder/files.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ def download(connector, host, key, fileid, intermediatefileid=None, ext=""):
4848

4949
(inputfile, inputfilename) = tempfile.mkstemp(suffix=ext)
5050
try:
51-
with os.fdopen(inputfile, "w") as outputfile:
51+
with os.fdopen(inputfile, "wb") as outputfile:
5252
for chunk in result.iter_content(chunk_size=10*1024):
5353
outputfile.write(chunk)
5454
return inputfilename
55-
except:
55+
except Exception:
5656
os.remove(inputfilename)
5757
raise
5858

@@ -188,7 +188,7 @@ def upload_metadata(connector, host, key, fileid, metadata):
188188

189189

190190
# pylint: disable=too-many-arguments
191-
def upload_preview(connector, host, key, fileid, previewfile, previewmetadata, preview_mimetype=None):
191+
def upload_preview(connector, host, key, fileid, previewfile, previewmetadata=None, preview_mimetype=None):
192192
"""Upload preview to Clowder.
193193
194194
Keyword arguments:

0 commit comments

Comments
 (0)