singlestoredb 1.15.0__cp38-abi3-win32.whl → 1.15.2__cp38-abi3-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of singlestoredb might be problematic. Click here for more details.

Files changed (49) hide show
  1. _singlestoredb_accel.pyd +0 -0
  2. singlestoredb/__init__.py +1 -1
  3. singlestoredb/ai/chat.py +14 -0
  4. singlestoredb/apps/_python_udfs.py +18 -3
  5. singlestoredb/apps/_stdout_supress.py +1 -1
  6. singlestoredb/apps/_uvicorn_util.py +4 -0
  7. singlestoredb/config.py +24 -0
  8. singlestoredb/converters.py +1 -1
  9. singlestoredb/docstring/__init__.py +33 -0
  10. singlestoredb/docstring/attrdoc.py +126 -0
  11. singlestoredb/docstring/common.py +230 -0
  12. singlestoredb/docstring/epydoc.py +267 -0
  13. singlestoredb/docstring/google.py +412 -0
  14. singlestoredb/docstring/numpydoc.py +562 -0
  15. singlestoredb/docstring/parser.py +100 -0
  16. singlestoredb/docstring/py.typed +1 -0
  17. singlestoredb/docstring/rest.py +256 -0
  18. singlestoredb/docstring/tests/__init__.py +1 -0
  19. singlestoredb/docstring/tests/_pydoctor.py +21 -0
  20. singlestoredb/docstring/tests/test_epydoc.py +729 -0
  21. singlestoredb/docstring/tests/test_google.py +1007 -0
  22. singlestoredb/docstring/tests/test_numpydoc.py +1100 -0
  23. singlestoredb/docstring/tests/test_parse_from_object.py +109 -0
  24. singlestoredb/docstring/tests/test_parser.py +248 -0
  25. singlestoredb/docstring/tests/test_rest.py +547 -0
  26. singlestoredb/docstring/tests/test_util.py +70 -0
  27. singlestoredb/docstring/util.py +141 -0
  28. singlestoredb/functions/decorator.py +19 -18
  29. singlestoredb/functions/ext/asgi.py +304 -32
  30. singlestoredb/functions/ext/timer.py +2 -11
  31. singlestoredb/functions/ext/utils.py +55 -6
  32. singlestoredb/functions/signature.py +374 -241
  33. singlestoredb/fusion/handlers/files.py +4 -4
  34. singlestoredb/fusion/handlers/models.py +1 -1
  35. singlestoredb/fusion/handlers/stage.py +4 -4
  36. singlestoredb/management/cluster.py +1 -1
  37. singlestoredb/management/manager.py +15 -5
  38. singlestoredb/management/region.py +12 -2
  39. singlestoredb/management/workspace.py +17 -25
  40. singlestoredb/tests/ext_funcs/__init__.py +39 -0
  41. singlestoredb/tests/test_connection.py +18 -8
  42. singlestoredb/tests/test_management.py +24 -57
  43. singlestoredb/tests/test_udf.py +43 -15
  44. {singlestoredb-1.15.0.dist-info → singlestoredb-1.15.2.dist-info}/METADATA +1 -1
  45. {singlestoredb-1.15.0.dist-info → singlestoredb-1.15.2.dist-info}/RECORD +49 -30
  46. {singlestoredb-1.15.0.dist-info → singlestoredb-1.15.2.dist-info}/LICENSE +0 -0
  47. {singlestoredb-1.15.0.dist-info → singlestoredb-1.15.2.dist-info}/WHEEL +0 -0
  48. {singlestoredb-1.15.0.dist-info → singlestoredb-1.15.2.dist-info}/entry_points.txt +0 -0
  49. {singlestoredb-1.15.0.dist-info → singlestoredb-1.15.2.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env python
2
+ import datetime
2
3
  import json
3
4
  import logging
4
5
  import re
@@ -30,14 +31,62 @@ except ImportError:
30
31
  return super().formatMessage(recordcopy)
31
32
 
32
33
 
34
+ class JSONFormatter(logging.Formatter):
35
+ """Custom JSON formatter for structured logging."""
36
+
37
+ def format(self, record: logging.LogRecord) -> str:
38
+ # Create proper ISO timestamp with microseconds
39
+ timestamp = datetime.datetime.fromtimestamp(
40
+ record.created, tz=datetime.timezone.utc,
41
+ )
42
+ # Keep only 3 digits for milliseconds
43
+ iso_timestamp = timestamp.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
44
+
45
+ log_entry = {
46
+ 'timestamp': iso_timestamp,
47
+ 'level': record.levelname,
48
+ 'logger': record.name,
49
+ 'message': record.getMessage(),
50
+ }
51
+
52
+ # Add extra fields if present
53
+ allowed_fields = [
54
+ 'app_name', 'request_id', 'function_name',
55
+ 'content_type', 'accepts', 'metrics',
56
+ ]
57
+ for field in allowed_fields:
58
+ if hasattr(record, field):
59
+ log_entry[field] = getattr(record, field)
60
+
61
+ # Add exception info if present
62
+ if record.exc_info:
63
+ log_entry['exception'] = self.formatException(record.exc_info)
64
+
65
+ return json.dumps(log_entry)
66
+
67
+
33
68
  def get_logger(name: str) -> logging.Logger:
34
- """Return a new logger."""
69
+ """Return a logger with JSON formatting."""
35
70
  logger = logging.getLogger(name)
36
- handler = logging.StreamHandler()
37
- formatter = DefaultFormatter('%(levelprefix)s %(message)s')
38
- handler.setFormatter(formatter)
39
- logger.addHandler(handler)
40
- logger.setLevel(logging.INFO)
71
+
72
+ # Only configure if not already configured with JSON formatter
73
+ has_json_formatter = any(
74
+ isinstance(getattr(handler, 'formatter', None), JSONFormatter)
75
+ for handler in logger.handlers
76
+ )
77
+
78
+ if not logger.handlers or not has_json_formatter:
79
+ # Clear handlers only if we need to reconfigure
80
+ logger.handlers.clear()
81
+ handler = logging.StreamHandler()
82
+ formatter = JSONFormatter()
83
+ handler.setFormatter(formatter)
84
+ logger.addHandler(handler)
85
+ logger.setLevel(logging.INFO)
86
+
87
+ # Prevent propagation to avoid duplicate messages or different formatting
88
+ logger.propagate = False
89
+
41
90
  return logger
42
91
 
43
92