From b13d19a4bf006dc0750ea00047f95a9c63c8fe85 Mon Sep 17 00:00:00 2001 From: Josh Thomas Date: Thu, 12 Dec 2024 20:03:48 -0600 Subject: [PATCH] remove import check for django in setup (#27) unneeded now since the agent imports and sets up Django as part of it's initial serving --- crates/djls-django/src/django.rs | 8 +----- crates/djls-python/src/lib.rs | 1 - crates/djls-python/src/packaging.rs | 36 +-------------------------- proto/v1/check.proto | 6 ----- proto/v1/messages.proto | 6 ++--- python/djls/handlers.py | 14 ----------- python/djls/proto/v1/check_pb2.py | 14 ++++------- python/djls/proto/v1/check_pb2.pyi | 12 --------- python/djls/proto/v1/messages_pb2.py | 16 ++++++------ python/djls/proto/v1/messages_pb2.pyi | 12 +++------ 10 files changed, 21 insertions(+), 104 deletions(-) diff --git a/crates/djls-django/src/django.rs b/crates/djls-django/src/django.rs index 1d43352..42f1714 100644 --- a/crates/djls-django/src/django.rs +++ b/crates/djls-django/src/django.rs @@ -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)] @@ -23,12 +23,6 @@ impl DjangoProject { pub fn setup(mut python: PythonProcess) -> Result { 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."); diff --git a/crates/djls-python/src/lib.rs b/crates/djls-python/src/lib.rs index ae22bff..35d7bf8 100644 --- a/crates/djls-python/src/lib.rs +++ b/crates/djls-python/src/lib.rs @@ -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; diff --git a/crates/djls-python/src/packaging.rs b/crates/djls-python/src/packaging.rs index 2c9bd17..f775707 100644 --- a/crates/djls-python/src/packaging.rs +++ b/crates/djls-python/src/packaging.rs @@ -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; @@ -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>, - ) -> Result { - 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}")] diff --git a/proto/v1/check.proto b/proto/v1/check.proto index 1993013..d64635c 100644 --- a/proto/v1/check.proto +++ b/proto/v1/check.proto @@ -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; } diff --git a/proto/v1/messages.proto b/proto/v1/messages.proto index c2ed8fe..ca6ee91 100644 --- a/proto/v1/messages.proto +++ b/proto/v1/messages.proto @@ -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; } @@ -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; diff --git a/python/djls/handlers.py b/python/djls/handlers.py index 6853572..648ae97 100644 --- a/python/djls/handlers.py +++ b/python/djls/handlers.py @@ -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( diff --git a/python/djls/proto/v1/check_pb2.py b/python/djls/proto/v1/check_pb2.py index 8de9965..375ce7c 100644 --- a/python/djls/proto/v1/check_pb2.py +++ b/python/djls/proto/v1/check_pb2.py @@ -28,7 +28,7 @@ _sym_db = _symbol_database.Default() -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) @@ -39,12 +39,8 @@ if not _descriptor._USE_C_DESCRIPTORS: _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) diff --git a/python/djls/proto/v1/check_pb2.pyi b/python/djls/proto/v1/check_pb2.pyi index 1811cc7..b6a0d59 100644 --- a/python/djls/proto/v1/check_pb2.pyi +++ b/python/djls/proto/v1/check_pb2.pyi @@ -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] diff --git a/python/djls/proto/v1/messages_pb2.py b/python/djls/proto/v1/messages_pb2.py index aaa0fee..5eb7e8c 100644 --- a/python/djls/proto/v1/messages_pb2.py +++ b/python/djls/proto/v1/messages_pb2.py @@ -31,7 +31,7 @@ from . import django_pb2 as v1_dot_django__pb2 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) @@ -39,11 +39,11 @@ _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) diff --git a/python/djls/proto/v1/messages_pb2.pyi b/python/djls/proto/v1/messages_pb2.pyi index 47db32d..34b2a89 100644 --- a/python/djls/proto/v1/messages_pb2.pyi +++ b/python/djls/proto/v1/messages_pb2.pyi @@ -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")