-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathos_update_revisiondate.py
107 lines (83 loc) · 3.19 KB
/
os_update_revisiondate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import click
from requests.auth import HTTPBasicAuth
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import json
import xml.etree.ElementTree
import logging
import os
from logging.handlers import RotatingFileHandler
logger = logging.getLogger(__name__)
loglocation = os.path.dirname(os.path.realpath(__file__))
loggingHandler = RotatingFileHandler(loglocation + "/os-update-revisiondate.log",maxBytes=102400, backupCount=5)
loggingHandler.setLevel(logging.DEBUG)
logger.setLevel(logging.DEBUG)
loggingHandler.setFormatter(
logging.Formatter("%(asctime)s - "
"%(levelname)s - %(message)s"))
logger.addHandler(loggingHandler)
#logging.basicConfig(filename='example.log',level=logging.ERROR)
logger.info('Starting update')
@click.group()
@click.option('--url', required=True, help='Geonetwork URL as far as the node name')
@click.option('--username', required=True, help='Geonetwork username')
@click.option('--password', required=True, help='Geonetwork password')
@click.pass_context
def cli(ctx,url,username,password):
"""Modules for updating metadata see readme for further details"""
# disabling https warnings while testing
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
geonetwork_session = requests.Session()
geonetwork_session.auth = HTTPBasicAuth(username, password)
geonetwork_session.headers.update({"Accept" : "application/json"})
# Make a call to an endpoint to get cookies and an xsrf token
geonetwork_url = url + '/eng/info?type=me'
r_post = geonetwork_session.post(geonetwork_url,
verify=False
)
token = geonetwork_session.cookies.get('XSRF-TOKEN')
geonetwork_session.headers.update({"X-XSRF-TOKEN" : geonetwork_session.cookies.get('XSRF-TOKEN')})
# add session and credentials as context objects so they can be used elsewhere
ctx.obj = {
'session': geonetwork_session,
'username': username,
'password': password,
'url': url
}
@cli.command()
@click.pass_context
def osrevisionupdate(ctx):
"""Update OS metadata with revisiondate from their atom feed. Requires Ordnance Survey metadata to be in category 'Ordnance Survey'"""
# disabling https warnings while testing
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
session = ctx.obj['session']
url = ctx.obj['url']
session.auth = HTTPBasicAuth(ctx.obj['username'],ctx.obj['password'])
headers = session.headers
cookies = session.cookies
uuidlist = []
# create a selection bucket containing the records owned by the OS group
geonetworkSearchURL = url + '/eng/q?_cat=Ordnance+Survey'
searchURL = session.put(geonetworkSearchURL,
headers=headers,
verify=False
)
#click.echo(geonetworkSearchURL)
# add search results to a bucket called metadata
geonetworkSelectURL = url + '/api/0.1/selections/metadata'
selectURL = session.put(geonetworkSelectURL,
headers=headers,
verify=False
)
#click.echo(json.loads(selectURL.text))
geonetworkProcessURL = url + '/api/0.1/processes/os-update-revisiondate'
processURL = session.post(geonetworkProcessURL,
headers=headers,
#params=params,
verify=False
)
logger.info(json.loads(processURL.text))
if __name__ == '__main__':
cli()