Skip to content

Commit 49942f7

Browse files
authored
Merge branch 'master' into 101-dataset-metadata-jsonld
2 parents 8e855f8 + 701e968 commit 49942f7

File tree

3 files changed

+31
-6
lines changed

3 files changed

+31
-6
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ This will result in only those donwloads to be counted by users, not extractors.
7777

7878
- Ask not to track a download from an extractor.
7979

80+
## Unreleased
81+
82+
### Added
83+
- Add support for `EXTRACTOR_KEY` and `CLOWDER_EMAIL` environment variables to register
84+
an extractor for just one user.
85+
8086
## 2.6.0 - 2022-06-14
8187

8288
This will change how clowder sees the extractors. If you have an extractor, and you specify

pyclowder/connectors.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class Connector(object):
6363
"""
6464

6565
def __init__(self, extractor_name, extractor_info, check_message=None, process_message=None, ssl_verify=True,
66-
mounted_paths=None, clowder_url=None, max_retry=10):
66+
mounted_paths=None, clowder_url=None, max_retry=10, extractor_key=None, clowder_email=None):
6767
self.extractor_name = extractor_name
6868
self.extractor_info = extractor_info
6969
self.check_message = check_message
@@ -74,6 +74,10 @@ def __init__(self, extractor_name, extractor_info, check_message=None, process_m
7474
else:
7575
self.mounted_paths = mounted_paths
7676
self.clowder_url = clowder_url
77+
self.clowder_email = clowder_email
78+
self.extractor_key = extractor_key
79+
if extractor_key:
80+
self.extractor_info["unique_key"] = extractor_key
7781
self.max_retry = max_retry
7882

7983
filename = 'notifications.json'
@@ -625,15 +629,18 @@ class RabbitMQConnector(Connector):
625629
def __init__(self, extractor_name, extractor_info,
626630
rabbitmq_uri, rabbitmq_key=None, rabbitmq_queue=None,
627631
check_message=None, process_message=None, ssl_verify=True, mounted_paths=None,
628-
heartbeat=5*60, clowder_url=None, max_retry=10):
632+
heartbeat=10, clowder_url=None, max_retry=10, extractor_key=None, clowder_email=None):
629633
super(RabbitMQConnector, self).__init__(extractor_name, extractor_info, check_message, process_message,
630-
ssl_verify, mounted_paths, clowder_url, max_retry)
634+
ssl_verify, mounted_paths, clowder_url, max_retry, extractor_key, clowder_email)
631635
self.rabbitmq_uri = rabbitmq_uri
632636
self.rabbitmq_key = rabbitmq_key
633637
if rabbitmq_queue is None:
634638
self.rabbitmq_queue = extractor_info['name']
635639
else:
636640
self.rabbitmq_queue = rabbitmq_queue
641+
self.extractor_key = extractor_key
642+
if extractor_key:
643+
self.rabbitmq_queue = "private.%s.%s" % (extractor_key, self.rabbitmq_queue)
637644
self.channel = None
638645
self.connection = None
639646
self.consumer_tag = None
@@ -659,7 +666,7 @@ def connect(self):
659666
self.channel.queue_declare(queue='error.'+self.rabbitmq_queue, durable=True)
660667

661668
# start the extractor announcer
662-
self.announcer = RabbitMQBroadcast(self.rabbitmq_uri, self.extractor_info, self.rabbitmq_queue, self.heartbeat)
669+
self.announcer = RabbitMQBroadcast(self.rabbitmq_uri, self.extractor_info, self.clowder_email, self.rabbitmq_queue, self.heartbeat)
663670
self.announcer.start_thread()
664671

665672
def listen(self):
@@ -765,10 +772,11 @@ def on_message(self, channel, method, header, body):
765772

766773

767774
class RabbitMQBroadcast:
768-
def __init__(self, rabbitmq_uri, extractor_info, rabbitmq_queue, heartbeat):
775+
def __init__(self, rabbitmq_uri, extractor_info, clowder_email, rabbitmq_queue, heartbeat):
769776
self.active = True
770777
self.rabbitmq_uri = rabbitmq_uri
771778
self.extractor_info = extractor_info
779+
self.clowder_email = clowder_email
772780
self.rabbitmq_queue = rabbitmq_queue
773781
self.heartbeat = heartbeat
774782
self.id = str(uuid.uuid4())
@@ -798,6 +806,7 @@ def send_heartbeat(self):
798806
message = {
799807
'id': self.id,
800808
'queue': self.rabbitmq_queue,
809+
'owner': self.clowder_email,
801810
'extractor_info': self.extractor_info
802811
}
803812
next_heartbeat = time.time()

pyclowder/extractors.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ def __init__(self):
6868
rabbitmq_uri = os.getenv('RABBITMQ_URI', "amqp://guest:[email protected]/%2f")
6969
clowder_url = os.getenv("CLOWDER_URL", "")
7070
registration_endpoints = os.getenv('REGISTRATION_ENDPOINTS', "")
71+
extractor_key = os.getenv("EXTRACTOR_KEY", "")
72+
clowder_email = os.getenv("CLOWDER_EMAIL", "")
7173
logging_config = os.getenv("LOGGING")
7274
mounted_paths = os.getenv("MOUNTED_PATHS", "{}")
7375
input_file_path = os.getenv("INPUT_FILE_PATH")
@@ -90,6 +92,12 @@ def __init__(self):
9092
help='pickle file that needs to be processed (only needed for HPC)')
9193
self.parser.add_argument('--clowderURL', nargs='?', dest='clowder_url', default=clowder_url,
9294
help='Clowder host URL')
95+
self.parser.add_argument('--key', '-k', dest="extractor_key",
96+
default=extractor_key,
97+
help='Unique key to use for extractor queue ID (sets extractor to private)')
98+
self.parser.add_argument('--user', '-u', dest="clowder_email",
99+
default=clowder_email,
100+
help='Email address of Clowder user who will initially be assigned ownership (ignored if no --key provided)')
93101
self.parser.add_argument('--rabbitmqURI', nargs='?', dest='rabbitmq_uri', default=rabbitmq_uri,
94102
help='rabbitMQ URI (default=%s)' % rabbitmq_uri.replace("%", "%%"))
95103
self.parser.add_argument('--rabbitmqQUEUE', nargs='?', dest='rabbitmq_queuename',
@@ -169,7 +177,9 @@ def start(self):
169177
mounted_paths=json.loads(self.args.mounted_paths),
170178
clowder_url=self.args.clowder_url,
171179
max_retry=self.args.max_retry,
172-
heartbeat=self.args.heartbeat)
180+
heartbeat=self.args.heartbeat,
181+
extractor_key=self.args.extractor_key,
182+
clowder_email=self.args.clowder_email)
173183
connector.connect()
174184
threading.Thread(target=connector.listen, name="RabbitMQConnector").start()
175185

0 commit comments

Comments
 (0)