Skip to content

Commit 6b9c5ec

Browse files
committed
[Fixes #14306] Refact create_tile_layers as a subcommand of gwc - refact
1 parent 2b73f32 commit 6b9c5ec

1 file changed

Lines changed: 21 additions & 131 deletions

File tree

geonode/br/management/commands/create_tile_layers.py

Lines changed: 21 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -19,155 +19,45 @@
1919
#########################################################################
2020

2121
import logging
22-
import requests
23-
from requests.auth import HTTPBasicAuth
24-
2522
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
2924

25+
from geonode.geoserver.management.commands.gwc_subcommands.create import CreateTileLayers as gwc_create
3026

3127
logger = logging.getLogger(__name__)
3228

3329

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")
7731
class Command(BaseCommand):
78-
help = "Create missing TileLayers in GWC"
32+
help = "DEPRECATED COMMAND - USE gwc COMMAND INSTEAD - Create missing TileLayers in GWC"
7933

8034
def add_arguments(self, parser):
8135
parser.add_argument(
82-
'-f',
83-
'--force',
36+
"-f",
37+
"--force",
8438
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+
)
8742

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 ")
9444

9545
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+
)
10148

10249
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")
10655

10756
logger.debug(f"FORCE is {force}")
10857
logger.debug(f"DRY-RUN is {dry_run}")
10958
logger.debug(f"LAYERS is {requested_layers}")
11059

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

Comments
 (0)