-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobjects2csv.py
More file actions
130 lines (68 loc) · 3.05 KB
/
Copy pathobjects2csv.py
File metadata and controls
130 lines (68 loc) · 3.05 KB
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
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
We have list of resources groups in NextGIS Web.
Script generate csv with names and id-s of vector layers.
Имеется NGW. В ней лежат группы ресурсов, в группах - слои.
Имеется набор id-шников групп ресурсов.
Нужно получить csv-файл с называнием векторных слоёв и их id.
'''
#делаем штуки для подключения к ngw
from __future__ import unicode_literals
import os
from owslib.wfs import WebFeatureService
URL = 'http://78.46.100.76/opendata_ngw'
AUTH = ('administrator', 'admin')
groups=(109,128)
import requests
from json import dumps
from datetime import datetime
import pprint
pp = pprint.PrettyPrinter(indent=4)
s = requests.Session()
def req(method, url, json=None, **kwargs):
""" Простейшая обертка над библиотекой requests c выводом отправляемых
запросов в stdout. К работе NextGISWeb это имеет малое отношение. """
jsonuc = None
if json:
kwargs['data'] = dumps(json)
jsonuc = dumps(json, ensure_ascii=False)
req = requests.Request(method, url, auth=AUTH, **kwargs)
preq = req.prepare()
print ""
print ">>> %s %s" % (method, url)
if jsonuc:
print ">>> %s" % jsonuc
resp = s.send(preq)
assert resp.status_code / 100 == 2
jsonresp = resp.json()
for line in dumps(jsonresp, ensure_ascii=False, indent=4).split("\n"):
print "<<< %s" % line
return jsonresp
# Обертки по именам HTTP запросов, по одной на каждый тип запроса
def get(url, **kwargs): return req('GET', url, **kwargs) # NOQA
def post(url, **kwargs): return req('POST', url, **kwargs) # NOQA
def put(url, **kwargs): return req('PUT', url, **kwargs) # NOQA
def delete(url, **kwargs): return req('DELETE', url, **kwargs) # NOQA
# Собственно работа с REST API
iturl = lambda (id): '%s/api/resource/%d' % (URL, id)
childsurl = lambda (id): '%s/resource/%d/child/' % (URL, id)
courl = lambda: '%s/api/resource/' % URL
#Печать шапки csv
fs = open('result.csv','w')
fs.write("name,id\n")
fs.close()
for group_id in groups:
childs=get(childsurl(group_id))
for layerdesc in childs:
#pp.pprint(layerdesc)
if layerdesc['resource']['cls']=='vector_layer':
#модуль csv не работает с файлами открытыми на дозапись, поэтому генерирую строку csv вручную
export_string=''
export_string += '"'+unicode(layerdesc['resource']['display_name'])+'",'
export_string += '"'+str(layerdesc['resource']['id'])+'"'
export_string += "\n"
print export_string
fs = open('result.csv','a')
fs.write(export_string.encode("UTF-8"))
fs.close()