Skip to content

Commit 80694ed

Browse files
authored
Merge branch 'master' into dependabot/pip/urllib3-1.26.18
2 parents e5e16cb + 9736f64 commit 80694ed

File tree

6 files changed

+40
-15
lines changed

6 files changed

+40
-15
lines changed

.github/workflows/docker.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Docker
33
# This will run when:
44
# - a new release is created, to make sure the right tags of the
55
# docker images are pushed (expects tags to be v1.8.4).
6-
# - when new code is pushed to main/develop to push the tags
6+
# - when new code is pushed to master/develop to push the tags
77
# latest and develop
88
# - when a pull request is created and updated to make sure the
99
# Dockerfile is still valid.
@@ -18,7 +18,7 @@ on:
1818

1919
pull_request:
2020

21-
# Certain actions will only run when this is the main repo.
21+
# Certain actions will only run when this is the master repo.
2222
env:
2323
MAIN_REPO: clowder-framework/pyclowder
2424
DOCKERHUB_ORG: clowder
@@ -37,7 +37,7 @@ jobs:
3737
include:
3838
- name: wordcount
3939
FOLDER: sample-extractors/wordcount
40-
PLATFORM: "linux/amd64,linux/arm64"
40+
PLATFORM: "linux/amd64"
4141
steps:
4242
- uses: actions/checkout@v2
4343

@@ -56,7 +56,7 @@ jobs:
5656
# should we push to dockerhub, and is there a README
5757
DOCKERHUB_PUSH="false"
5858
DOCKERHUB_README="false"
59-
if [ "$BRANCH" == "main" -a "${{ github.repository }}" == "${{ env.MAIN_REPO }}" ]; then
59+
if [ "$BRANCH" == "master" -a "${{ github.repository }}" == "${{ env.MAIN_REPO }}" ]; then
6060
if [ "${{ secrets.DOCKERHUB_USERNAME }}" != "" -a "${{ secrets.DOCKERHUB_PASSWORD }}" != "" ]; then
6161
DOCKERHUB_PUSH="true"
6262
if [ -e "${{ matrix.FOLDER }}/README.md" ]; then
@@ -66,7 +66,7 @@ jobs:
6666
fi
6767
6868
# calculate the version and all tags
69-
if [ "$BRANCH" == "main" ]; then
69+
if [ "$BRANCH" == "master" ]; then
7070
VERSION="$(awk '/"version":/ { print $2 }' ${{ matrix.FOLDER }}/extractor_info.json | sed 's/^.*"\([0-9\.]*\)".*$/\1/')"
7171
tags="latest"
7272
oldversion=""

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/api/v1/datasets.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def download_metadata(connector, client, datasetid, extractor=None):
124124
extractor -- extractor name to filter results (if only one extractor's metadata is desired)
125125
"""
126126
filterstring = "" if extractor is None else "&extractor=%s" % extractor
127-
url = posixpath.join(client.host, 'api/datasets/%s/metadata?key=%s' % (datasetid, client.key + filterstring))
127+
url = posixpath.join(client.host, 'api/datasets/%s/metadata.jsonld?key=%s' % (datasetid, client.key + filterstring))
128128

129129
# fetch data
130130
result = requests.get(url, stream=True,
@@ -175,7 +175,7 @@ def remove_metadata(connector, client, datasetid, extractor=None):
175175
!!! ALL JSON-LD METADATA WILL BE REMOVED IF NO extractor PROVIDED !!!
176176
"""
177177
filterstring = "" if extractor is None else "&extractor=%s" % extractor
178-
url = posixpath.join(client.host, 'api/datasets/%s/metadata?key=%s' % (datasetid, client.key))
178+
url = posixpath.join(client.host, 'api/datasets/%s/metadata.jsonld?key=%s' % (datasetid, client.key))
179179

180180
# fetch data
181181
result = requests.delete(url, stream=True, verify=connector.ssl_verify if connector else True)
@@ -255,7 +255,7 @@ def upload_metadata(connector, client, datasetid, metadata):
255255
headers = {'Content-Type': 'application/json'}
256256
connector.message_process({"type": "dataset", "id": datasetid}, "Uploading dataset metadata.")
257257

258-
url = posixpath.join(client.host, 'api/datasets/%s/metadata?key=%s' % (datasetid, client.key))
258+
url = posixpath.join(client.host, 'api/datasets/%s/metadata.jsonld?key=%s' % (datasetid, client.key))
259259
result = requests.post(url, headers=headers, data=json.dumps(metadata),
260260
verify=connector.ssl_verify if connector else True)
261261
result.raise_for_status()

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
pyclowder==3.0.2
1+
pyclowder==3.0.7

0 commit comments

Comments
 (0)