autonomous-app 0.3.1__tar.gz → 0.3.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.
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/PKG-INFO +1 -1
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/__init__.py +1 -1
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/model/autoattr.py +1 -1
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/model/automodel.py +8 -1
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/storage/imagestorage.py +49 -8
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous_app.egg-info/PKG-INFO +1 -1
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/LICENSE +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/README.md +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/pyproject.toml +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/requirements.txt +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/setup.cfg +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/setup.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/ai/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/ai/audioagent.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/ai/imageagent.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/ai/jsonagent.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/ai/models/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/ai/models/openai.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/ai/oaiagent.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/ai/textagent.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/apis/version_control/GHCallbacks.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/apis/version_control/GHOrganization.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/apis/version_control/GHRepo.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/apis/version_control/GHVersionControl.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/apis/version_control/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/auth/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/auth/autoauth.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/auth/github.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/auth/google.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/auth/user.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/cli.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/base/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/base/common.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/base/datastructures.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/base/document.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/base/fields.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/base/metaclasses.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/base/utils.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/common.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/connection.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/context_managers.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/dereference.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/document.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/errors.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/fields.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/mongodb_support.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/pymongo_support.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/queryset/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/queryset/base.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/queryset/field_list.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/queryset/manager.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/queryset/queryset.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/queryset/transform.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/queryset/visitor.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/db/signals.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/logger.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/model/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/storage/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/storage/localstorage.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/tasks/__init__.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/tasks/autotask.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/utils/markdown.py +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous_app.egg-info/SOURCES.txt +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous_app.egg-info/dependency_links.txt +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous_app.egg-info/requires.txt +0 -0
- {autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous_app.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: autonomous-app
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Containerized application framework built on Flask with additional libraries and tools for rapid development of web applications.
|
|
5
5
|
Author-email: Steven A Moore <samoore@binghamton.edu>
|
|
6
6
|
License: MIT License
|
|
@@ -103,7 +103,7 @@ class DictAttr(DictField):
|
|
|
103
103
|
def __get__(self, instance, owner):
|
|
104
104
|
# log(instance, owner)
|
|
105
105
|
results = super().__get__(instance, owner) or {}
|
|
106
|
-
log(self.name, self.field, owner, results)
|
|
106
|
+
# log(self.name, self.field, owner, results)
|
|
107
107
|
for key, lazy_obj in results.items():
|
|
108
108
|
try:
|
|
109
109
|
if hasattr(lazy_obj, "fetch"):
|
|
@@ -137,7 +137,14 @@ class AutoModel(Document):
|
|
|
137
137
|
Returns:
|
|
138
138
|
list: A list of AutoModel instances that match the search criteria.
|
|
139
139
|
"""
|
|
140
|
-
|
|
140
|
+
new_kwargs = {}
|
|
141
|
+
for k, v in kwargs.items():
|
|
142
|
+
if isinstance(v, str):
|
|
143
|
+
new_k = f"{k}__icontains"
|
|
144
|
+
new_kwargs[new_k] = v
|
|
145
|
+
else:
|
|
146
|
+
new_kwargs[k] = v
|
|
147
|
+
results = cls.objects(**new_kwargs)
|
|
141
148
|
if _order_by:
|
|
142
149
|
results = results.order_by(*_order_by)
|
|
143
150
|
if _limit:
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import glob
|
|
1
2
|
import io
|
|
2
3
|
import os
|
|
3
4
|
import shutil
|
|
@@ -14,6 +15,12 @@ class ImageStorage:
|
|
|
14
15
|
def __init__(self, path="static/images"):
|
|
15
16
|
self.base_path = path
|
|
16
17
|
|
|
18
|
+
def scan_storage(self, path=None):
|
|
19
|
+
for root, dirs, files in os.walk(path or self.base_path):
|
|
20
|
+
for file in files:
|
|
21
|
+
if file == "orig.webp":
|
|
22
|
+
yield os.path.join(root, file)
|
|
23
|
+
|
|
17
24
|
@classmethod
|
|
18
25
|
def _get_key(cls, folder="", pkey=None):
|
|
19
26
|
if folder and not folder.endswith("/"):
|
|
@@ -68,10 +75,10 @@ class ImageStorage:
|
|
|
68
75
|
if not asset_id:
|
|
69
76
|
return ""
|
|
70
77
|
original_path = f"{self.get_path(asset_id)}"
|
|
71
|
-
# log(f"Getting image: {asset_id}
|
|
78
|
+
# log(f"Getting image: {asset_id}", original_path)
|
|
72
79
|
if not os.path.exists(original_path):
|
|
73
80
|
log(f"Original image not found: {original_path}")
|
|
74
|
-
return
|
|
81
|
+
return None
|
|
75
82
|
file_path = f"{original_path}/{size}.webp"
|
|
76
83
|
# log(file_path)
|
|
77
84
|
result_url = f"/{file_path}"
|
|
@@ -104,10 +111,7 @@ class ImageStorage:
|
|
|
104
111
|
|
|
105
112
|
def get_path(self, asset_id):
|
|
106
113
|
if asset_id:
|
|
107
|
-
|
|
108
|
-
if asset_path.endswith("/"):
|
|
109
|
-
asset_path = asset_path[:-1]
|
|
110
|
-
return os.path.join(self.base_path, f"{asset_path}")
|
|
114
|
+
return os.path.join(self.base_path, f"{asset_id}")
|
|
111
115
|
else:
|
|
112
116
|
return self.base_path
|
|
113
117
|
|
|
@@ -124,8 +128,45 @@ class ImageStorage:
|
|
|
124
128
|
return imgs
|
|
125
129
|
|
|
126
130
|
def remove(self, asset_id):
|
|
131
|
+
if not asset_id:
|
|
132
|
+
return False
|
|
133
|
+
file_path = self.get_path(asset_id)
|
|
134
|
+
if os.path.isdir(file_path):
|
|
135
|
+
print(f"Removing {file_path}")
|
|
136
|
+
# return shutil.rmtree(file_path, ignore_errors=True)
|
|
137
|
+
return False
|
|
138
|
+
|
|
139
|
+
def clear_cached(self, asset_id):
|
|
127
140
|
file_path = self.get_path(asset_id)
|
|
128
141
|
if os.path.isdir(file_path):
|
|
129
|
-
|
|
130
|
-
|
|
142
|
+
for file in glob.glob(os.path.join(file_path, "*")):
|
|
143
|
+
if os.path.basename(file) != "orig.webp":
|
|
144
|
+
os.remove(file)
|
|
145
|
+
return False
|
|
146
|
+
|
|
147
|
+
def rotate(self, asset_id, amount=-90):
|
|
148
|
+
file_path = self.get_path(asset_id)
|
|
149
|
+
log(asset_id)
|
|
150
|
+
with Image.open(f"{file_path}/orig.webp") as img:
|
|
151
|
+
# Rotate the image 90 degrees
|
|
152
|
+
rotated_img = img.rotate(amount, expand=True)
|
|
153
|
+
# Save the rotated image
|
|
154
|
+
log(img, rotated_img)
|
|
155
|
+
# img = img.copy()
|
|
156
|
+
# img_byte_arr = io.BytesIO()
|
|
157
|
+
# img.save(img_byte_arr, )
|
|
158
|
+
self.clear_cached(asset_id)
|
|
159
|
+
rotated_img.save(f"{file_path}/orig.webp", format="WEBP")
|
|
160
|
+
return False
|
|
161
|
+
|
|
162
|
+
def flip(self, asset_id, flipx=True, flipy=True):
|
|
163
|
+
file_path = self.get_path(asset_id)
|
|
164
|
+
with Image.open(f"{file_path}/orig.webp") as img:
|
|
165
|
+
if flipx:
|
|
166
|
+
rotated_img = img.transpose(Image.FLIP_LEFT_RIGHT)
|
|
167
|
+
if flipy:
|
|
168
|
+
rotated_img = img.transpose(Image.FLIP_TOP_BOTTOM)
|
|
169
|
+
# Save the rotated image
|
|
170
|
+
rotated_img.save(f"{file_path}/orig.webp", format="WEBP")
|
|
171
|
+
self.clear_cached(asset_id)
|
|
131
172
|
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: autonomous-app
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Containerized application framework built on Flask with additional libraries and tools for rapid development of web applications.
|
|
5
5
|
Author-email: Steven A Moore <samoore@binghamton.edu>
|
|
6
6
|
License: MIT License
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/apis/version_control/GHCallbacks.py
RENAMED
|
File without changes
|
{autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/apis/version_control/GHOrganization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous/apis/version_control/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{autonomous_app-0.3.1 → autonomous_app-0.3.2}/src/autonomous_app.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|