Skip to content

Commit

Permalink
Merge branch 'develop' into feature/workspace
Browse files Browse the repository at this point in the history
  • Loading branch information
krishnaglodha committed Nov 19, 2024
2 parents 0e3a8ac + d3786e7 commit 6aee3e9
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 149 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ A GeoServer REST API client influenced by HTTPX
`geoserverx` allows `Sync`, `Async` as well as `CLI` Capabilities to talk to your GeoServer REST APIs which makes it ideal to be used in software development project which relies on content of GeoServer.

Here is a simplistic view of how geoserverx works under the hood
![architecture](/docs/assets/images/arch.png "architecture")
![architecture](https://raw.githubusercontent.com/geobeyond/geoserverx/refs/heads/main/docs/assets/images/arch.png "architecture")



Expand All @@ -20,4 +20,4 @@ Please open new issue if you want to report any bug or send feature request
### Running on local
`geoserverx` is built with [poetry](https://python-poetry.org/) and it uses following dependencies and dev-dependencies

![layout](/docs/assets/images/layout.png "layout")
![layout]([/docs/assets/images/layout.png](https://raw.githubusercontent.com/geobeyond/geoserverx/refs/heads/main/docs/assets/images/layout.png) "layout")
81 changes: 32 additions & 49 deletions src/geoserverx/_async/gsx.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ async def check_modules(self, name) -> Union[bool, GSResponse]:
# Handle Module not found exception
return GSResponse(code=412, response=str(e))

# Get all workspaces
async def get_all_workspaces(self) -> Union[WorkspacesModel, GSResponse]:
Client = self.http_client
responses = await Client.get("workspaces")
Expand All @@ -134,14 +133,13 @@ async def get_all_workspaces(self) -> Union[WorkspacesModel, GSResponse]:
results = self.response_recognise(responses.status_code)
return results

# Get specific workspaces
async def get_workspace(self, workspace: str) -> Union[WorkspaceModel, GSResponse]:
Client = self.http_client
responses = await Client.get(f"workspaces/{workspace}")
if responses.status_code == 200:
return WorkspaceModel.model_validate(responses.json())
response = await Client.get(f"workspaces/{workspace}")
if response.status_code == 200:
return WorkspaceModel.model_validate(response.json())
else:
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results

async def delete_workspace(
Expand All @@ -152,20 +150,19 @@ async def delete_workspace(
results = self.response_recognise(response.status_code)
return results

# Create workspace
async def create_workspace(
self, name: str, default: bool = False, Isolated: bool = False
) -> GSResponse:
Client = self.http_client
payload: NewWorkspace = NewWorkspace(
workspace=NewWorkspaceInfo(name=name, isolated=Isolated)
)
responses = await Client.post(
response = await Client.post(
f"workspaces?default={default}",
data=payload.model_dump_json(),
headers=self.headers,
)
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results

async def update_workspace(
Expand All @@ -181,7 +178,6 @@ async def update_workspace(
result = self.response_recognise(responses.status_code)
return result

# Get vector stores in specific workspaces
async def get_vector_stores_in_workspaces(self, workspace: str) -> DataStoresModel:
Client = self.http_client
responses = await Client.get(f"workspaces/{workspace}/datastores")
Expand All @@ -191,7 +187,6 @@ async def get_vector_stores_in_workspaces(self, workspace: str) -> DataStoresMod
results = self.response_recognise(responses.status_code)
return results

# Get raster stores in specific workspaces
async def get_raster_stores_in_workspaces(
self, workspace: str
) -> CoveragesStoresModel:
Expand All @@ -203,29 +198,26 @@ async def get_raster_stores_in_workspaces(
results = self.response_recognise(responses.status_code)
return results

# Get vector store information in specific workspaces
async def get_vector_store(self, workspace: str, store: str) -> DataStoreModel:
url = f"workspaces/{workspace}/datastores/{store}.json"
Client = self.http_client
responses = await Client.get(url)
if responses.status_code == 200:
return DataStoreModel.model_validate(responses.json())
response = await Client.get(url)
if response.status_code == 200:
return DataStoreModel.model_validate(response.json())
else:
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results

# Get raster store information in specific workspaces
async def get_raster_store(self, workspace: str, store: str) -> CoveragesStoreModel:
url = f"workspaces/{workspace}/coveragestores/{store}.json"
Client = self.http_client
responses = await Client.get(url)
if responses.status_code == 200:
return CoveragesStoreModel.model_validate(responses.json())
response = await Client.get(url)
if response.status_code == 200:
return CoveragesStoreModel.model_validate(response.json())
else:
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results

# Get all styles in GS
async def get_all_styles(self) -> AllStylesModel:
Client = self.http_client
responses = await Client.get("styles")
Expand All @@ -235,17 +227,15 @@ async def get_all_styles(self) -> AllStylesModel:
results = self.response_recognise(responses.status_code)
return results

# Get specific style in GS
async def get_style(self, style: str) -> StyleModel:
Client = self.http_client
responses = await Client.get(f"styles/{style}.json")
if responses.status_code == 200:
return StyleModel.model_validate(responses.json())
response = await Client.get(f"styles/{style}.json")
if response.status_code == 200:
return StyleModel.model_validate(response.json())
else:
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results

# Add postgres db
async def create_pg_store(
self,
name: str,
Expand All @@ -270,12 +260,12 @@ async def create_pg_store(
)
)
Client = self.http_client
responses = await Client.post(
response = await Client.post(
f"workspaces/{workspace}/datastores/",
data=payload.model_dump_json(),
headers=self.headers,
)
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results

async def create_file_store(self, workspace: str, store: str, file, service_type):
Expand Down Expand Up @@ -315,7 +305,6 @@ async def create_file_store(self, workspace: str, store: str, file, service_type
raise ValueError(f"Service type {service_type} not supported")
await service.addFile(self.http_client, workspace, store)

# Get all layers
async def get_all_layers(
self, workspace: Optional[str] = None
) -> Union[LayersModel, GSResponse]:
Expand All @@ -330,26 +319,23 @@ async def get_all_layers(
results = self.response_recognise(responses.status_code)
return results

# Get specific layer
async def get_layer(
self, workspace: str, layer: str
) -> Union[LayerModel, GSResponse]:
Client = self.http_client
responses = await Client.get(f"layers/{workspace}:{layer}")
if responses.status_code == 200:
return LayerModel.model_validate(responses.json())
response = await Client.get(f"layers/{workspace}:{layer}")
if response.status_code == 200:
return LayerModel.model_validate(response.json())
else:
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results

# Delete specific layer
async def delete_layer(self, workspace: str, layer: str) -> GSResponse:
Client = self.http_client
responses = await Client.delete(f"layers/{workspace}:{layer}")
results = self.response_recognise(responses.status_code)
response = await Client.delete(f"layers/{workspace}:{layer}")
results = self.response_recognise(response.status_code)
return results

# Get all layer groups
async def get_all_layer_groups(
self, workspace: Optional[str] = None
) -> Union[LayerGroupsModel, GSResponse]:
Expand All @@ -364,7 +350,6 @@ async def get_all_layer_groups(
results = self.response_recognise(responses.status_code)
return results

# Get all geofence rules
async def get_all_geofence_rules(self) -> Union[RulesResponse, GSResponse]:
Client = self.http_client
# Check if the geofence plugin exists
Expand All @@ -381,24 +366,22 @@ async def get_all_geofence_rules(self) -> Union[RulesResponse, GSResponse]:
results = self.response_recognise(responses.status_code)
return results

# Get geofence rule by id
async def get_geofence_rule(self, id: int) -> Union[Rule, GSResponse]:
Client = self.http_client
# Check if the geofence plugin exists
module_check = await self.check_modules("geofence")
# If the module check fails, return the GSResponse directly
if isinstance(module_check, GSResponse):
return module_check
responses = await Client.get(
response = await Client.get(
f"geofence/rules/id/{id}", headers={"Accept": "application/json"}
)
if responses.status_code == 200:
return Rule.model_validate(responses.json())
if response.status_code == 200:
return Rule.model_validate(response.json())
else:
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results

# Create geofence on geoserver
async def create_geofence(self, rule: Rule) -> GSResponse:
PostingRule = NewRule(Rule=rule)
# Check if the geofence plugin exists
Expand All @@ -407,10 +390,10 @@ async def create_geofence(self, rule: Rule) -> GSResponse:
if isinstance(module_check, GSResponse):
return module_check
Client = self.http_client
responses = await Client.post(
response = await Client.post(
"geofence/rules",
content=PostingRule.model_dump_json(),
headers=self.headers,
)
results = self.response_recognise(responses.status_code)
results = self.response_recognise(response.status_code)
return results
Loading

0 comments on commit 6aee3e9

Please sign in to comment.