logtail-python 0.3.1__tar.gz → 0.3.3__tar.gz

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.
Files changed (35) hide show
  1. {logtail_python-0.3.1/logtail_python.egg-info → logtail_python-0.3.3}/PKG-INFO +2 -2
  2. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail/__init__.py +1 -1
  3. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail/frame.py +12 -7
  4. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail/handler.py +5 -2
  5. {logtail_python-0.3.1 → logtail_python-0.3.3/logtail_python.egg-info}/PKG-INFO +2 -2
  6. {logtail_python-0.3.1 → logtail_python-0.3.3}/setup.py +1 -1
  7. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/__pycache__/test_handler.cpython-311.pyc +0 -0
  8. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/test_handler.py +22 -1
  9. {logtail_python-0.3.1 → logtail_python-0.3.3}/LICENSE.md +0 -0
  10. {logtail_python-0.3.1 → logtail_python-0.3.3}/MANIFEST.in +0 -0
  11. {logtail_python-0.3.1 → logtail_python-0.3.3}/README.md +0 -0
  12. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail/compat.py +0 -0
  13. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail/flusher.py +0 -0
  14. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail/formatter.py +0 -0
  15. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail/helpers.py +0 -0
  16. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail/uploader.py +0 -0
  17. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail_python.egg-info/SOURCES.txt +0 -0
  18. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail_python.egg-info/dependency_links.txt +0 -0
  19. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail_python.egg-info/requires.txt +0 -0
  20. {logtail_python-0.3.1 → logtail_python-0.3.3}/logtail_python.egg-info/top_level.txt +0 -0
  21. {logtail_python-0.3.1 → logtail_python-0.3.3}/requirements.txt +0 -0
  22. {logtail_python-0.3.1 → logtail_python-0.3.3}/setup.cfg +0 -0
  23. {logtail_python-0.3.1 → logtail_python-0.3.3}/test-requirements.txt +0 -0
  24. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/__init__.py +0 -0
  25. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/__pycache__/__init__.cpython-311.pyc +0 -0
  26. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/__pycache__/test_flusher.cpython-311.pyc +0 -0
  27. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/__pycache__/test_formatter.cpython-311.pyc +0 -0
  28. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/__pycache__/test_frame.cpython-311.pyc +0 -0
  29. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/__pycache__/test_helpers.cpython-311.pyc +0 -0
  30. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/__pycache__/test_uploader.cpython-311.pyc +0 -0
  31. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/test_flusher.py +0 -0
  32. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/test_formatter.py +0 -0
  33. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/test_frame.py +0 -0
  34. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/test_helpers.py +0 -0
  35. {logtail_python-0.3.1 → logtail_python-0.3.3}/tests/test_uploader.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: logtail-python
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: Logtail.com client library
5
5
  Home-page: https://github.com/logtail/logtail-python
6
- Download-URL: https://github.com/logtail/logtail-python/tarball/0.3.1
6
+ Download-URL: https://github.com/logtail/logtail-python/tarball/0.3.3
7
7
  Author: Logtail
8
8
  Author-email: hello@logtail.com
9
9
  License: ISC
@@ -5,6 +5,6 @@ from .handler import LogtailHandler
5
5
  from .helpers import LogtailContext, DEFAULT_CONTEXT
6
6
  from .formatter import LogtailFormatter
7
7
 
8
- __version__ = '0.3.1'
8
+ __version__ = '0.3.3'
9
9
 
10
10
  context = DEFAULT_CONTEXT
@@ -60,23 +60,28 @@ def _parse_custom_events(record, include_extra_attributes):
60
60
  def _remove_circular_dependencies(obj, memo=None):
61
61
  if memo is None:
62
62
  memo = set()
63
+
63
64
  # Skip immutable types, which can't contain circular dependencies
64
- if isinstance(obj, (str, int, float, bool)):
65
+ if isinstance(obj, (str, int, float, bool, type(None))):
65
66
  return obj
66
- if id(obj) in memo:
67
+
68
+ # For mutable objects, check for circular references
69
+ obj_id = id(obj)
70
+ if obj_id in memo:
67
71
  return "<omitted circular reference>"
68
- memo.add(id(obj))
72
+ memo.add(obj_id)
73
+
69
74
  if isinstance(obj, dict):
70
75
  new_dict = {}
71
76
  for key, value in obj.items():
72
- new_dict[key] = _remove_circular_dependencies(value, memo)
77
+ new_dict[key] = _remove_circular_dependencies(value, memo.copy())
73
78
  return new_dict
74
79
  elif isinstance(obj, list):
75
- return [_remove_circular_dependencies(item, memo) for item in obj]
80
+ return [_remove_circular_dependencies(item, memo.copy()) for item in obj]
76
81
  elif isinstance(obj, tuple):
77
- return tuple(_remove_circular_dependencies(item, memo) for item in obj)
82
+ return tuple(_remove_circular_dependencies(item, memo.copy()) for item in obj)
78
83
  elif isinstance(obj, set):
79
- return {_remove_circular_dependencies(item, memo) for item in obj}
84
+ return {_remove_circular_dependencies(item, memo.copy()) for item in obj}
80
85
  else:
81
86
  return obj
82
87
 
@@ -9,7 +9,7 @@ from .flusher import FlushWorker
9
9
  from .uploader import Uploader
10
10
  from .frame import create_frame
11
11
 
12
- DEFAULT_HOST = 'https://in.logs.betterstack.com'
12
+ DEFAULT_HOST = 'in.logs.betterstack.com'
13
13
  DEFAULT_BUFFER_CAPACITY = 1000
14
14
  DEFAULT_FLUSH_INTERVAL = 1
15
15
  DEFAULT_CHECK_INTERVAL = 0.1
@@ -32,7 +32,10 @@ class LogtailHandler(logging.Handler):
32
32
  level=logging.NOTSET):
33
33
  super(LogtailHandler, self).__init__(level=level)
34
34
  self.source_token = source_token
35
- self.host = host
35
+ if host.startswith('https://') or host.startswith('http://'):
36
+ self.host = host
37
+ else:
38
+ self.host = "https://" + host
36
39
  self.context = context
37
40
  self.pipe = queue.Queue(maxsize=buffer_capacity)
38
41
  self.uploader = Uploader(self.source_token, self.host)
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: logtail-python
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: Logtail.com client library
5
5
  Home-page: https://github.com/logtail/logtail-python
6
- Download-URL: https://github.com/logtail/logtail-python/tarball/0.3.1
6
+ Download-URL: https://github.com/logtail/logtail-python/tarball/0.3.3
7
7
  Author: Logtail
8
8
  Author-email: hello@logtail.com
9
9
  License: ISC
@@ -3,7 +3,7 @@ import os
3
3
  from setuptools import setup
4
4
 
5
5
 
6
- VERSION = '0.3.1'
6
+ VERSION = '0.3.3'
7
7
  ROOT_DIR = os.path.dirname(__file__)
8
8
 
9
9
  REQUIREMENTS = [
@@ -19,7 +19,7 @@ class TestLogtailHandler(unittest.TestCase):
19
19
  def test_handler_creates_uploader_from_args(self, MockWorker):
20
20
  handler = LogtailHandler(source_token=self.source_token, host=self.host)
21
21
  self.assertEqual(handler.uploader.source_token, self.source_token)
22
- self.assertEqual(handler.uploader.host, self.host)
22
+ self.assertEqual(handler.uploader.host, "https://" + self.host)
23
23
 
24
24
  @patch('logtail.handler.FlushWorker')
25
25
  def test_handler_creates_pipe_from_args(self, MockWorker):
@@ -224,6 +224,27 @@ class TestLogtailHandler(unittest.TestCase):
224
224
  self.assertEqual(log_entry['test2'], 'this is a test string')
225
225
  self.assertTrue(handler.pipe.empty())
226
226
 
227
+ @patch('logtail.handler.FlushWorker')
228
+ def test_can_have_multiple_instance_of_same_array_in_extra_data(self, MockWorker):
229
+ buffer_capacity = 1
230
+ handler = LogtailHandler(
231
+ source_token=self.source_token,
232
+ buffer_capacity=buffer_capacity
233
+ )
234
+
235
+ logger = logging.getLogger(__name__)
236
+ logger.handlers = []
237
+ logger.addHandler(handler)
238
+ test_array = ['this is a test string']
239
+ logger.info('hello', extra={'test1': test_array, 'test2': test_array})
240
+
241
+ log_entry = handler.pipe.get()
242
+
243
+ self.assertEqual(log_entry['message'], 'hello')
244
+ self.assertEqual(log_entry['test1'], ['this is a test string'])
245
+ self.assertEqual(log_entry['test2'], ['this is a test string'])
246
+ self.assertTrue(handler.pipe.empty())
247
+
227
248
  @patch('logtail.handler.FlushWorker')
228
249
  def test_can_send_circular_dependency_in_context(self, MockWorker):
229
250
  buffer_capacity = 1
File without changes
File without changes