kleinkram 0.51.0.dev20251003120233__tar.gz → 0.51.0.dev20251003125418__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 kleinkram might be problematic. Click here for more details.

Files changed (57) hide show
  1. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/PKG-INFO +1 -1
  2. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/api/deser.py +13 -4
  3. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/api/routes.py +17 -13
  4. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/core.py +1 -3
  5. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/errors.py +1 -0
  6. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram.egg-info/PKG-INFO +1 -1
  7. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/setup.cfg +1 -1
  8. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/README.md +0 -0
  9. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/__init__.py +0 -0
  10. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/__main__.py +0 -0
  11. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/_version.py +0 -0
  12. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/api/__init__.py +0 -0
  13. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/api/client.py +0 -0
  14. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/api/file_transfer.py +0 -0
  15. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/api/pagination.py +0 -0
  16. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/api/query.py +0 -0
  17. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/auth.py +0 -0
  18. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/__init__.py +0 -0
  19. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/_download.py +0 -0
  20. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/_endpoint.py +0 -0
  21. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/_file.py +0 -0
  22. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/_list.py +0 -0
  23. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/_mission.py +0 -0
  24. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/_project.py +0 -0
  25. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/_upload.py +0 -0
  26. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/_verify.py +0 -0
  27. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/app.py +0 -0
  28. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/cli/error_handling.py +0 -0
  29. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/config.py +0 -0
  30. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/main.py +0 -0
  31. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/models.py +0 -0
  32. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/printing.py +0 -0
  33. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/py.typed +0 -0
  34. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/types.py +0 -0
  35. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/utils.py +0 -0
  36. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram/wrappers.py +0 -0
  37. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram.egg-info/SOURCES.txt +0 -0
  38. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram.egg-info/dependency_links.txt +0 -0
  39. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram.egg-info/entry_points.txt +0 -0
  40. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram.egg-info/requires.txt +0 -0
  41. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/kleinkram.egg-info/top_level.txt +0 -0
  42. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/pyproject.toml +0 -0
  43. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/requirements.txt +0 -0
  44. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/setup.py +0 -0
  45. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/testing/__init__.py +0 -0
  46. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/testing/backend_fixtures.py +0 -0
  47. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/__init__.py +0 -0
  48. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/conftest.py +0 -0
  49. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_config.py +0 -0
  50. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_core.py +0 -0
  51. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_end_to_end.py +0 -0
  52. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_error_handling.py +0 -0
  53. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_fixtures.py +0 -0
  54. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_printing.py +0 -0
  55. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_query.py +0 -0
  56. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_utils.py +0 -0
  57. {kleinkram-0.51.0.dev20251003120233 → kleinkram-0.51.0.dev20251003125418}/tests/test_wrappers.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kleinkram
3
- Version: 0.51.0.dev20251003120233
3
+ Version: 0.51.0.dev20251003125418
4
4
  Summary: give me your bags
5
5
  Author: Cyrill Püntener, Dominique Garmier, Johann Schwabe
6
6
  Author-email: pucyril@ethz.ch, dgarmier@ethz.ch, jschwab@ethz.ch
@@ -4,17 +4,18 @@ from datetime import datetime
4
4
  from enum import Enum
5
5
  from typing import Any
6
6
  from typing import Dict
7
+ from typing import List
7
8
  from typing import Literal
8
9
  from typing import NewType
9
10
  from typing import Tuple
10
- from typing import List
11
11
  from uuid import UUID
12
12
 
13
13
  import dateutil.parser
14
14
 
15
15
  from kleinkram.errors import ParsingError
16
- from kleinkram.models import File, MetadataValue
16
+ from kleinkram.models import File
17
17
  from kleinkram.models import FileState
18
+ from kleinkram.models import MetadataValue
18
19
  from kleinkram.models import Mission
19
20
  from kleinkram.models import Project
20
21
 
@@ -85,16 +86,22 @@ def _parse_file_state(state: str) -> FileState:
85
86
  except ValueError as e:
86
87
  raise ParsingError(f"error parsing file state: {state}") from e
87
88
 
89
+
88
90
  def _parse_metadata(tags: List[Dict]) -> Dict[str, MetadataValue]:
89
91
  result = {}
90
92
  try:
91
93
  for tag in tags:
92
- entry = {tag.get("name"): MetadataValue(tag.get("valueAsString"), tag.get("datatype"))}
94
+ entry = {
95
+ tag.get("name"): MetadataValue(
96
+ tag.get("valueAsString"), tag.get("datatype")
97
+ )
98
+ }
93
99
  result.update(entry)
94
100
  return result
95
101
  except ValueError as e:
96
102
  raise ParsingError(f"error parsing metadata: {e}") from e
97
103
 
104
+
98
105
  def _parse_required_tags(tags: List[Dict]) -> list[str]:
99
106
  return list(_parse_metadata(tags).keys())
100
107
 
@@ -106,7 +113,9 @@ def _parse_project(project_object: ProjectObject) -> Project:
106
113
  description = project_object[ProjectObjectKeys.DESCRIPTION]
107
114
  created_at = _parse_datetime(project_object[ProjectObjectKeys.CREATED_AT])
108
115
  updated_at = _parse_datetime(project_object[ProjectObjectKeys.UPDATED_AT])
109
- required_tags = _parse_required_tags(project_object[ProjectObjectKeys.REQUIRED_TAGS])
116
+ required_tags = _parse_required_tags(
117
+ project_object[ProjectObjectKeys.REQUIRED_TAGS]
118
+ )
110
119
  except Exception as e:
111
120
  raise ParsingError(f"error parsing project: {project_object}") from e
112
121
  return Project(
@@ -40,13 +40,14 @@ from kleinkram.errors import InvalidMissionQuery
40
40
  from kleinkram.errors import InvalidProjectQuery
41
41
  from kleinkram.errors import MissionExists
42
42
  from kleinkram.errors import MissionNotFound
43
+ from kleinkram.errors import MissionValidationError
43
44
  from kleinkram.errors import ProjectExists
44
45
  from kleinkram.errors import ProjectNotFound
45
- from kleinkram.errors import MissionValidationError
46
46
  from kleinkram.models import File
47
47
  from kleinkram.models import Mission
48
48
  from kleinkram.models import Project
49
- from kleinkram.utils import is_valid_uuid4, split_args
49
+ from kleinkram.utils import is_valid_uuid4
50
+ from kleinkram.utils import split_args
50
51
 
51
52
  __all__ = [
52
53
  "_get_api_version",
@@ -224,7 +225,7 @@ def _mission_name_is_available(
224
225
 
225
226
 
226
227
  def _validate_mission_name(
227
- client: AuthenticatedClient, project_id: UUID, mission_name: str
228
+ client: AuthenticatedClient, project_id: UUID, mission_name: str
228
229
  ) -> None:
229
230
  if not _mission_name_is_available(client, mission_name, project_id):
230
231
  raise MissionExists(
@@ -241,7 +242,7 @@ def _validate_mission_name(
241
242
  if mission_name.endswith(" "):
242
243
  raise ValueError(
243
244
  "A mission name cannot end with a whitespace. "
244
- f"The given mission name was \'{mission_name}\'"
245
+ f"The given mission name was '{mission_name}'"
245
246
  )
246
247
 
247
248
 
@@ -253,7 +254,10 @@ def _project_name_is_available(client: AuthenticatedClient, project_name: str) -
253
254
  return True
254
255
  return False
255
256
 
256
- def _validate_mission_created(client: AuthenticatedClient, project_id: str, mission_name: str) -> None:
257
+
258
+ def _validate_mission_created(
259
+ client: AuthenticatedClient, project_id: str, mission_name: str
260
+ ) -> None:
257
261
  """
258
262
  validate that a mission is successfully created
259
263
  """
@@ -350,20 +354,20 @@ def _create_project(
350
354
  return UUID(resp.json()["uuid"], version=4)
351
355
 
352
356
 
353
- def _validate_tag_value(
354
- tag_value, tag_datatype
355
- ) -> None:
357
+ def _validate_tag_value(tag_value, tag_datatype) -> None:
356
358
  if tag_datatype == "NUMBER":
357
359
  try:
358
360
  float(tag_value)
359
- except:
361
+ except ValueError:
360
362
  raise InvalidMissionMetadata(f"Value '{tag_value}' is not a valid NUMBER")
361
363
  elif tag_datatype == "BOOLEAN":
362
364
  if tag_value.lower() not in {"true", "false"}:
363
- raise InvalidMissionMetadata(f"Value '{tag_value}' is not a valid BOOLEAN (expected 'true' or 'false')")
365
+ raise InvalidMissionMetadata(
366
+ f"Value '{tag_value}' is not a valid BOOLEAN (expected 'true' or 'false')"
367
+ )
364
368
  else:
365
- pass # any string is fine
366
- #TODO: add check for LOCATION tag datatype
369
+ pass # any string is fine
370
+ # TODO: add check for LOCATION tag datatype
367
371
 
368
372
 
369
373
  def _get_metadata_type_id_by_name(
@@ -376,7 +380,7 @@ def _get_metadata_type_id_by_name(
376
380
 
377
381
  resp.raise_for_status()
378
382
  try:
379
- data = resp.json()['data'][0]
383
+ data = resp.json()["data"][0]
380
384
  except IndexError:
381
385
  return None, None
382
386
 
@@ -107,9 +107,7 @@ def upload(
107
107
 
108
108
  if create and mission is None:
109
109
  # check if project exists and get its id at the same time
110
- project = kleinkram.api.routes.get_project(
111
- client, query=query.project_query
112
- )
110
+ project = kleinkram.api.routes.get_project(client, query=query.project_query)
113
111
  project_id = project.id
114
112
  project_required_tags = project.required_tags
115
113
  mission_name = check_mission_query_is_creatable(query)
@@ -45,6 +45,7 @@ class FileNameNotSupported(Exception): ...
45
45
 
46
46
  class InvalidMissionMetadata(Exception): ...
47
47
 
48
+
48
49
  class MissionValidationError(Exception): ...
49
50
 
50
51
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kleinkram
3
- Version: 0.51.0.dev20251003120233
3
+ Version: 0.51.0.dev20251003125418
4
4
  Summary: give me your bags
5
5
  Author: Cyrill Püntener, Dominique Garmier, Johann Schwabe
6
6
  Author-email: pucyril@ethz.ch, dgarmier@ethz.ch, jschwab@ethz.ch
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = kleinkram
3
- version = 0.51.0-dev20251003120233
3
+ version = 0.51.0-dev20251003125418
4
4
  description = give me your bags
5
5
  long_description = file: README.md
6
6
  long_description_content_type = text/markdown