Como muitos de vocês sabem, o GeoServer possui uma interface RESTful para interagir com seus dados. Se você estiver usando o REST via Python, há uma biblioteca padrão, mas não é bem documentada, porém existe uma biblioteca chamada gsconfig, criada pelos desenvolvedores do GeoServer, que simplifica o processo.

O relato abaixo foi descrito por Andrew Dennison do blog GAIA Resources, que utilizou recentemente essa biblioteca para publicar camadas do PostGIS no GeoServer. Vamos aos passos:

1. Instalar o gsconfig

Isso está bem explicado na documentação aqui.

2. Conectar no GeoServer

O primeiro passo depois de ter o gsconfig instalado é fazer uma conexão com sua instância do GeoServer

cat = Catalog('http://localhost:8080/geoserver/rest')

3. Criar um novo espaço de trabalho (workspace)

Agora crie um novo espaço de trabalho se você não tiver um já configurado

ws = cat.create_workspace('newWorkspaceName','http://example.com/testWorkspace')

4. Criar uma nova fonte de dados (Store) a partir do PostGIS

O próximo passo é criar uma nova fonte de dados apontando para um banco de dados PostGIS existente. Uma dica aqui é se a camada que você deseja publicar estiver em um esquema diferente de “público”, certifique-se de fornecer o esquema na conexão. Descobri que, quando não fornecia, o GeoServer não pegava a projeção da minha camada quando eu publicava.

ds = cat.create_datastore('newDatastoreName','newWorkspaceName')
ds.connection_parameters.update(host='localhost', port='5432', database='postgis', user='postgres', passwd='password', dbtype='postgis', schema='postgis')
cat.save(ds)

5. Publicar uma camada

Agora use o espaço de trabalho e a fonte de dados que você acabou de criar para publicar uma camada do PostGIS

ft = cat.publish_featuretype('newLayerName', ds, 'EPSG:4326', srs='EPSG:4326')

O primeiro código epsg é a projeção nativa da camada e o segundo é a projeção publicada. Eles não têm que ser o mesmo, mas neste caso a camada já está na projeção desejada.

6. Criar um novo estilo a partir de um SLD

Se você quiser aplicar um estilo diferente à sua camada publicada, você pode criar um novo estilo a partir de um SLD, caso contrário pule esta etapa e o GeoServer aplicará o estilo padrão.

with open(path_to_sld_file) as f:
   cat.create_style('newStyle', f.read(), overwrite=True)

*overwrite = true (sobrescreverá qualquer SLD existente com o mesmo nome).

7. Aplicar o novo estilo à camada

Aplique o seu estilo recém-criado à sua nova camada.

layer = cat.get_layer('newLayerName')
layer.default_style = newStyle
cat.save(layer)

O gsconfig é uma ótima biblioteca e com um pouco de esforço para descobrir isso, abstrai muito do trabalho envolvido em fazer solicitações REST para o GeoServer.

Fonte: Gaia Resources Blog