tinyflux 0.4.1__tar.gz → 0.4.2__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.

Potentially problematic release.


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

Files changed (31) hide show
  1. tinyflux-0.4.2/MANIFEST.in +2 -0
  2. {tinyflux-0.4.1/tinyflux.egg-info → tinyflux-0.4.2}/PKG-INFO +2 -2
  3. {tinyflux-0.4.1 → tinyflux-0.4.2}/README.rst +1 -1
  4. {tinyflux-0.4.1 → tinyflux-0.4.2}/setup.cfg +1 -1
  5. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/conftest.py +1 -0
  6. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/test_index.py +3 -2
  7. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/test_measurement.py +3 -2
  8. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/test_point.py +2 -1
  9. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/test_queries.py +5 -4
  10. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/test_storages.py +7 -6
  11. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/test_tinyflux.py +2 -1
  12. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/test_utils.py +2 -1
  13. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/__init__.py +1 -0
  14. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/database.py +6 -5
  15. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/index.py +7 -6
  16. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/measurement.py +3 -2
  17. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/point.py +2 -2
  18. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/queries.py +10 -9
  19. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/storages.py +4 -3
  20. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/utils.py +2 -1
  21. tinyflux-0.4.2/tinyflux/version.py +3 -0
  22. {tinyflux-0.4.1 → tinyflux-0.4.2/tinyflux.egg-info}/PKG-INFO +2 -2
  23. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux.egg-info/SOURCES.txt +1 -1
  24. tinyflux-0.4.1/MANIFEST.in +0 -3
  25. tinyflux-0.4.1/version.txt +0 -1
  26. {tinyflux-0.4.1 → tinyflux-0.4.2}/LICENSE +0 -0
  27. {tinyflux-0.4.1 → tinyflux-0.4.2}/pyproject.toml +0 -0
  28. {tinyflux-0.4.1 → tinyflux-0.4.2}/tests/__init__.py +0 -0
  29. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux/py.typed +0 -0
  30. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux.egg-info/dependency_links.txt +0 -0
  31. {tinyflux-0.4.1 → tinyflux-0.4.2}/tinyflux.egg-info/top_level.txt +0 -0
@@ -0,0 +1,2 @@
1
+ include LICENSE
2
+ recursive-include tests *.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinyflux
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: The Tiny Time-Series Database Optimized for Your Happiness
5
5
  Home-page: https://github.com/citrusvanilla/tinyflux
6
6
  Author: Justin Fung
@@ -39,7 +39,7 @@ License-File: LICENSE
39
39
 
40
40
  TinyFlux is the tiny time series database optimized for your happiness :)
41
41
 
42
- TinyFlux is a time series version of `TinyDB <https://tinydb.readthedocs.io/en/latest/index.html>`__ that is also written in Python and has no external dependencies. It's a great companion for small analytics workflows and apps, as well as at-home IOT data stores. TinyFlux has 100% coverage, tens of thousands of downloads, and no open issues.
42
+ TinyFlux is a time series version of `TinyDB <https://tinydb.readthedocs.io/en/latest/index.html>`__ that is also written in Python and has no external dependencies. It's a great companion for small analytics workflows and apps, as well as at-home IOT data stores. TinyFlux has 100% test coverage, over 50,000 downloads, and no open issues.
43
43
 
44
44
  |Build Status| |Coverage| |Version| |Downloads|
45
45
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  TinyFlux is the tiny time series database optimized for your happiness :)
8
8
 
9
- TinyFlux is a time series version of `TinyDB <https://tinydb.readthedocs.io/en/latest/index.html>`__ that is also written in Python and has no external dependencies. It's a great companion for small analytics workflows and apps, as well as at-home IOT data stores. TinyFlux has 100% coverage, tens of thousands of downloads, and no open issues.
9
+ TinyFlux is a time series version of `TinyDB <https://tinydb.readthedocs.io/en/latest/index.html>`__ that is also written in Python and has no external dependencies. It's a great companion for small analytics workflows and apps, as well as at-home IOT data stores. TinyFlux has 100% test coverage, over 50,000 downloads, and no open issues.
10
10
 
11
11
  |Build Status| |Coverage| |Version| |Downloads|
12
12
 
@@ -8,7 +8,7 @@ extend-ignore = E203
8
8
 
9
9
  [metadata]
10
10
  name = tinyflux
11
- version = file: version.txt
11
+ version = attr: tinyflux.version.__version__
12
12
  author = Justin Fung
13
13
  author_email = justincaseyfung@gmail.com
14
14
  description = The Tiny Time-Series Database Optimized for Your Happiness
@@ -1,4 +1,5 @@
1
1
  """PyTest configuration and test fixtures."""
2
+
2
3
  import pytest
3
4
 
4
5
  from tinyflux.storages import CSVStorage, MemoryStorage
@@ -1,4 +1,5 @@
1
1
  """Tests for tinyflux.index module."""
2
+
2
3
  from datetime import datetime, timezone, timedelta
3
4
  import pytest
4
5
 
@@ -118,7 +119,7 @@ def test_insert_time_method():
118
119
  assert index._timestamps == [t1.timestamp(), t2.timestamp()]
119
120
 
120
121
 
121
- def test_index_measuments_method():
122
+ def test_index_measurements_method():
122
123
  """Test _insert_measurements helper of Index."""
123
124
  index = Index()
124
125
 
@@ -381,7 +382,7 @@ def test_search_compound_query_not():
381
382
  rst = index.search(~fiel_q)
382
383
  assert rst.items == {0, 1}
383
384
 
384
- # Compount NOT FieldQuery.
385
+ # Compound NOT FieldQuery.
385
386
  rst = index.search(~fiel_q & tags_q)
386
387
  assert rst.items == {0}
387
388
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  Tests are generally organized by Measurement class method.
4
4
  """
5
+
5
6
  from datetime import datetime, timezone, timedelta
6
7
  import re
7
8
  from typing import Generator
@@ -43,7 +44,7 @@ def test_iter():
43
44
 
44
45
 
45
46
  def test_len():
46
- """Test __len__ of Measuremnt."""
47
+ """Test __len__ of Measurement."""
47
48
  db = TinyFlux(storage=MemoryStorage)
48
49
  m = db.measurement("a")
49
50
  assert len(m) == 0
@@ -468,7 +469,7 @@ def test_insert():
468
469
  assert len(m1) == 1
469
470
  assert len(m2) == 0
470
471
 
471
- # Insert in-order, into a different measurment.
472
+ # Insert in-order, into a different measurement.
472
473
  assert m2.insert(p2) == 1
473
474
  assert db.index.valid and not db.index.empty
474
475
  assert len(db.index) == 2
@@ -1,4 +1,5 @@
1
1
  """Tests for the tinyflux.point module."""
2
+
2
3
  from datetime import datetime, timezone, timedelta
3
4
  import pytest
4
5
  from tinyflux.point import Point, validate_tags, validate_fields
@@ -284,7 +285,7 @@ def test_points_are_equal():
284
285
 
285
286
 
286
287
  def test_serialize_point():
287
- """Test serializaiton of a Point object."""
288
+ """Test serialization of a Point object."""
288
289
  time_now = datetime.now(timezone.utc)
289
290
  time_now_str = time_now.replace(tzinfo=None).isoformat()
290
291
 
@@ -1,4 +1,5 @@
1
1
  """Tests for the tinyflux.queries module."""
2
+
2
3
  import operator
3
4
  from datetime import datetime, timezone, timedelta
4
5
  from itertools import combinations
@@ -75,7 +76,7 @@ def test_repr():
75
76
 
76
77
 
77
78
  def test_no_path():
78
- """Test absense of path for Tag and Field queries.
79
+ """Test absence of path for Tag and Field queries.
79
80
 
80
81
  TagQuery and FieldQuery should have paths.
81
82
  """
@@ -226,7 +227,7 @@ def test_lt():
226
227
  # Test for tag key "city".
227
228
  taq_q = TagQuery().city < "melbourne"
228
229
  assert taq_q(Point(tags={"city": "amsterdam"}))
229
- assert not taq_q(Point(tags={"city": "zansibar"}))
230
+ assert not taq_q(Point(tags={"city": "zanzibar"}))
230
231
  assert not taq_q(Point())
231
232
  assert hash(taq_q)
232
233
 
@@ -258,7 +259,7 @@ def test_le():
258
259
  # Test for tag key "city".
259
260
  taq_q = TagQuery().city <= "melbourne"
260
261
  assert taq_q(Point(tags={"city": "melbourne"}))
261
- assert not taq_q(Point(tags={"city": "zansibar"}))
262
+ assert not taq_q(Point(tags={"city": "zanzibar"}))
262
263
  assert not taq_q(Point())
263
264
  assert hash(taq_q)
264
265
 
@@ -289,7 +290,7 @@ def test_gt():
289
290
  """Test simple greater than comparison."""
290
291
  # Test for tag key "city".
291
292
  taq_q = TagQuery().city > "melbourne"
292
- assert taq_q(Point(tags={"city": "zansibar"}))
293
+ assert taq_q(Point(tags={"city": "zanzibar"}))
293
294
  assert not taq_q(Point(tags={"city": "amsterdam"}))
294
295
  assert not taq_q(Point())
295
296
  assert hash(taq_q)
@@ -1,4 +1,5 @@
1
1
  """Tests for the tinyflux.storages module."""
2
+
2
3
  import csv
3
4
  from datetime import datetime, timezone, timedelta
4
5
  import os
@@ -102,7 +103,7 @@ def test_csv_write_read(tmpdir):
102
103
 
103
104
 
104
105
  def test_csv_kwargs(tmpdir):
105
- """Test kwargs propogation."""
106
+ """Test kwargs propagation."""
106
107
  dbfile = os.path.join(tmpdir, "test.csv")
107
108
 
108
109
  # Pass the 'delimiter' kwarg from csv module.
@@ -133,9 +134,9 @@ def test_create_dirs():
133
134
  temp_dir = tempfile.gettempdir()
134
135
 
135
136
  while True:
136
- dname = os.path.join(temp_dir, str(random.getrandbits(20)))
137
- if not os.path.exists(dname):
138
- dbdir = dname
137
+ dbname = os.path.join(temp_dir, str(random.getrandbits(20)))
138
+ if not os.path.exists(dbname):
139
+ dbdir = dbname
139
140
  dbfile = os.path.join(dbdir, "db.json")
140
141
  break
141
142
 
@@ -363,7 +364,7 @@ def test_connect_to_existing_csv(tmpdir, csv_storage_with_counters):
363
364
  storage.append([storage._serialize_point(p3)])
364
365
  assert storage.reindex_count == 0
365
366
 
366
- # Read without reindexing.
367
+ # Read without re-indexing.
367
368
  assert storage.read() == [p2, p1, p3]
368
369
  assert storage.reindex_count == 0
369
370
  assert storage.write_count == 0
@@ -441,7 +442,7 @@ def test_reindex_on_read_memory(mem_storage_with_counters):
441
442
  assert storage.reindex_count == 0
442
443
  assert storage.write_count == 0
443
444
 
444
- # Read contents with reindexing.
445
+ # Read contents with re-indexing.
445
446
  storage.read()
446
447
  assert storage.append_count == 3
447
448
  assert storage.reindex_count == 0
@@ -2,6 +2,7 @@
2
2
 
3
3
  Tests are generally organized by TinyFlux class method.
4
4
  """
5
+
5
6
  import csv
6
7
  from datetime import datetime, timezone, timedelta
7
8
  import os
@@ -625,7 +626,7 @@ def test_measurement():
625
626
  assert not db._measurements
626
627
  assert not db.get_measurements()
627
628
 
628
- # Create a reference to a measurment that does not exist.
629
+ # Create a reference to a measurement that does not exist.
629
630
  m = db.measurement("a")
630
631
  assert "a" in db._measurements
631
632
  assert not len(m)
@@ -1,4 +1,5 @@
1
1
  """Tests for tinyflux.utils module."""
2
+
2
3
  import pytest
3
4
 
4
5
  from tinyflux.utils import (
@@ -35,7 +36,7 @@ def test_freeze():
35
36
 
36
37
 
37
38
  def test_frozen_dict_hash():
38
- """Tesh the hash function on FrozenDict class."""
39
+ """Test the hash function on FrozenDict class."""
39
40
  my_frozen_set1 = FrozenDict({"city": "la", "state": "ca"})
40
41
  my_frozen_set2 = FrozenDict({"state": "ca", "city": "la"})
41
42
  my_frozen_set3 = FrozenDict({"temp": 70})
@@ -27,6 +27,7 @@ Usage:
27
27
  >>> q2 = FieldQuery().aqi > 100
28
28
  >>> hazardous_days_in_LA_2020 = db.search(q1 & q2)
29
29
  """
30
+
30
31
  from .database import TinyFlux
31
32
  from .point import Point
32
33
  from .queries import TagQuery, FieldQuery, MeasurementQuery, TimeQuery
@@ -1,4 +1,5 @@
1
1
  """The main module of the TinyFlux package, containing the TinyFlux class."""
2
+
2
3
  import copy
3
4
  from datetime import datetime, timezone
4
5
  from functools import wraps
@@ -164,7 +165,7 @@ class TinyFlux:
164
165
  'auto-index' to False.
165
166
 
166
167
  Args:
167
- auto_index: Reindexing of data will be performed automatically.
168
+ auto_index: Re-indexing of data will be performed automatically.
168
169
  storage: Class of Storage instance.
169
170
  """
170
171
  self._auto_index = auto_index
@@ -213,7 +214,7 @@ class TinyFlux:
213
214
  return
214
215
 
215
216
  def __iter__(self) -> Iterator[Point]:
216
- """Return an iterater for all Points in the storage layer."""
217
+ """Return an iterator for all Points in the storage layer."""
217
218
  for item in self._storage:
218
219
  yield self._storage._deserialize_storage_item(item)
219
220
 
@@ -687,7 +688,7 @@ class TinyFlux:
687
688
  1 if success.
688
689
 
689
690
  Raises:
690
- OSError if storage cannot be appendex to.
691
+ OSError if storage cannot be appended to.
691
692
  TypeError if point is not a Point instance.
692
693
  """
693
694
  return self._insert_helper([point], measurement, compact_key_prefixes)
@@ -710,7 +711,7 @@ class TinyFlux:
710
711
  The count of inserted points.
711
712
 
712
713
  Raises:
713
- OSError if storage cannot be appendex to.
714
+ OSError if storage cannot be appended to.
714
715
  TypeError if point is not a Point instance.
715
716
  """
716
717
  return self._insert_helper(points, measurement, compact_key_prefixes)
@@ -896,7 +897,7 @@ class TinyFlux:
896
897
  ) -> List[Union[Any, Tuple[Any, ...]]]:
897
898
  """Get specified attributes from Points specified by a query.
898
899
 
899
- 'select_keys' should be an iterable of attributres including 'time',
900
+ 'select_keys' should be an iterable of attributes including 'time',
900
901
  'measurement', and tag keys and tag values. Passing 'tags' or 'fields'
901
902
  in the 'select_keys' iterable will not retrieve all tag and/or field
902
903
  values. Tag and field keys must be specified individually.
@@ -1,13 +1,14 @@
1
- """Defintion of the TinyFlux Index.
1
+ """Definition of the TinyFlux Index.
2
2
 
3
3
  Class descriptions for Index and IndexResult. An Index acts like a singleton,
4
4
  and is initialized at creation time with the TinyFlux instance. It provides
5
5
  efficient in-memory data structures and getters for TinyFlux operations. An
6
6
  Index instance is not a part of the TinyFlux interface.
7
7
 
8
- An IndexResult returns the indicies of revelant TinyFlux queries for further
8
+ An IndexResult returns the indices of relevant TinyFlux queries for further
9
9
  handling, usually as an input to a storage retrieval.
10
10
  """
11
+
11
12
  from datetime import datetime, timezone
12
13
  import operator
13
14
  from typing import Dict, Iterable, List, Optional, Set, Tuple, Union
@@ -18,12 +19,12 @@ from .utils import find_eq, find_lt, find_le, find_gt, find_ge
18
19
 
19
20
 
20
21
  class IndexResult:
21
- """Returns indicies of TinyFlux queries that are handled by an Index.
22
+ """Returns indices of TinyFlux queries that are handled by an Index.
22
23
 
23
24
  IndexResults instances are generated by an Index.
24
25
 
25
- Arritributes:
26
- items: A set of indicies as ints.
26
+ Attributes:
27
+ items: A set of indices as ints.
27
28
 
28
29
  Usage:
29
30
  >>> IndexResult(items=set(), index_count=0)
@@ -36,7 +37,7 @@ class IndexResult:
36
37
  """Init IndexResult.
37
38
 
38
39
  Args:
39
- items: Matching items from a query as indicies.
40
+ items: Matching items from a query as indices.
40
41
  index_count: Number of items in the index..
41
42
  """
42
43
  self._items = items
@@ -1,4 +1,4 @@
1
- """Defintion of TinyFlux measurement class.
1
+ """Definition of TinyFlux measurement class.
2
2
 
3
3
  The measurement class provides a convenient interface into a subset of
4
4
  data points with a common measurement name. A measurement is analogous to a
@@ -8,6 +8,7 @@ Usage:
8
8
  >>> db = TinyFlux(storage=MemoryStorage)
9
9
  >>> m = db.measurement("my_measurement")
10
10
  """
11
+
11
12
  from __future__ import annotations
12
13
 
13
14
  from datetime import datetime
@@ -298,7 +299,7 @@ class Measurement:
298
299
  ) -> List[Tuple[Union[datetime, str, int, float, None]]]:
299
300
  """Get specified attributes from Points specified by a query.
300
301
 
301
- 'keys' should be an iterable of attributres including 'time',
302
+ 'keys' should be an iterable of attributes including 'time',
302
303
  'measurement', and tag keys and tag values. Passing 'tags' or 'fields'
303
304
  in the 'keys' iterable will not retrieve all tag and/or field values.
304
305
  Tag and field keys must be specified individually.
@@ -1,8 +1,8 @@
1
- """Defintion of the TinyFlux Point class.
1
+ """Definition of the TinyFlux Point class.
2
2
 
3
3
  A Point is the data type upon which TinyFlux manages. It contains the time
4
4
  data and metadata for an individual observation. Points are serialized and
5
- deserialized from Storage. SimpleQuerys act upon individual Points.
5
+ deserialized from Storage. SimpleQuery act upon individual Points.
6
6
 
7
7
  A Point is comprised of a timestamp, a measurement, fields, and tags.
8
8
 
@@ -1,4 +1,4 @@
1
- """Defintion of TinyFlux Queries.
1
+ """Definition of TinyFlux Queries.
2
2
 
3
3
  A query contains logic in the form of a test and it acts upon a single Point
4
4
  when it is eventually evaluated.
@@ -10,10 +10,11 @@ instances support logical AND, OR, and NOT operations, which result in the
10
10
  initialization of a new CompoundQuery object.
11
11
 
12
12
  Each SimpleQuery instance contains attributes that constitute the
13
- "deconstuction" of a query into several key parts (e.g. the operator, the
14
- right-hand side) so that the other consumers of queries, includng an Index, may
13
+ "deconstruction" of a query into several key parts (e.g. the operator, the
14
+ right-hand side) so that the other consumers of queries, including an Index, may
15
15
  use them for their own purposes.
16
16
  """
17
+
17
18
  from datetime import datetime
18
19
  import operator
19
20
  import re
@@ -214,7 +215,7 @@ class SimpleQuery:
214
215
  operator: The operator portion of a test.
215
216
  rhs: The value that a test should evaluated against.
216
217
  test: The combined logic as a callable.
217
- path_resolver: A fetcher/translater for Point metadata that the
218
+ path_resolver: A fetcher/translator for Point metadata that the
218
219
  query will be evaluated on.
219
220
  hashval: The hash value for the query.
220
221
  """
@@ -323,10 +324,10 @@ class SimpleQuery:
323
324
  class BaseQuery:
324
325
  """A base class for the different TinyFlux query types.
325
326
 
326
- A query type that explicity unifies the divergent interfaces of TimeQuery,
327
+ A query type that explicitly unifies the divergent interfaces of TimeQuery,
327
328
  MeasurementQuery, TagQuery, and FieldQuery.
328
329
 
329
- A BaseQuery is not iteslf callable. When it is combined with test logic,
330
+ A BaseQuery is not itself callable. When it is combined with test logic,
330
331
  it generates a SimpleQuery, which is callable without exception.
331
332
 
332
333
  Usage:
@@ -421,7 +422,7 @@ class BaseQuery:
421
422
  Args:
422
423
  operator: A Callable.
423
424
  rhs: A value to test against.
424
- test_against_rhs: Whether the test should evaulate against RHS.
425
+ test_against_rhs: Whether the test should evaluate against RHS.
425
426
  hashval: The hash value for the query.
426
427
  """
427
428
  # Make sure this query has some keys if they are required.
@@ -468,7 +469,7 @@ class BaseQuery:
468
469
  raise TypeError("FieldQuery comparison value must be numeric.")
469
470
 
470
471
  def test(x: Any) -> bool:
471
- """The test function from an operator and righthand side."""
472
+ """The test function from an operator and right-hand side."""
472
473
  if not test_against_rhs:
473
474
  return operator(x, *args) if args else operator(x)
474
475
 
@@ -655,7 +656,7 @@ class BaseQuery:
655
656
  >>> FieldQuery()["my field"].test(test_func)
656
657
 
657
658
  Warning:
658
- The test fuction provided needs to be deterministic (returning the
659
+ The test function provided needs to be deterministic (returning the
659
660
  same value when provided with the same arguments), otherwise this
660
661
  may mess up the query cache that :class:`~tinyflux.table.Table`
661
662
  implements.
@@ -1,4 +1,4 @@
1
- """Defintion of TinyFlux storages classes.
1
+ """Definition of TinyFlux storages classes.
2
2
 
3
3
  Storage defines an abstract base case using the built-in ABC of python. This
4
4
  class defines the requires abstract methods of read, write, and append, as well
@@ -13,6 +13,7 @@ Usage:
13
13
  >>> my_mem_db = TinyFlux(storage=MemoryStorage)
14
14
  >>> my_csv_db = TinyFlux('path/to/my.csv', storage=CSVStorage)
15
15
  """
16
+
16
17
  from abc import ABC, abstractmethod
17
18
  import csv
18
19
  from datetime import datetime
@@ -58,7 +59,7 @@ class Storage(ABC): # pragma: no cover
58
59
  Defines an extensible, static interface with required read/write ops and
59
60
  index-related getter/setters.
60
61
 
61
- Custom storage classes should inheret like so:
62
+ Custom storage classes should inherit like so:
62
63
  >>> from tinyflux import Storage
63
64
  >>> class MyStorageClass(Storage):
64
65
  ...
@@ -96,7 +97,7 @@ class Storage(ABC): # pragma: no cover
96
97
  """Append points to the store.
97
98
 
98
99
  Args:
99
- points: A list of Point objets.
100
+ points: A list of Point objects.
100
101
  temporary: Whether or not to append to temporary storage.
101
102
  """
102
103
  ...
@@ -1,4 +1,5 @@
1
- """Defintion of TinyFlux utils."""
1
+ """Definition of TinyFlux utils."""
2
+
2
3
  import bisect
3
4
  from typing import Any, List, Optional
4
5
 
@@ -0,0 +1,3 @@
1
+ """Version."""
2
+
3
+ __version__ = "0.4.2" # pragma: no cover
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinyflux
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: The Tiny Time-Series Database Optimized for Your Happiness
5
5
  Home-page: https://github.com/citrusvanilla/tinyflux
6
6
  Author: Justin Fung
@@ -39,7 +39,7 @@ License-File: LICENSE
39
39
 
40
40
  TinyFlux is the tiny time series database optimized for your happiness :)
41
41
 
42
- TinyFlux is a time series version of `TinyDB <https://tinydb.readthedocs.io/en/latest/index.html>`__ that is also written in Python and has no external dependencies. It's a great companion for small analytics workflows and apps, as well as at-home IOT data stores. TinyFlux has 100% coverage, tens of thousands of downloads, and no open issues.
42
+ TinyFlux is a time series version of `TinyDB <https://tinydb.readthedocs.io/en/latest/index.html>`__ that is also written in Python and has no external dependencies. It's a great companion for small analytics workflows and apps, as well as at-home IOT data stores. TinyFlux has 100% test coverage, over 50,000 downloads, and no open issues.
43
43
 
44
44
  |Build Status| |Coverage| |Version| |Downloads|
45
45
 
@@ -3,7 +3,6 @@ MANIFEST.in
3
3
  README.rst
4
4
  pyproject.toml
5
5
  setup.cfg
6
- version.txt
7
6
  tests/__init__.py
8
7
  tests/conftest.py
9
8
  tests/test_index.py
@@ -22,6 +21,7 @@ tinyflux/py.typed
22
21
  tinyflux/queries.py
23
22
  tinyflux/storages.py
24
23
  tinyflux/utils.py
24
+ tinyflux/version.py
25
25
  tinyflux.egg-info/PKG-INFO
26
26
  tinyflux.egg-info/SOURCES.txt
27
27
  tinyflux.egg-info/dependency_links.txt
@@ -1,3 +0,0 @@
1
- include LICENSE
2
- include version.txt
3
- recursive-include tests *.py
@@ -1 +0,0 @@
1
- v0.4.1
File without changes
File without changes
File without changes
File without changes