bluer-objects 6.292.1__py3-none-any.whl → 6.299.1__py3-none-any.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 bluer-objects might be problematic. Click here for more details.

@@ -1,5 +1,8 @@
1
+ import os
1
2
  from typing import Union
2
3
 
4
+ from bluer_objects.env import abcli_path_git
5
+
3
6
  github_kamangir = "https://github.com/kamangir"
4
7
  designs_repo = f"{github_kamangir}/bluer-designs/"
5
8
 
@@ -8,19 +11,29 @@ def designs_url(suffix: str) -> str:
8
11
  return f"{designs_repo}/blob/main/{suffix}"
9
12
 
10
13
 
11
- def asset_volume(volume: Union[str, int] = "") -> str:
12
- return f"{github_kamangir}/assets{str(volume)}/raw/main"
14
+ def assets_url(
15
+ suffix: str = "",
16
+ volume: Union[str, int] = "",
17
+ ) -> str:
18
+ return "{}/assets{}/raw/main{}".format(
19
+ github_kamangir,
20
+ str(volume),
21
+ f"/{suffix}" if suffix else "",
22
+ )
13
23
 
14
24
 
15
- assets = asset_volume(volume="")
16
- assets2 = asset_volume(volume="2")
25
+ assets = assets_url(volume="")
26
+ assets2 = assets_url(volume="2")
17
27
 
18
28
 
19
29
  def assets_path(
20
- suffix: str,
30
+ suffix: str = "",
21
31
  volume: Union[str, int] = "",
22
32
  ) -> str:
23
- return "{}/{}".format(
24
- asset_volume(volume=volume),
25
- suffix,
33
+ return os.path.join(
34
+ abcli_path_git,
35
+ "assets{}{}".format(
36
+ str(volume),
37
+ f"/{suffix}" if suffix else "",
38
+ ),
26
39
  )
@@ -59,3 +59,36 @@ def Items(
59
59
  output = sorted(output)
60
60
 
61
61
  return output
62
+
63
+
64
+ # dict of {name, url, marquee, description}
65
+ def Items_of_dict(
66
+ dict_of_things: Dict[str, Dict],
67
+ ) -> List[str]:
68
+ return Items(
69
+ sorted(
70
+ [
71
+ {
72
+ "name": thing_name,
73
+ "marquee": info.get("marquee", ""),
74
+ "url": f"./{thing_name}.md",
75
+ }
76
+ for thing_name, info in dict_of_things.items()
77
+ if thing_name != "template"
78
+ ],
79
+ key=lambda x: x["name"],
80
+ )
81
+ )
82
+
83
+
84
+ # dict of {name, url, marquee, description}
85
+ def list_of_dict(
86
+ dict_of_things: Dict[str, Dict],
87
+ ) -> List[str]:
88
+ return sorted(
89
+ [
90
+ f"- [{thing_name}](./{thing_name}.md)"
91
+ for thing_name in dict_of_things
92
+ if thing_name != "template"
93
+ ]
94
+ )
bluer_objects/__init__.py CHANGED
@@ -4,7 +4,7 @@ ICON = "🌀"
4
4
 
5
5
  DESCRIPTION = f"{ICON} Object management in Bash."
6
6
 
7
- VERSION = "6.292.1"
7
+ VERSION = "6.299.1"
8
8
 
9
9
  REPO_NAME = "bluer-objects"
10
10
 
@@ -1,9 +1,12 @@
1
1
  import pytest
2
+
3
+ from bluer_objects.env import abcli_path_git
2
4
  from bluer_objects.README.consts import (
3
5
  assets_path,
4
- asset_volume,
6
+ assets_url,
5
7
  designs_repo,
6
8
  designs_url,
9
+ github_kamangir,
7
10
  )
8
11
 
9
12
 
@@ -26,18 +29,31 @@ def test_README_assets(
26
29
  suffix: str,
27
30
  volume: str,
28
31
  ):
29
- volume_path = asset_volume(volume=volume)
30
- assert isinstance(volume_path, str)
31
- assert volume_path.endswith(volume_path)
32
+ volume_url = assets_url(volume=volume)
33
+ assert isinstance(volume_url, str)
34
+ assert volume_url.startswith(github_kamangir)
35
+
36
+ # ---
37
+
38
+ suffix_url = assets_url(
39
+ suffix=suffix,
40
+ volume=volume,
41
+ )
42
+
43
+ assert isinstance(suffix_url, str)
44
+ assert suffix_url.endswith(suffix)
45
+ assert volume_url in suffix_url
46
+
47
+ # ---
32
48
 
33
- path = assets_path(
49
+ suffix_path = assets_path(
34
50
  suffix=suffix,
35
51
  volume=volume,
36
52
  )
37
53
 
38
- assert isinstance(path, str)
39
- assert path.endswith(suffix)
40
- assert volume_path in path
54
+ assert isinstance(suffix_url, str)
55
+ assert suffix_path.endswith(suffix)
56
+ assert abcli_path_git in suffix_path
41
57
 
42
58
 
43
59
  @pytest.mark.parametrize(
@@ -0,0 +1,120 @@
1
+ from bluer_objects.README.items import ImageItems, Items, Items_of_dict, list_of_dict
2
+ from bluer_objects.README.consts import assets, assets2
3
+ from bluer_objects import markdown
4
+ from bluer_objects import env
5
+
6
+ dict_of_validations = dict_of_validations = {
7
+ "village-1": {
8
+ "ugv_name": "arzhang",
9
+ "items": ImageItems(
10
+ {
11
+ f"{assets2}/arzhang/20250905_120526.jpg": "",
12
+ f"{assets2}/arzhang/20250905_120808.jpg": "",
13
+ f"{assets2}/arzhang/20250905_121030.jpg": "",
14
+ f"{assets2}/arzhang/20250905_121032.jpg": "",
15
+ f"{assets2}/arzhang/20250905_121702.jpg": "",
16
+ f"{assets2}/arzhang/20250905_121711.jpg": "",
17
+ }
18
+ ),
19
+ "marquee": f"{assets}/2025-09-05-11-48-27-d56azo/VID-20250905-WA0014_1.gif",
20
+ },
21
+ "village-2": {
22
+ "ugv_name": "arzhang",
23
+ "items": ImageItems(
24
+ {
25
+ f"{assets2}/arzhang/20250922_094548.jpg": "",
26
+ f"{assets2}/arzhang/20250922_101156.jpg": "",
27
+ f"{assets2}/arzhang/20250922_101409.jpg": "",
28
+ f"{assets2}/arzhang/20250922_101557.jpg": "",
29
+ f"{assets2}/arzhang/20250922_101653.jpg": "",
30
+ f"{assets2}/arzhang/20250922_102822.jpg": "",
31
+ }
32
+ ),
33
+ "macros": {
34
+ "debug_objects": markdown.generate_table(
35
+ Items(
36
+ [
37
+ {
38
+ "name": object_name,
39
+ "url": "https://{}.{}/{}".format(
40
+ env.S3_PUBLIC_STORAGE_BUCKET,
41
+ env.S3_STORAGE_ENDPOINT_URL.split("https://", 1)[1],
42
+ f"{object_name}.tar.gz",
43
+ ),
44
+ "marquee": f"{assets}/{object_name}/{object_name}.gif",
45
+ }
46
+ for object_name in [
47
+ "swallow-debug-2025-09-22-09-47-32-85hag3",
48
+ "swallow-debug-2025-09-22-09-59-29-emj29v",
49
+ "swallow-debug-2025-09-22-10-01-01-uzray6",
50
+ "swallow-debug-2025-09-22-10-06-19-hcyl1v",
51
+ "swallow-debug-2025-09-22-10-09-44-z6q9kn",
52
+ "swallow-debug-2025-09-22-10-19-35-mobajm",
53
+ ]
54
+ ]
55
+ ),
56
+ cols=3,
57
+ log=False,
58
+ ),
59
+ },
60
+ "marquee": f"{assets}/arzhang/20250922_101202_1.gif",
61
+ },
62
+ }
63
+
64
+
65
+ def test_ImageItems():
66
+ items = ImageItems(
67
+ {
68
+ f"{assets2}/swallow/20250701_2206342_1.gif": "",
69
+ f"{assets2}/swallow/20250913_203635~2_1.gif": "",
70
+ }
71
+ )
72
+
73
+ assert isinstance(items, list)
74
+ for item in items:
75
+ assert isinstance(item, str)
76
+
77
+
78
+ def test_Items():
79
+ items = Items(
80
+ [
81
+ {
82
+ "name": "yolo",
83
+ "description": "a yolo interface.",
84
+ "marquee": "https://github.com/kamangir/assets/raw/main/swallow-debug-2025-09-16-19-53-19-4yzsp8/swallow-debug-2025-09-16-19-53-19-4yzsp8-2.gif?raw=true",
85
+ "url": "./bluer_algo/docs/yolo",
86
+ },
87
+ {
88
+ "name": "tracker",
89
+ "marquee": "https://github.com/kamangir/assets/raw/main/tracker-camshift-2025-07-16-11-07-52-4u3nu4/tracker.gif?raw=true",
90
+ "description": "a visual tracker.",
91
+ "url": "./bluer_algo/docs/tracker",
92
+ },
93
+ {
94
+ "name": "image classifier",
95
+ "marquee": "https://github.com/kamangir/assets/raw/main/swallow-model-2025-07-11-15-04-03-2glcch/evaluation.png?raw=true",
96
+ "description": "an image classifier.",
97
+ "url": "./bluer_algo/docs/image_classifier",
98
+ },
99
+ ]
100
+ )
101
+
102
+ assert isinstance(items, list)
103
+ for item in items:
104
+ assert isinstance(item, str)
105
+
106
+
107
+ def test_Items_of_dict():
108
+ items = Items_of_dict(dict_of_validations)
109
+
110
+ assert isinstance(items, list)
111
+ for item in items:
112
+ assert isinstance(item, str)
113
+
114
+
115
+ def test_list_of_dict():
116
+ items = list_of_dict(dict_of_validations)
117
+
118
+ assert isinstance(items, list)
119
+ for item in items:
120
+ assert isinstance(item, str)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.292.1
3
+ Version: 6.299.1
4
4
  Summary: 🌀 Object management in Bash.
5
5
  Home-page: https://github.com/kamangir/bluer-objects
6
6
  Author: Arash Abadpour (Kamangir)
@@ -65,6 +65,6 @@ pip install bluer-objects
65
65
 
66
66
  [![pylint](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-objects.svg)](https://pypi.org/project/bluer-objects/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/bluer-objects)](https://pypistats.org/packages/bluer-objects)
67
67
 
68
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.292.1`](https://github.com/kamangir/bluer-objects).
68
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.299.1`](https://github.com/kamangir/bluer-objects).
69
69
 
70
70
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -1,4 +1,4 @@
1
- bluer_objects/__init__.py,sha256=-GIdP2jG8Ggl4MNlq7WUPFuSCo-pd19UXGan7aEC9hg,315
1
+ bluer_objects/__init__.py,sha256=sqJ1EoYw9xYt3IVvH_jIOJzCZ4UOdyXpiyZL7AVSWS8,315
2
2
  bluer_objects/__main__.py,sha256=Yqfov833_hJuRne19WrGhT5DWAPtdffpoMxeSXS7EGw,359
3
3
  bluer_objects/config.env,sha256=ReX0OSH_dK2tdD4-zAlp-427BB57yw8uDTS6tLYN4K0,270
4
4
  bluer_objects/env.py,sha256=ecwldUVsamxAjOI0a6PmbZPcyhdUZgzJ-nhAPh0CJRo,2085
@@ -74,9 +74,9 @@ bluer_objects/.abcli/tests/web_where_am_ai.sh,sha256=BJ9G_m4id8cx_UB_l_jV2xY6AfQ
74
74
  bluer_objects/.abcli/web/is_accessible.sh,sha256=Luv_6IvpscRYx7f39V0RnkkNEWTRfVGyQVUeij3iqa0,262
75
75
  bluer_objects/.abcli/web/where_am_i.sh,sha256=QPBXFo6Ni4pZEoOx0rtuJUxk6tOlp0ESMyAc9YPy9zg,92
76
76
  bluer_objects/README/__init__.py,sha256=AG9_REFcYVrfMbzK4y02Omie-fCjf6UBP4OnJyNSZ6w,1434
77
- bluer_objects/README/consts.py,sha256=pJgOJTXHSCh95Lcyl4AyG4t2l1eEp5dAO1hjosv9YMo,566
77
+ bluer_objects/README/consts.py,sha256=GYQ8EikslsUfr8JcrXoU0w4eMIGWpIiNmlchTQbSYV0,803
78
78
  bluer_objects/README/functions.py,sha256=PvFawBlJ8IginQn8Kk1QewAyOYRQ4wCuRKpJwr5mUJ8,5844
79
- bluer_objects/README/items.py,sha256=go4BpNhpdjiRIHf6EHDR5x9YlnboIgkvg7KvCt5rbVU,1508
79
+ bluer_objects/README/items.py,sha256=yWMGI_znoYaF2wQRC9Qn96ybtn-OzN5yOzxKoVL73Xc,2328
80
80
  bluer_objects/README/utils.py,sha256=WsEm0ad-gpMGMJ6X11W2nXYY5fBokOGPGNFvzjYZc5o,8241
81
81
  bluer_objects/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  bluer_objects/assets/__main__.py,sha256=X1s4ABevs8y5pafPIhZBj5oFX_kMOLWLTMaCFF6_Rio,1064
@@ -148,7 +148,8 @@ bluer_objects/testing/__main__.py,sha256=hhJV9qn0V_8FxzNDcoHCHr4A7zf9UudnNGJCAPk
148
148
  bluer_objects/testing/functions.py,sha256=AXAfzWLcEPkbSYTehdahshjKJ45C4IJkRs_TgrHOntc,1355
149
149
  bluer_objects/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
150
  bluer_objects/tests/test_README.py,sha256=5D4UV8VcjbeAPThsYVynYtVFuP8gwMAhIjEWuOQZsWs,89
151
- bluer_objects/tests/test_README_consts.py,sha256=bkPsl1g2k-Zcs9oZSlYmRIZraU4X_ZHUsOYoruUhj1Q,975
151
+ bluer_objects/tests/test_README_consts.py,sha256=fBDNjmPrQN0WhF0AtrTVRcEDQMW02MfLFQPgI3U2PcI,1290
152
+ bluer_objects/tests/test_README_items.py,sha256=K_tRZcifZUpV5WqWaf10mYG2Wi1FouMHQGXtCQxYYkk,4382
152
153
  bluer_objects/tests/test_env.py,sha256=HgVCbnHGLIXK8GiaWNWORW9nAHs7fqvIoo6S5Jj29-g,1132
153
154
  bluer_objects/tests/test_file_download.py,sha256=1_adHYqgSifkdP-I7TQVW0t8MLCujQ61fvRbcrSkcmg,512
154
155
  bluer_objects/tests/test_file_load_save.py,sha256=unqxfiqba6RVhMS95AtHZWsT7Q097jBOKdckAT9PyFU,2390
@@ -181,8 +182,8 @@ bluer_objects/tests/test_web_is_accessible.py,sha256=2Y20NAEDMblg0MKnhnqcfw3XVKE
181
182
  bluer_objects/web/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
182
183
  bluer_objects/web/__main__.py,sha256=xf2Ob54FI8JEokfGhFmiyOBdD9nBactwqmZvsKsdioU,624
183
184
  bluer_objects/web/functions.py,sha256=KNufAFOc6N3BYf83lN2rUpKUdsnzb2anWyp9koFRVUo,172
184
- bluer_objects-6.292.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
185
- bluer_objects-6.292.1.dist-info/METADATA,sha256=Csb3DeU3bKYrafXdeDaS1W6sk-sQpS5dnOiuVarb1Ns,3780
186
- bluer_objects-6.292.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
187
- bluer_objects-6.292.1.dist-info/top_level.txt,sha256=RX2TpddbnRkurda3G_pAdyeTztP2IhhRPx949GlEvQo,14
188
- bluer_objects-6.292.1.dist-info/RECORD,,
185
+ bluer_objects-6.299.1.dist-info/licenses/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
186
+ bluer_objects-6.299.1.dist-info/METADATA,sha256=TDGDtXKcNnE_7CgTtPdYTSM5FYJDLOcX_ieOs6m7XKY,3780
187
+ bluer_objects-6.299.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
188
+ bluer_objects-6.299.1.dist-info/top_level.txt,sha256=RX2TpddbnRkurda3G_pAdyeTztP2IhhRPx949GlEvQo,14
189
+ bluer_objects-6.299.1.dist-info/RECORD,,