|
19 | 19 | ######################################################################### |
20 | 20 |
|
21 | 21 | import logging |
22 | | -import requests |
23 | | -from requests.auth import HTTPBasicAuth |
24 | | - |
25 | 22 | from django.core.management.base import BaseCommand |
26 | | -from django.conf import settings |
27 | | - |
28 | | -from geonode.layers.models import Dataset |
| 23 | +from typing_extensions import deprecated |
29 | 24 |
|
| 25 | +from geonode.geoserver.management.commands.gwc_subcommands.create import CreateTileLayers as gwc_create |
30 | 26 |
|
31 | 27 | logger = logging.getLogger(__name__) |
32 | 28 |
|
33 | 29 |
|
34 | | -REQ_TEMPLATE = """<?xml version="1.0" encoding="UTF-8"?> |
35 | | -<GeoServerLayer> |
36 | | - <enabled>true</enabled> |
37 | | - <inMemoryCached>true</inMemoryCached> |
38 | | - <name>{}</name> |
39 | | - <metaWidthHeight> |
40 | | - <int>2</int> |
41 | | - <int>1</int> |
42 | | - </metaWidthHeight> |
43 | | - <mimeFormats> |
44 | | - <string>application/json;type=utfgrid</string> |
45 | | - <string>image/gif</string> |
46 | | - <string>image/jpeg</string> |
47 | | - <string>image/png</string> |
48 | | - <string>image/png8</string> |
49 | | - <string>image/vnd.jpeg-png</string> |
50 | | - <string>image/vnd.jpeg-png8</string> |
51 | | - </mimeFormats> |
52 | | - <gridSubsets> |
53 | | - <gridSubset> |
54 | | - <gridSetName>EPSG:3857</gridSetName> |
55 | | - </gridSubset> |
56 | | - <gridSubset> |
57 | | - <gridSetName>EPSG:3857x2</gridSetName> |
58 | | - </gridSubset> |
59 | | - <gridSubset> |
60 | | - <gridSetName>EPSG:4326</gridSetName> |
61 | | - </gridSubset> |
62 | | - <gridSubset> |
63 | | - <gridSetName>EPSG:4326x2</gridSetName> |
64 | | - </gridSubset> |
65 | | - <gridSubset> |
66 | | - <gridSetName>EPSG:900913</gridSetName> |
67 | | - </gridSubset> |
68 | | - </gridSubsets> |
69 | | - <expireCache>0</expireCache> |
70 | | - <expireClients>0</expireClients> |
71 | | - <autoCacheStyles>true</autoCacheStyles> |
72 | | - <gutter>0</gutter> |
73 | | - <cacheWarningSkips/> |
74 | | -</GeoServerLayer>""" |
75 | | - |
76 | | - |
| 30 | +@deprecated("THIS COMMAND IS DEPRECATED - USE THE gwc COMMAND INSTEAD") |
77 | 31 | class Command(BaseCommand): |
78 | | - help = "Create missing TileLayers in GWC" |
| 32 | + help = "DEPRECATED COMMAND - USE gwc COMMAND INSTEAD - Create missing TileLayers in GWC" |
79 | 33 |
|
80 | 34 | def add_arguments(self, parser): |
81 | 35 | parser.add_argument( |
82 | | - '-f', |
83 | | - '--force', |
| 36 | + "-f", |
| 37 | + "--force", |
84 | 38 | dest="force", |
85 | | - action='store_true', |
86 | | - help="Force tile layer re-creation also if it already exists in GWC") |
| 39 | + action="store_true", |
| 40 | + help="Force tile layer re-creation also if it already exists in GWC", |
| 41 | + ) |
87 | 42 |
|
88 | | - parser.add_argument( |
89 | | - '-l', |
90 | | - '--layer', |
91 | | - dest="layers", |
92 | | - action='append', |
93 | | - help="Only process specified layers ") |
| 43 | + parser.add_argument("-l", "--layer", dest="layers", action="append", help="Only process specified layers ") |
94 | 44 |
|
95 | 45 | parser.add_argument( |
96 | | - '-d', |
97 | | - '--dry-run', |
98 | | - dest="dry-run", |
99 | | - action='store_true', |
100 | | - help="Do not actually perform any change on GWC") |
| 46 | + "-d", "--dry-run", dest="dry-run", action="store_true", help="Do not actually perform any change on GWC" |
| 47 | + ) |
101 | 48 |
|
102 | 49 | def handle(self, **options): |
103 | | - force = options.get('force') |
104 | | - requested_layers = options.get('layers') |
105 | | - dry_run = options.get('dry-run') |
| 50 | + logger.error("THIS COMMAND IS DEPRECATED - USE THE gwc COMMAND INSTEAD") |
| 51 | + |
| 52 | + force = options.get("force") |
| 53 | + requested_layers = options.get("layers") or [] |
| 54 | + dry_run = options.get("dry-run") |
106 | 55 |
|
107 | 56 | logger.debug(f"FORCE is {force}") |
108 | 57 | logger.debug(f"DRY-RUN is {dry_run}") |
109 | 58 | logger.debug(f"LAYERS is {requested_layers}") |
110 | 59 |
|
111 | | - try: |
112 | | - baseurl = settings.OGC_SERVER["default"]["LOCATION"] |
113 | | - user = settings.OGC_SERVER["default"]["USER"] |
114 | | - passwd = settings.OGC_SERVER["default"]["PASSWORD"] |
115 | | - """ |
116 | | - curl -v -u admin:geoserver -XGET \ |
117 | | - "http://<host>:<port>/geoserver/gwc/rest/layers/geonode:tasmania_roads.xml" |
118 | | - """ |
119 | | - layers = Dataset.objects.all() |
120 | | - tot = len(layers) |
121 | | - logger.info(f"Total layers in GeoNode: {tot}") |
122 | | - i = 0 |
123 | | - cnt_old = 0 |
124 | | - cnt_new = 0 |
125 | | - cnt_bad = 0 |
126 | | - cnt_skip = 0 |
127 | | - cnt_force = 0 |
128 | | - for layer in layers: |
129 | | - i += 1 |
130 | | - logger.info(f"- {i}/{tot} Processing layer: {layer.typename}") |
131 | | - |
132 | | - if requested_layers and layer.typename not in requested_layers: |
133 | | - logger.info(" - Layer filtered out by args") |
134 | | - cnt_skip += 1 |
135 | | - continue |
136 | | - |
137 | | - r = requests.get(f"{baseurl}gwc/rest/layers/{layer.typename}.xml", auth=HTTPBasicAuth(user, passwd)) |
138 | | - |
139 | | - if r.status_code == 200: |
140 | | - if force: |
141 | | - logger.info(" - Forcing layer configuration in GWC") |
142 | | - cnt_force += 1 |
143 | | - else: |
144 | | - logger.info(" - Layer already configured in GWC") |
145 | | - cnt_old += 1 |
146 | | - continue |
147 | | - try: |
148 | | - data = REQ_TEMPLATE.format(layer.name) |
149 | | - url = f"{baseurl}gwc/rest/layers/{layer.typename}.xml" |
150 | | - logger.info(" - Configuring...") |
151 | | - |
152 | | - if not dry_run: |
153 | | - response = requests.put( |
154 | | - url, data=data, headers={"Content-Type": "text/xml"}, auth=HTTPBasicAuth(user, passwd) |
155 | | - ) |
156 | | - |
157 | | - if dry_run or response.status_code == 200: |
158 | | - logger.info(f" - Done {layer.name}") |
159 | | - cnt_new += 1 |
160 | | - else: |
161 | | - logger.warning(f"Layer {layer.typename} couldn't be configured: code {response.status_code}") |
162 | | - cnt_bad += 1 |
163 | | - |
164 | | - except Exception as e: |
165 | | - raise e |
166 | | - except Exception as e: |
167 | | - raise e |
168 | | - |
169 | | - logger.info("Work completed") |
170 | | - logger.info(f"- TileLayers configured: {cnt_new}" + (f" (forced {cnt_force})" if cnt_force else "")) |
171 | | - logger.info(f"- TileLayers in error : {cnt_bad}") |
172 | | - logger.info(f"- TileLayers untouched : {cnt_old}") |
173 | | - logger.info(f"- TileLayers skipped : {cnt_skip}") |
| 60 | + subcommand = gwc_create() |
| 61 | + subcommand.run( |
| 62 | + force=force, requested_layers=requested_layers, create_all=len(requested_layers) == 0, dry_run=dry_run |
| 63 | + ) |
0 commit comments