Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions crates/djls-django/src/django.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::gis::{check_gis_setup, GISError};
use djls_ipc::v1::*;
use djls_ipc::{ProcessError, PythonProcess, TransportError};
use djls_python::{ImportCheck, Python};
use djls_python::Python;
use std::fmt;

#[derive(Debug)]
Expand All @@ -23,12 +23,6 @@ impl DjangoProject {
pub fn setup(mut python: PythonProcess) -> Result<Self, ProjectError> {
let py = Python::setup(&mut python)?;

let has_django = ImportCheck::check(&mut python, Some(vec!["django".to_string()]))?;

if !has_django {
return Err(ProjectError::DjangoNotFound);
}

if !check_gis_setup(&mut python)? {
eprintln!("Warning: GeoDjango detected but GDAL is not available.");
eprintln!("Django initialization will be skipped. Some features may be limited.");
Expand Down
1 change: 0 additions & 1 deletion crates/djls-python/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
mod packaging;
mod python;

pub use crate::packaging::ImportCheck;
pub use crate::packaging::PackagingError;
pub use crate::python::Python;
pub use crate::python::PythonError;
36 changes: 1 addition & 35 deletions crates/djls-python/src/packaging.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use djls_ipc::v1::*;
use djls_ipc::{ProcessError, PythonProcess, TransportError};
use djls_ipc::{ProcessError, TransportError};
use serde::Deserialize;
use std::collections::HashMap;
use std::fmt;
Expand Down Expand Up @@ -69,40 +69,6 @@ impl fmt::Display for Packages {
}
}

#[derive(Debug, Deserialize)]
pub struct ImportCheck {
can_import: bool,
}

impl ImportCheck {
pub fn can_import(&self) -> bool {
self.can_import
}

pub fn check(
python: &mut PythonProcess,
_modules: Option<Vec<String>>,
) -> Result<bool, PackagingError> {
let request = messages::Request {
command: Some(messages::request::Command::CheckDjangoAvailable(
check::DjangoAvailableRequest {},
)),
};

let response = python
.send(request)
.map_err(|e| PackagingError::Transport(e))?;

match response.result {
Some(messages::response::Result::CheckDjangoAvailable(response)) => Ok(response.passed),
Some(messages::response::Result::Error(e)) => {
Err(PackagingError::Process(ProcessError::Health(e.message)))
}
_ => Err(PackagingError::Process(ProcessError::Response)),
}
}
}

#[derive(Debug, thiserror::Error)]
pub enum PackagingError {
#[error("IO error: {0}")]
Expand Down
6 changes: 0 additions & 6 deletions proto/v1/check.proto
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,6 @@ message HealthResponse {
optional string error = 2;
}

message DjangoAvailableRequest {}
message DjangoAvailableResponse {
bool passed = 1;
optional string error = 2;
}

message AppInstalledRequest {
string app_name = 1;
}
Expand Down
6 changes: 2 additions & 4 deletions proto/v1/messages.proto
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ import "v1/python.proto";
message Request {
oneof command {
check.HealthRequest check__health = 1;
check.DjangoAvailableRequest check__django_available = 2;
check.AppInstalledRequest check__app_installed = 3;
check.AppInstalledRequest check__app_installed = 2;
python.GetEnvironmentRequest python__get_environment = 1000;
django.GetProjectInfoRequest django__get_project_info = 2000;
}
Expand All @@ -19,8 +18,7 @@ message Request {
message Response {
oneof result {
check.HealthResponse check__health = 1;
check.DjangoAvailableResponse check__django_available = 2;
check.AppInstalledResponse check__app_installed = 3;
check.AppInstalledResponse check__app_installed = 2;
python.GetEnvironmentResponse python__get_environment = 1000;
django.GetProjectInfoResponse django__get_project_info = 2000;
Error error = 9000;
Expand Down
14 changes: 0 additions & 14 deletions python/djls/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,20 +91,6 @@ async def check__health(_request: check_pb2.HealthRequest) -> check_pb2.HealthRe
return check_pb2.HealthResponse(passed=True)


@proto_handler(
check_pb2.DjangoAvailableRequest,
error=messages_pb2.Error(
code=messages_pb2.Error.DJANGO_ERROR, message="Django is not installed"
),
)
async def check__django_available(
_request: check_pb2.DjangoAvailableRequest,
) -> check_pb2.DjangoAvailableResponse:
import django # noqa: F401

return check_pb2.DjangoAvailableResponse(passed=True)


@proto_handler(
check_pb2.AppInstalledRequest,
error=messages_pb2.Error(
Expand Down
14 changes: 5 additions & 9 deletions python/djls/proto/v1/check_pb2.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@



DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0ev1/check.proto\x12\rdjls.v1.check\"\x0f\n\rHealthRequest\">\n\x0eHealthResponse\x12\x0e\n\x06passed\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"\x18\n\x16\x44jangoAvailableRequest\"G\n\x17\x44jangoAvailableResponse\x12\x0e\n\x06passed\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"\'\n\x13\x41ppInstalledRequest\x12\x10\n\x08\x61pp_name\x18\x01 \x01(\t\"D\n\x14\x41ppInstalledResponse\x12\x0e\n\x06passed\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_errorb\x06proto3')
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0ev1/check.proto\x12\rdjls.v1.check\"\x0f\n\rHealthRequest\">\n\x0eHealthResponse\x12\x0e\n\x06passed\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"\'\n\x13\x41ppInstalledRequest\x12\x10\n\x08\x61pp_name\x18\x01 \x01(\t\"D\n\x14\x41ppInstalledResponse\x12\x0e\n\x06passed\x18\x01 \x01(\x08\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_errorb\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
Expand All @@ -39,12 +39,8 @@
_globals['_HEALTHREQUEST']._serialized_end=48
_globals['_HEALTHRESPONSE']._serialized_start=50
_globals['_HEALTHRESPONSE']._serialized_end=112
_globals['_DJANGOAVAILABLEREQUEST']._serialized_start=114
_globals['_DJANGOAVAILABLEREQUEST']._serialized_end=138
_globals['_DJANGOAVAILABLERESPONSE']._serialized_start=140
_globals['_DJANGOAVAILABLERESPONSE']._serialized_end=211
_globals['_APPINSTALLEDREQUEST']._serialized_start=213
_globals['_APPINSTALLEDREQUEST']._serialized_end=252
_globals['_APPINSTALLEDRESPONSE']._serialized_start=254
_globals['_APPINSTALLEDRESPONSE']._serialized_end=322
_globals['_APPINSTALLEDREQUEST']._serialized_start=114
_globals['_APPINSTALLEDREQUEST']._serialized_end=153
_globals['_APPINSTALLEDRESPONSE']._serialized_start=155
_globals['_APPINSTALLEDRESPONSE']._serialized_end=223
# @@protoc_insertion_point(module_scope)
12 changes: 0 additions & 12 deletions python/djls/proto/v1/check_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,6 @@ class HealthResponse(_message.Message):
error: str
def __init__(self, passed: bool = ..., error: _Optional[str] = ...) -> None: ...

class DjangoAvailableRequest(_message.Message):
__slots__ = ()
def __init__(self) -> None: ...

class DjangoAvailableResponse(_message.Message):
__slots__ = ("passed", "error")
PASSED_FIELD_NUMBER: _ClassVar[int]
ERROR_FIELD_NUMBER: _ClassVar[int]
passed: bool
error: str
def __init__(self, passed: bool = ..., error: _Optional[str] = ...) -> None: ...

class AppInstalledRequest(_message.Message):
__slots__ = ("app_name",)
APP_NAME_FIELD_NUMBER: _ClassVar[int]
Expand Down
16 changes: 8 additions & 8 deletions python/djls/proto/v1/messages_pb2.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,19 @@
from . import python_pb2 as v1_dot_python__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11v1/messages.proto\x12\x10\x64jls.v1.messages\x1a\x0ev1/check.proto\x1a\x0fv1/django.proto\x1a\x0fv1/python.proto\"\xf0\x02\n\x07Request\x12\x35\n\rcheck__health\x18\x01 \x01(\x0b\x32\x1c.djls.v1.check.HealthRequestH\x00\x12H\n\x17\x63heck__django_available\x18\x02 \x01(\x0b\x32%.djls.v1.check.DjangoAvailableRequestH\x00\x12\x42\n\x14\x63heck__app_installed\x18\x03 \x01(\x0b\x32\".djls.v1.check.AppInstalledRequestH\x00\x12I\n\x17python__get_environment\x18\xe8\x07 \x01(\x0b\x32%.djls.v1.python.GetEnvironmentRequestH\x00\x12J\n\x18\x64jango__get_project_info\x18\xd0\x0f \x01(\x0b\x32%.djls.v1.django.GetProjectInfoRequestH\x00\x42\t\n\x07\x63ommand\"\xa0\x03\n\x08Response\x12\x36\n\rcheck__health\x18\x01 \x01(\x0b\x32\x1d.djls.v1.check.HealthResponseH\x00\x12I\n\x17\x63heck__django_available\x18\x02 \x01(\x0b\x32&.djls.v1.check.DjangoAvailableResponseH\x00\x12\x43\n\x14\x63heck__app_installed\x18\x03 \x01(\x0b\x32#.djls.v1.check.AppInstalledResponseH\x00\x12J\n\x17python__get_environment\x18\xe8\x07 \x01(\x0b\x32&.djls.v1.python.GetEnvironmentResponseH\x00\x12K\n\x18\x64jango__get_project_info\x18\xd0\x0f \x01(\x0b\x32&.djls.v1.django.GetProjectInfoResponseH\x00\x12)\n\x05\x65rror\x18\xa8\x46 \x01(\x0b\x32\x17.djls.v1.messages.ErrorH\x00\x42\x08\n\x06result\"\xa5\x01\n\x05\x45rror\x12*\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1c.djls.v1.messages.Error.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x11\n\ttraceback\x18\x03 \x01(\t\"L\n\x04\x43ode\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x13\n\x0fINVALID_REQUEST\x10\x01\x12\x10\n\x0cPYTHON_ERROR\x10\x02\x12\x10\n\x0c\x44JANGO_ERROR\x10\x03\x62\x06proto3')
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11v1/messages.proto\x12\x10\x64jls.v1.messages\x1a\x0ev1/check.proto\x1a\x0fv1/django.proto\x1a\x0fv1/python.proto\"\xa6\x02\n\x07Request\x12\x35\n\rcheck__health\x18\x01 \x01(\x0b\x32\x1c.djls.v1.check.HealthRequestH\x00\x12\x42\n\x14\x63heck__app_installed\x18\x02 \x01(\x0b\x32\".djls.v1.check.AppInstalledRequestH\x00\x12I\n\x17python__get_environment\x18\xe8\x07 \x01(\x0b\x32%.djls.v1.python.GetEnvironmentRequestH\x00\x12J\n\x18\x64jango__get_project_info\x18\xd0\x0f \x01(\x0b\x32%.djls.v1.django.GetProjectInfoRequestH\x00\x42\t\n\x07\x63ommand\"\xd5\x02\n\x08Response\x12\x36\n\rcheck__health\x18\x01 \x01(\x0b\x32\x1d.djls.v1.check.HealthResponseH\x00\x12\x43\n\x14\x63heck__app_installed\x18\x02 \x01(\x0b\x32#.djls.v1.check.AppInstalledResponseH\x00\x12J\n\x17python__get_environment\x18\xe8\x07 \x01(\x0b\x32&.djls.v1.python.GetEnvironmentResponseH\x00\x12K\n\x18\x64jango__get_project_info\x18\xd0\x0f \x01(\x0b\x32&.djls.v1.django.GetProjectInfoResponseH\x00\x12)\n\x05\x65rror\x18\xa8\x46 \x01(\x0b\x32\x17.djls.v1.messages.ErrorH\x00\x42\x08\n\x06result\"\xa5\x01\n\x05\x45rror\x12*\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1c.djls.v1.messages.Error.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x11\n\ttraceback\x18\x03 \x01(\t\"L\n\x04\x43ode\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x13\n\x0fINVALID_REQUEST\x10\x01\x12\x10\n\x0cPYTHON_ERROR\x10\x02\x12\x10\n\x0c\x44JANGO_ERROR\x10\x03\x62\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'v1.messages_pb2', _globals)
if not _descriptor._USE_C_DESCRIPTORS:
DESCRIPTOR._loaded_options = None
_globals['_REQUEST']._serialized_start=90
_globals['_REQUEST']._serialized_end=458
_globals['_RESPONSE']._serialized_start=461
_globals['_RESPONSE']._serialized_end=877
_globals['_ERROR']._serialized_start=880
_globals['_ERROR']._serialized_end=1045
_globals['_ERROR_CODE']._serialized_start=969
_globals['_ERROR_CODE']._serialized_end=1045
_globals['_REQUEST']._serialized_end=384
_globals['_RESPONSE']._serialized_start=387
_globals['_RESPONSE']._serialized_end=728
_globals['_ERROR']._serialized_start=731
_globals['_ERROR']._serialized_end=896
_globals['_ERROR_CODE']._serialized_start=820
_globals['_ERROR_CODE']._serialized_end=896
# @@protoc_insertion_point(module_scope)
12 changes: 4 additions & 8 deletions python/djls/proto/v1/messages_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -13,34 +13,30 @@ from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Opti
DESCRIPTOR: _descriptor.FileDescriptor

class Request(_message.Message):
__slots__ = ("check__health", "check__django_available", "check__app_installed", "python__get_environment", "django__get_project_info")
__slots__ = ("check__health", "check__app_installed", "python__get_environment", "django__get_project_info")
CHECK__HEALTH_FIELD_NUMBER: _ClassVar[int]
CHECK__DJANGO_AVAILABLE_FIELD_NUMBER: _ClassVar[int]
CHECK__APP_INSTALLED_FIELD_NUMBER: _ClassVar[int]
PYTHON__GET_ENVIRONMENT_FIELD_NUMBER: _ClassVar[int]
DJANGO__GET_PROJECT_INFO_FIELD_NUMBER: _ClassVar[int]
check__health: _check_pb2.HealthRequest
check__django_available: _check_pb2.DjangoAvailableRequest
check__app_installed: _check_pb2.AppInstalledRequest
python__get_environment: _python_pb2.GetEnvironmentRequest
django__get_project_info: _django_pb2.GetProjectInfoRequest
def __init__(self, check__health: _Optional[_Union[_check_pb2.HealthRequest, _Mapping]] = ..., check__django_available: _Optional[_Union[_check_pb2.DjangoAvailableRequest, _Mapping]] = ..., check__app_installed: _Optional[_Union[_check_pb2.AppInstalledRequest, _Mapping]] = ..., python__get_environment: _Optional[_Union[_python_pb2.GetEnvironmentRequest, _Mapping]] = ..., django__get_project_info: _Optional[_Union[_django_pb2.GetProjectInfoRequest, _Mapping]] = ...) -> None: ...
def __init__(self, check__health: _Optional[_Union[_check_pb2.HealthRequest, _Mapping]] = ..., check__app_installed: _Optional[_Union[_check_pb2.AppInstalledRequest, _Mapping]] = ..., python__get_environment: _Optional[_Union[_python_pb2.GetEnvironmentRequest, _Mapping]] = ..., django__get_project_info: _Optional[_Union[_django_pb2.GetProjectInfoRequest, _Mapping]] = ...) -> None: ...

class Response(_message.Message):
__slots__ = ("check__health", "check__django_available", "check__app_installed", "python__get_environment", "django__get_project_info", "error")
__slots__ = ("check__health", "check__app_installed", "python__get_environment", "django__get_project_info", "error")
CHECK__HEALTH_FIELD_NUMBER: _ClassVar[int]
CHECK__DJANGO_AVAILABLE_FIELD_NUMBER: _ClassVar[int]
CHECK__APP_INSTALLED_FIELD_NUMBER: _ClassVar[int]
PYTHON__GET_ENVIRONMENT_FIELD_NUMBER: _ClassVar[int]
DJANGO__GET_PROJECT_INFO_FIELD_NUMBER: _ClassVar[int]
ERROR_FIELD_NUMBER: _ClassVar[int]
check__health: _check_pb2.HealthResponse
check__django_available: _check_pb2.DjangoAvailableResponse
check__app_installed: _check_pb2.AppInstalledResponse
python__get_environment: _python_pb2.GetEnvironmentResponse
django__get_project_info: _django_pb2.GetProjectInfoResponse
error: Error
def __init__(self, check__health: _Optional[_Union[_check_pb2.HealthResponse, _Mapping]] = ..., check__django_available: _Optional[_Union[_check_pb2.DjangoAvailableResponse, _Mapping]] = ..., check__app_installed: _Optional[_Union[_check_pb2.AppInstalledResponse, _Mapping]] = ..., python__get_environment: _Optional[_Union[_python_pb2.GetEnvironmentResponse, _Mapping]] = ..., django__get_project_info: _Optional[_Union[_django_pb2.GetProjectInfoResponse, _Mapping]] = ..., error: _Optional[_Union[Error, _Mapping]] = ...) -> None: ...
def __init__(self, check__health: _Optional[_Union[_check_pb2.HealthResponse, _Mapping]] = ..., check__app_installed: _Optional[_Union[_check_pb2.AppInstalledResponse, _Mapping]] = ..., python__get_environment: _Optional[_Union[_python_pb2.GetEnvironmentResponse, _Mapping]] = ..., django__get_project_info: _Optional[_Union[_django_pb2.GetProjectInfoResponse, _Mapping]] = ..., error: _Optional[_Union[Error, _Mapping]] = ...) -> None: ...

class Error(_message.Message):
__slots__ = ("code", "message", "traceback")
Expand Down
Loading