createsonline 0.1.26__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.
- createsonline/__init__.py +46 -0
- createsonline/admin/__init__.py +7 -0
- createsonline/admin/content.py +526 -0
- createsonline/admin/crud.py +805 -0
- createsonline/admin/field_builder.py +559 -0
- createsonline/admin/integration.py +482 -0
- createsonline/admin/interface.py +2562 -0
- createsonline/admin/model_creator.py +513 -0
- createsonline/admin/model_manager.py +388 -0
- createsonline/admin/modern_dashboard.py +498 -0
- createsonline/admin/permissions.py +264 -0
- createsonline/admin/user_forms.py +594 -0
- createsonline/ai/__init__.py +202 -0
- createsonline/ai/fields.py +1226 -0
- createsonline/ai/orm.py +325 -0
- createsonline/ai/services.py +1244 -0
- createsonline/app.py +506 -0
- createsonline/auth/__init__.py +8 -0
- createsonline/auth/management.py +228 -0
- createsonline/auth/models.py +552 -0
- createsonline/cli/__init__.py +5 -0
- createsonline/cli/commands/__init__.py +122 -0
- createsonline/cli/commands/database.py +416 -0
- createsonline/cli/commands/info.py +173 -0
- createsonline/cli/commands/initdb.py +218 -0
- createsonline/cli/commands/project.py +545 -0
- createsonline/cli/commands/serve.py +173 -0
- createsonline/cli/commands/shell.py +93 -0
- createsonline/cli/commands/users.py +148 -0
- createsonline/cli/main.py +2041 -0
- createsonline/cli/manage.py +274 -0
- createsonline/config/__init__.py +9 -0
- createsonline/config/app.py +2577 -0
- createsonline/config/database.py +179 -0
- createsonline/config/docs.py +384 -0
- createsonline/config/errors.py +160 -0
- createsonline/config/orm.py +43 -0
- createsonline/config/request.py +93 -0
- createsonline/config/settings.py +176 -0
- createsonline/data/__init__.py +23 -0
- createsonline/data/dataframe.py +925 -0
- createsonline/data/io.py +453 -0
- createsonline/data/series.py +557 -0
- createsonline/database/__init__.py +60 -0
- createsonline/database/abstraction.py +440 -0
- createsonline/database/assistant.py +585 -0
- createsonline/database/fields.py +442 -0
- createsonline/database/migrations.py +132 -0
- createsonline/database/models.py +604 -0
- createsonline/database.py +438 -0
- createsonline/http/__init__.py +28 -0
- createsonline/http/client.py +535 -0
- createsonline/ml/__init__.py +55 -0
- createsonline/ml/classification.py +552 -0
- createsonline/ml/clustering.py +680 -0
- createsonline/ml/metrics.py +542 -0
- createsonline/ml/neural.py +560 -0
- createsonline/ml/preprocessing.py +784 -0
- createsonline/ml/regression.py +501 -0
- createsonline/performance/__init__.py +19 -0
- createsonline/performance/cache.py +444 -0
- createsonline/performance/compression.py +335 -0
- createsonline/performance/core.py +419 -0
- createsonline/project_init.py +789 -0
- createsonline/routing.py +528 -0
- createsonline/security/__init__.py +34 -0
- createsonline/security/core.py +811 -0
- createsonline/security/encryption.py +349 -0
- createsonline/server.py +295 -0
- createsonline/static/css/admin.css +263 -0
- createsonline/static/css/common.css +358 -0
- createsonline/static/css/dashboard.css +89 -0
- createsonline/static/favicon.ico +0 -0
- createsonline/static/icons/icon-128x128.png +0 -0
- createsonline/static/icons/icon-128x128.webp +0 -0
- createsonline/static/icons/icon-16x16.png +0 -0
- createsonline/static/icons/icon-16x16.webp +0 -0
- createsonline/static/icons/icon-180x180.png +0 -0
- createsonline/static/icons/icon-180x180.webp +0 -0
- createsonline/static/icons/icon-192x192.png +0 -0
- createsonline/static/icons/icon-192x192.webp +0 -0
- createsonline/static/icons/icon-256x256.png +0 -0
- createsonline/static/icons/icon-256x256.webp +0 -0
- createsonline/static/icons/icon-32x32.png +0 -0
- createsonline/static/icons/icon-32x32.webp +0 -0
- createsonline/static/icons/icon-384x384.png +0 -0
- createsonline/static/icons/icon-384x384.webp +0 -0
- createsonline/static/icons/icon-48x48.png +0 -0
- createsonline/static/icons/icon-48x48.webp +0 -0
- createsonline/static/icons/icon-512x512.png +0 -0
- createsonline/static/icons/icon-512x512.webp +0 -0
- createsonline/static/icons/icon-64x64.png +0 -0
- createsonline/static/icons/icon-64x64.webp +0 -0
- createsonline/static/image/android-chrome-192x192.png +0 -0
- createsonline/static/image/android-chrome-512x512.png +0 -0
- createsonline/static/image/apple-touch-icon.png +0 -0
- createsonline/static/image/favicon-16x16.png +0 -0
- createsonline/static/image/favicon-32x32.png +0 -0
- createsonline/static/image/favicon.ico +0 -0
- createsonline/static/image/favicon.svg +17 -0
- createsonline/static/image/icon-128x128.png +0 -0
- createsonline/static/image/icon-128x128.webp +0 -0
- createsonline/static/image/icon-16x16.png +0 -0
- createsonline/static/image/icon-16x16.webp +0 -0
- createsonline/static/image/icon-180x180.png +0 -0
- createsonline/static/image/icon-180x180.webp +0 -0
- createsonline/static/image/icon-192x192.png +0 -0
- createsonline/static/image/icon-192x192.webp +0 -0
- createsonline/static/image/icon-256x256.png +0 -0
- createsonline/static/image/icon-256x256.webp +0 -0
- createsonline/static/image/icon-32x32.png +0 -0
- createsonline/static/image/icon-32x32.webp +0 -0
- createsonline/static/image/icon-384x384.png +0 -0
- createsonline/static/image/icon-384x384.webp +0 -0
- createsonline/static/image/icon-48x48.png +0 -0
- createsonline/static/image/icon-48x48.webp +0 -0
- createsonline/static/image/icon-512x512.png +0 -0
- createsonline/static/image/icon-512x512.webp +0 -0
- createsonline/static/image/icon-64x64.png +0 -0
- createsonline/static/image/icon-64x64.webp +0 -0
- createsonline/static/image/logo-header-h100.png +0 -0
- createsonline/static/image/logo-header-h100.webp +0 -0
- createsonline/static/image/logo-header-h200@2x.png +0 -0
- createsonline/static/image/logo-header-h200@2x.webp +0 -0
- createsonline/static/image/logo.png +0 -0
- createsonline/static/js/admin.js +274 -0
- createsonline/static/site.webmanifest +35 -0
- createsonline/static/templates/admin/base.html +87 -0
- createsonline/static/templates/admin/dashboard.html +217 -0
- createsonline/static/templates/admin/model_form.html +270 -0
- createsonline/static/templates/admin/model_list.html +202 -0
- createsonline/static/test_script.js +15 -0
- createsonline/static/test_styles.css +59 -0
- createsonline/static_files.py +365 -0
- createsonline/templates/404.html +100 -0
- createsonline/templates/admin_login.html +169 -0
- createsonline/templates/base.html +102 -0
- createsonline/templates/index.html +151 -0
- createsonline/templates.py +205 -0
- createsonline/testing.py +322 -0
- createsonline/utils.py +448 -0
- createsonline/validation/__init__.py +49 -0
- createsonline/validation/fields.py +598 -0
- createsonline/validation/models.py +504 -0
- createsonline/validation/validators.py +561 -0
- createsonline/views.py +184 -0
- createsonline-0.1.26.dist-info/METADATA +46 -0
- createsonline-0.1.26.dist-info/RECORD +152 -0
- createsonline-0.1.26.dist-info/WHEEL +5 -0
- createsonline-0.1.26.dist-info/entry_points.txt +2 -0
- createsonline-0.1.26.dist-info/licenses/LICENSE +21 -0
- createsonline-0.1.26.dist-info/top_level.txt +1 -0
createsonline/views.py
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# createsonline/views.py
|
|
2
|
+
"""
|
|
3
|
+
CREATESONLINE Views Module
|
|
4
|
+
|
|
5
|
+
Base view functions and utilities.
|
|
6
|
+
Users can import and extend these, or create their own views.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
from typing import Dict, Any, Optional, Callable
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
import json
|
|
13
|
+
from . import __version__
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger("createsonline.views")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class BaseView:
|
|
19
|
+
"""Base class for class-based views"""
|
|
20
|
+
|
|
21
|
+
async def dispatch(self, request: Dict[str, Any]):
|
|
22
|
+
"""Dispatch request to appropriate method handler"""
|
|
23
|
+
method = request.get('method', 'GET').lower()
|
|
24
|
+
handler = getattr(self, method, self.http_method_not_allowed)
|
|
25
|
+
|
|
26
|
+
if callable(handler):
|
|
27
|
+
return await handler(request)
|
|
28
|
+
return await self.http_method_not_allowed(request)
|
|
29
|
+
|
|
30
|
+
async def http_method_not_allowed(self, request: Dict[str, Any]):
|
|
31
|
+
"""Return 405 Method Not Allowed"""
|
|
32
|
+
return {
|
|
33
|
+
"error": "Method not allowed",
|
|
34
|
+
"allowed_methods": self.allowed_methods()
|
|
35
|
+
}, 405
|
|
36
|
+
|
|
37
|
+
def allowed_methods(self):
|
|
38
|
+
"""Return list of allowed HTTP methods"""
|
|
39
|
+
methods = []
|
|
40
|
+
for method in ['get', 'post', 'put', 'patch', 'delete', 'head', 'options']:
|
|
41
|
+
if hasattr(self, method) and callable(getattr(self, method)):
|
|
42
|
+
methods.append(method.upper())
|
|
43
|
+
return methods
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class TemplateView(BaseView):
|
|
47
|
+
"""View that renders a template"""
|
|
48
|
+
|
|
49
|
+
template_name: str = None
|
|
50
|
+
|
|
51
|
+
def __init__(self, template_name: str = None):
|
|
52
|
+
if template_name:
|
|
53
|
+
self.template_name = template_name
|
|
54
|
+
|
|
55
|
+
async def get_context_data(self, request: Dict[str, Any]) -> Dict[str, Any]:
|
|
56
|
+
"""Override this to provide template context"""
|
|
57
|
+
return {}
|
|
58
|
+
|
|
59
|
+
async def get(self, request: Dict[str, Any]):
|
|
60
|
+
"""Handle GET request - render template"""
|
|
61
|
+
if not self.template_name:
|
|
62
|
+
return {"error": "template_name not set"}, 500
|
|
63
|
+
|
|
64
|
+
context = await self.get_context_data(request)
|
|
65
|
+
# This will be handled by the template system
|
|
66
|
+
return {"template": self.template_name, "context": context}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class JSONView(BaseView):
|
|
70
|
+
"""View that returns JSON data"""
|
|
71
|
+
|
|
72
|
+
async def get_data(self, request: Dict[str, Any]) -> Dict[str, Any]:
|
|
73
|
+
"""Override this to provide JSON data"""
|
|
74
|
+
return {}
|
|
75
|
+
|
|
76
|
+
async def get(self, request: Dict[str, Any]):
|
|
77
|
+
"""Handle GET request - return JSON"""
|
|
78
|
+
data = await self.get_data(request)
|
|
79
|
+
return data
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class ListView(JSONView):
|
|
83
|
+
"""View that returns a list of items"""
|
|
84
|
+
|
|
85
|
+
async def get_queryset(self, request: Dict[str, Any]) -> list:
|
|
86
|
+
"""Override this to provide the list of items"""
|
|
87
|
+
return []
|
|
88
|
+
|
|
89
|
+
async def get_data(self, request: Dict[str, Any]) -> Dict[str, Any]:
|
|
90
|
+
"""Return paginated list data"""
|
|
91
|
+
items = await self.get_queryset(request)
|
|
92
|
+
|
|
93
|
+
# Simple pagination
|
|
94
|
+
page = int(request.get('query_params', {}).get('page', 1))
|
|
95
|
+
page_size = int(request.get('query_params', {}).get('page_size', 20))
|
|
96
|
+
|
|
97
|
+
start = (page - 1) * page_size
|
|
98
|
+
end = start + page_size
|
|
99
|
+
|
|
100
|
+
return {
|
|
101
|
+
"items": items[start:end],
|
|
102
|
+
"page": page,
|
|
103
|
+
"page_size": page_size,
|
|
104
|
+
"total": len(items),
|
|
105
|
+
"has_next": end < len(items),
|
|
106
|
+
"has_previous": page > 1
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class DetailView(JSONView):
|
|
111
|
+
"""View that returns a single item"""
|
|
112
|
+
|
|
113
|
+
async def get_object(self, request: Dict[str, Any]) -> Optional[Dict[str, Any]]:
|
|
114
|
+
"""Override this to provide the item"""
|
|
115
|
+
return None
|
|
116
|
+
|
|
117
|
+
async def get_data(self, request: Dict[str, Any]) -> Dict[str, Any]:
|
|
118
|
+
"""Return single item data"""
|
|
119
|
+
obj = await self.get_object(request)
|
|
120
|
+
if obj is None:
|
|
121
|
+
return {"error": "Not found"}, 404
|
|
122
|
+
return obj
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# Function-based view decorators
|
|
126
|
+
def json_response(func: Callable):
|
|
127
|
+
"""Decorator to ensure function returns JSON response"""
|
|
128
|
+
async def wrapper(request: Dict[str, Any]):
|
|
129
|
+
result = await func(request) if callable(func) else func(request)
|
|
130
|
+
if not isinstance(result, dict):
|
|
131
|
+
result = {"data": result}
|
|
132
|
+
return result
|
|
133
|
+
return wrapper
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def require_method(*methods: str):
|
|
137
|
+
"""Decorator to restrict view to specific HTTP methods"""
|
|
138
|
+
def decorator(func: Callable):
|
|
139
|
+
async def wrapper(request: Dict[str, Any]):
|
|
140
|
+
if request.get('method', 'GET').upper() not in [m.upper() for m in methods]:
|
|
141
|
+
return {"error": f"Method not allowed. Allowed: {', '.join(methods)}"}, 405
|
|
142
|
+
return await func(request) if callable(func) else func(request)
|
|
143
|
+
wrapper.allowed_methods = [m.upper() for m in methods]
|
|
144
|
+
return wrapper
|
|
145
|
+
return decorator
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
# Common view functions
|
|
149
|
+
async def index_view(request: Dict[str, Any]):
|
|
150
|
+
"""Default index view - renders index.html"""
|
|
151
|
+
return {"template": "index.html", "context": {}}
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
async def health_check_view(request: Dict[str, Any]):
|
|
155
|
+
"""Health check endpoint"""
|
|
156
|
+
return {
|
|
157
|
+
"status": "healthy",
|
|
158
|
+
"framework": "CREATESONLINE",
|
|
159
|
+
"version": __version__
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
async def not_found_view(request: Dict[str, Any]):
|
|
164
|
+
"""404 Not Found view"""
|
|
165
|
+
return {
|
|
166
|
+
"error": "Not Found",
|
|
167
|
+
"path": request.get('path', ''),
|
|
168
|
+
"message": "The requested resource was not found"
|
|
169
|
+
}, 404
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
# Export commonly used views
|
|
173
|
+
__all__ = [
|
|
174
|
+
'BaseView',
|
|
175
|
+
'TemplateView',
|
|
176
|
+
'JSONView',
|
|
177
|
+
'ListView',
|
|
178
|
+
'DetailView',
|
|
179
|
+
'json_response',
|
|
180
|
+
'require_method',
|
|
181
|
+
'index_view',
|
|
182
|
+
'health_check_view',
|
|
183
|
+
'not_found_view'
|
|
184
|
+
]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: createsonline
|
|
3
|
+
Version: 0.1.26
|
|
4
|
+
Summary: A framework for creating and deploying AI-powered applications
|
|
5
|
+
Home-page: https://github.com/meahmedh/createsonline
|
|
6
|
+
Author: meahmedh
|
|
7
|
+
Author-email: meahmedh <ahmed@createsonline.com>
|
|
8
|
+
Maintainer-email: meahmedh <ahmed@createsonline.com>
|
|
9
|
+
Project-URL: Homepage, https://github.com/meahmedh/createsonline
|
|
10
|
+
Project-URL: Documentation, https://docs.createsonline.com
|
|
11
|
+
Project-URL: Repository, https://github.com/meahmedh/createsonline
|
|
12
|
+
Project-URL: Bug Tracker, https://github.com/meahmedh/createsonline/issues
|
|
13
|
+
Project-URL: Changelog, https://github.com/meahmedh/createsonline/blob/main/CHANGELOG.md
|
|
14
|
+
Keywords: web framework,ai framework,artificial intelligence,machine learning,async,api,web development,llm,vector database,smart fields,ai-native
|
|
15
|
+
Classifier: Development Status :: 3 - Alpha
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Operating System :: OS Independent
|
|
25
|
+
Classifier: Framework :: AsyncIO
|
|
26
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
27
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
28
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
29
|
+
Requires-Python: >=3.9
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
License-File: LICENSE
|
|
32
|
+
Requires-Dist: sqlalchemy<3.0.0,>=2.0.0
|
|
33
|
+
Requires-Dist: alembic<2.0.0,>=1.12.0
|
|
34
|
+
Requires-Dist: numpy<2.0.0,>=1.24.0
|
|
35
|
+
Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
38
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
39
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
40
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
41
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
42
|
+
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
|
|
43
|
+
Dynamic: author
|
|
44
|
+
Dynamic: home-page
|
|
45
|
+
Dynamic: license-file
|
|
46
|
+
Dynamic: requires-python
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
createsonline/__init__.py,sha256=bON8kOtPCG87GrSDQF8pobk6vKIYI5buR2W7P8u80Cs,1243
|
|
2
|
+
createsonline/app.py,sha256=YHNS4c_9OuWhOOp0cgCHNNDSMMmYjr1E_XhVP1ZdzkI,18498
|
|
3
|
+
createsonline/database.py,sha256=tUcJOuWuA7zPx0R-ZO-H8nf-3GXw4uldKVEi26RgRLM,18447
|
|
4
|
+
createsonline/project_init.py,sha256=FLuokT87-TcnZujBBYIrlzM03jw2rxnO6pGDHHGmSeQ,28383
|
|
5
|
+
createsonline/routing.py,sha256=dUSny3LF6ez0VJb1LYXJLsi6xc_EUoE6YoKRPVHJHNw,19127
|
|
6
|
+
createsonline/server.py,sha256=4jUJhPdchznwSK_kA6D009rMXu7BUlp2e7x-i-qBK6I,11303
|
|
7
|
+
createsonline/static_files.py,sha256=uBMAuRA2GFDxvhMXFPvsVyU6p1qPvg1eh89Ai1mwaRI,12925
|
|
8
|
+
createsonline/templates.py,sha256=wunc9lXyuNNgCThqHE9fZa8lKribapzlA898JMaq2zc,6991
|
|
9
|
+
createsonline/testing.py,sha256=1Vla_TRf2gvB3jdEfDePS25fEwgNbGFOp9iZqYkK9dI,13210
|
|
10
|
+
createsonline/utils.py,sha256=KFfH8GeULsOYBPxpKT0Az5veidKeeQy5lMKXnlxPqoE,15855
|
|
11
|
+
createsonline/views.py,sha256=wzcDXvQP4l-dYcyT8Qdq-8WeEggk1Qi4abHtW04n5fs,5864
|
|
12
|
+
createsonline/admin/__init__.py,sha256=D9SgfmlxBhHvqEfZTgXz1ki5Y-GZ90eHbQO2BJWlmNg,203
|
|
13
|
+
createsonline/admin/content.py,sha256=eSD3qxEUmbyr6BFkkfXDmKiBgjTM_awV14hKgJLq3XM,15877
|
|
14
|
+
createsonline/admin/crud.py,sha256=aCSGOTwNNcooO9QONK_YLdA144Hkjb0GzYHCCCogW3s,26521
|
|
15
|
+
createsonline/admin/field_builder.py,sha256=ujbbMyBbmetvkkSoGHN8X2YkU-HAB9xy4ovtSx8DUaI,18718
|
|
16
|
+
createsonline/admin/integration.py,sha256=IJwI1QyV7E7bPXEJT6cffgQxF2qpqO1Ype45T9tOzSE,16601
|
|
17
|
+
createsonline/admin/interface.py,sha256=y9G_GPd8Y5swFlDpiFHQuIWVagPmEmvct24A7yMI_Bk,95080
|
|
18
|
+
createsonline/admin/model_creator.py,sha256=dZAeBUlUHD55FoJOiAH2D7YZHBG0Qkvf0W60ZNRiEqU,19077
|
|
19
|
+
createsonline/admin/model_manager.py,sha256=emD_T2uIbUwWIClgJYSDH4aLeIthM_yQutzwOkeOxhI,11857
|
|
20
|
+
createsonline/admin/modern_dashboard.py,sha256=ctqIUf3pAS3Jp7sFCBNLSo_m2lAOYHGgAq8oDf-uY3o,15096
|
|
21
|
+
createsonline/admin/permissions.py,sha256=ABZel_gkomFuZvpYz7Qag5g3xr3o-MTspXFo6DmpgEk,8121
|
|
22
|
+
createsonline/admin/user_forms.py,sha256=sgtLbUkqB4psPeBxtMzo3abXnJTrD4WzcSXHdgVy9q4,21255
|
|
23
|
+
createsonline/ai/__init__.py,sha256=t8qUUum9FCvhdGmDmGKBdoHnHwo94BELdivJMsfEqDo,6189
|
|
24
|
+
createsonline/ai/fields.py,sha256=yK6sijwffroPdBEkXMUOq8p9o2QZzd4WGFT94wBrfaQ,47687
|
|
25
|
+
createsonline/ai/orm.py,sha256=Al7Rka_lqGplyYrzPAaMLgiPNELm-pKNsm_QfsIgxOs,11777
|
|
26
|
+
createsonline/ai/services.py,sha256=UV9J_Taj4RWSzfbuxkWXMxTpRwsJx_Kt2XO_GjSt6go,51419
|
|
27
|
+
createsonline/auth/__init__.py,sha256=ecyqvHJM0Ri5F9gIY06Ufflqu0qxRo87qVbtnhCz5TA,239
|
|
28
|
+
createsonline/auth/management.py,sha256=lMOVYxUzhydl-4q3gKXU0T6lE8bOcNFfUEdnEQI7I4I,8199
|
|
29
|
+
createsonline/auth/models.py,sha256=Hz0UcmY5ltTFsjjiW4REnNY7v9nNiTZzuY64j5Tyd0I,17756
|
|
30
|
+
createsonline/cli/__init__.py,sha256=mIJfuwCUBn-g65V2TuuswdP-KvTBuA1kDFe6_Amxoj4,97
|
|
31
|
+
createsonline/cli/main.py,sha256=7UYYRsl7HBoFmH1O7d9LbKrvS49EDuMVhk1F_XReEys,74602
|
|
32
|
+
createsonline/cli/manage.py,sha256=ZJo6J6NpaE_oHLClUkIqW0dVL3YlNGsQAXVdjUJvswc,9294
|
|
33
|
+
createsonline/cli/commands/__init__.py,sha256=L5ZULA5O8brNCee7lGMvTwjTjo55kut3fC47qN3QBK8,4520
|
|
34
|
+
createsonline/cli/commands/database.py,sha256=O_Fqb_orvoURS8ZysVns4blabXuopqPw1zpP_Q0o6V8,17156
|
|
35
|
+
createsonline/cli/commands/info.py,sha256=wC4DxVpLDWXcGWfl6gpOjaeOU9nUK1pK6fr6RPgtbhM,6377
|
|
36
|
+
createsonline/cli/commands/initdb.py,sha256=wvRkrW5X-uquuAgSPDZgmMY9_ELuqOWVxhoPSx65s7M,8181
|
|
37
|
+
createsonline/cli/commands/project.py,sha256=ZCUeWFbGsFwJ4T8mB2hgqG0pF1VlEikMPPOo4KfbF-A,17571
|
|
38
|
+
createsonline/cli/commands/serve.py,sha256=DPTwV-o2REA0boktvrrUm_tU764JOym3ACfgrYLdhRU,6967
|
|
39
|
+
createsonline/cli/commands/shell.py,sha256=ao05konZLCFenBSg9TgwDxl4kdRXrhXuMrAEPAKLwqk,3199
|
|
40
|
+
createsonline/cli/commands/users.py,sha256=76DjTtxIceNr-LOLVjHsbZrVfh6rKuWKOEeKh2tcbe4,5332
|
|
41
|
+
createsonline/config/__init__.py,sha256=DLLs9BXPN94vDvbpru8cxe1nHjnvS_MNoeAsZvZyx3k,197
|
|
42
|
+
createsonline/config/app.py,sha256=JVJpLaY0Qv-mCHX8lQTl1oGDNEDcRYYdvjA0XxbXYSE,99098
|
|
43
|
+
createsonline/config/database.py,sha256=UB9h8FPLqDYn803reD2NaldI_4lH9IQCmFwp-uMPZAQ,6286
|
|
44
|
+
createsonline/config/docs.py,sha256=NJUzEOoxse8SrdlcG7X0tha4h0ySFp9UTPVPgMjoqgA,13633
|
|
45
|
+
createsonline/config/errors.py,sha256=LGTjxnEI6xDxBH4Ewp20jnQjOJ1E2PVWZPEczs1ovsI,4811
|
|
46
|
+
createsonline/config/orm.py,sha256=tNMO1r-4eYmSCE6uBqn0WZA9z2IQILw8m8wYZ5XmH2Q,1826
|
|
47
|
+
createsonline/config/request.py,sha256=s0rpZkifvyeHNBH9gFjGmlu30cob0LZJ_YzhPG9J5Ro,3402
|
|
48
|
+
createsonline/config/settings.py,sha256=DBtiNSSnA5S7_MKdlCNdsKUymSsqAC0A20eDnzfciSw,5875
|
|
49
|
+
createsonline/data/__init__.py,sha256=R3QSvWRI64l-80vNdroa2RTHShuS57KMf06fuMWSWOs,568
|
|
50
|
+
createsonline/data/dataframe.py,sha256=hN0xNtUDo7ju-IOx6WIVjktQaECcDKD2wKHPbF-EYH0,35775
|
|
51
|
+
createsonline/data/io.py,sha256=nt0iWbl9vUy5ZrxYas_EtEUHtZ_5SCn6Bmj1HS3z8Qs,13941
|
|
52
|
+
createsonline/data/series.py,sha256=xu2f6txdI3vRGcH9S7RvEZ0AfeUwBz9TGs-_MfjWD3s,20513
|
|
53
|
+
createsonline/database/__init__.py,sha256=GaYVhRBrcfeEVfK5Vq-6Dd3r4YH2lRBnWXSAJYAlgY0,1612
|
|
54
|
+
createsonline/database/abstraction.py,sha256=3MMfAExgawHYfvUUUWMGC-E98UlsDKkSaKM0OPFEJGk,15152
|
|
55
|
+
createsonline/database/assistant.py,sha256=gTfwL_0ySdWaen_wZiR00ffGy_lhjToekR76Dn6PDxU,22973
|
|
56
|
+
createsonline/database/fields.py,sha256=EP2_WywtgVEKozNG7HH-_mofIYB_bBDFb8XrWMjCl7E,14141
|
|
57
|
+
createsonline/database/migrations.py,sha256=UbntZA3jNq6oSq7UUCZVJfWrOhyDYn07r1gWalo4QJw,5099
|
|
58
|
+
createsonline/database/models.py,sha256=BcY4Kdxgfqnpm6I16xG-msOEUU4Drw-Eb6yfJz7Z_Io,21681
|
|
59
|
+
createsonline/http/__init__.py,sha256=AFGaB0amF41e9zuJ8Ahj4G37PqZDfhIk1Ef9GWWzLQQ,547
|
|
60
|
+
createsonline/http/client.py,sha256=JlGbGuMzlN2aiWCw17_HsrqOQE-MY6xsqrNqLNcKiyo,19510
|
|
61
|
+
createsonline/ml/__init__.py,sha256=3XnISuHwV2QunoYELy3b7Mjg13ncyIsqc1Sl0MV7QjA,1374
|
|
62
|
+
createsonline/ml/classification.py,sha256=WGe5_Cx5TCzJejJ8Y9PR7f1R4Rdb5A2MtcgZ3ApzsnE,19319
|
|
63
|
+
createsonline/ml/clustering.py,sha256=QihPL8Jc6rl5-WB2U4-zrF2Clfl_Of2Pv_I9IOjiSOI,23909
|
|
64
|
+
createsonline/ml/metrics.py,sha256=u44PmfIt7MBWC7rtiGtzU65O24kMKYbXHY9b_Rzt8_8,18488
|
|
65
|
+
createsonline/ml/neural.py,sha256=NlpvLi8kiMs5Pxr_3445NWm3gBA4HlYk3SD3h0InF4s,19442
|
|
66
|
+
createsonline/ml/preprocessing.py,sha256=nqZ057mMWZnLkazfYcmMhF_Ms52vZGPIijNQLadFhLk,24751
|
|
67
|
+
createsonline/ml/regression.py,sha256=XAKsAr1y_QUQX-EyfSlXE0SsfoqLIAWLjvo9pY0le5U,17021
|
|
68
|
+
createsonline/performance/__init__.py,sha256=xRDhJiRvy1kdt70fdXhddXE9h8VN5SuT7bnCxy5sO5Q,458
|
|
69
|
+
createsonline/performance/cache.py,sha256=FIdV34CDEeg0BMbkFSESrvjtlZI-BgWcp0pexAiQt7g,14538
|
|
70
|
+
createsonline/performance/compression.py,sha256=LDmGwnj7XlRpV0tCKVfs8E1dJ_QPOQttAJSJdbC-ZKU,12473
|
|
71
|
+
createsonline/performance/core.py,sha256=1c3-mgBqOwmVksMnjCyVDpgasvcdZscWR3GywqPfAX4,14846
|
|
72
|
+
createsonline/security/__init__.py,sha256=2Wi4wmF3r4rCOwVMoCpnMVKvukS-b3E0cVGY0V8BFKA,907
|
|
73
|
+
createsonline/security/core.py,sha256=PXFaKIoUjYsCXhBuMvpTJpwl2KemcMwOpy8nXxmg4lM,28612
|
|
74
|
+
createsonline/security/encryption.py,sha256=9L3YmUTT3Txz69cbQAOQQAGHhpvVeCTzbcWJ8nAI9rU,12077
|
|
75
|
+
createsonline/static/favicon.ico,sha256=OPDXJZuOqNYH42Vh9zP6dTXbpP_OGtGaWTAWZ2ghvoQ,383
|
|
76
|
+
createsonline/static/site.webmanifest,sha256=25oqhJwdt4qtZ40jTJbwqs5UKntjUGeSTI-WEJk6UrE,860
|
|
77
|
+
createsonline/static/test_script.js,sha256=9d6pJh6re54YsK5wAFIvTcoup6amLphym2Dtd3zlXxw,525
|
|
78
|
+
createsonline/static/test_styles.css,sha256=lCz7aSttK9QVtfgm7_u4mvUCJA3FShtz5LsomcGHHkc,1092
|
|
79
|
+
createsonline/static/css/admin.css,sha256=Ohre_hnISKuT3DgCR6v06C01iWtYFvCHv4VNbLkME5o,4867
|
|
80
|
+
createsonline/static/css/common.css,sha256=OdL9Yzt0FDqbvK4ii6UVd57LcFgGnf5im6u_AeHWKak,6750
|
|
81
|
+
createsonline/static/css/dashboard.css,sha256=dSRLEvjdoSHgHSgwNJJRJ4NMQL1iOkRkvv7Sx7jzB3s,4027
|
|
82
|
+
createsonline/static/icons/icon-128x128.png,sha256=l6nGoLcjdHOfaGtSN1EM2x0STdN5yASdCYUvXixTpxg,5600
|
|
83
|
+
createsonline/static/icons/icon-128x128.webp,sha256=NLbvvyRg4vNMI85EdMF22kWTFmjjKWKX2PkYpYTPfvM,2782
|
|
84
|
+
createsonline/static/icons/icon-16x16.png,sha256=ltKwY4bYVH9yZINvWKT96QSwsJKAGV2-C73HAGWlhMI,358
|
|
85
|
+
createsonline/static/icons/icon-16x16.webp,sha256=rikwZnjmOihaYTuP9_S4I_bBtRuWO57xzZdVEDOq9es,178
|
|
86
|
+
createsonline/static/icons/icon-180x180.png,sha256=fvCI0DHEx288mW-GC1cxyqF_2MMliC_bQhoYAt8acBM,10319
|
|
87
|
+
createsonline/static/icons/icon-180x180.webp,sha256=pBZ84mpmrZoajLiZyY6Zg_6XozVe70NswN2CwUpo6EU,5328
|
|
88
|
+
createsonline/static/icons/icon-192x192.png,sha256=M2_V1gSa6z5kns2C3xSVX9xVrai8V7Ey8fBEvKtLS5M,11603
|
|
89
|
+
createsonline/static/icons/icon-192x192.webp,sha256=Hbos96eLgx9WrvwVAv1pmvr-Xb9wj3ntvAf_kFQIlPs,6018
|
|
90
|
+
createsonline/static/icons/icon-256x256.png,sha256=Luf7jUASGH4i3htGrWqSq-DSXdVxs5L2ndSXj59SJiA,21095
|
|
91
|
+
createsonline/static/icons/icon-256x256.webp,sha256=kCkwibgeptat0kUQCG9MpOo35v4462M7LkD40j3xRTw,11486
|
|
92
|
+
createsonline/static/icons/icon-32x32.png,sha256=nZqnr9TuBJTv8pgGVZoopRFCyQ3la6BUBRBC51hpZuU,717
|
|
93
|
+
createsonline/static/icons/icon-32x32.webp,sha256=neX5X463cSwkovsuHHxPlEBLJD7oXg3h9tI0koVtGyY,340
|
|
94
|
+
createsonline/static/icons/icon-384x384.png,sha256=o5RDUR4ScIuDR3mginhcN-93CC_4LR0SvQUoxcBmfeA,57060
|
|
95
|
+
createsonline/static/icons/icon-384x384.webp,sha256=EhEX5CWPzrBPdQ6mB-qG2XKMcQMjjKD6jquPMp1OBl8,33726
|
|
96
|
+
createsonline/static/icons/icon-48x48.png,sha256=Xu9QmuUW0QJD58melwXwBko8OcSlLIEP_XYyAdPtppw,1341
|
|
97
|
+
createsonline/static/icons/icon-48x48.webp,sha256=XGHPXem9cDPw95zThxiWMH1Y4q_EL3ee3sT9cRYdzVw,612
|
|
98
|
+
createsonline/static/icons/icon-512x512.png,sha256=xeaGnNJPpG39CMfdgLIK2S7r2BLWxmqxQ_61hp2Y2x4,111512
|
|
99
|
+
createsonline/static/icons/icon-512x512.webp,sha256=PsPCvahy8NghPx96UinNSKdKm7TpMNzbZNpoSHXlJb8,69274
|
|
100
|
+
createsonline/static/icons/icon-64x64.png,sha256=fyEGQ4YD61rDp6XZaWQI59vlK1q6tgsyVwOZ9EUohsI,2057
|
|
101
|
+
createsonline/static/icons/icon-64x64.webp,sha256=hR__hrcXhx1YzCyU2RSQTuOVw4s3AzdE9giuRPlQmI0,942
|
|
102
|
+
createsonline/static/image/android-chrome-192x192.png,sha256=RUruIoqQ6ZDpFJPXsJjW_AxK26kr1Ima8rF0AFwtkJc,7899
|
|
103
|
+
createsonline/static/image/android-chrome-512x512.png,sha256=NwFTsBDkaT7ABGK2Ov-juTkNeJBW6icAn3HOfOU3mdI,31623
|
|
104
|
+
createsonline/static/image/apple-touch-icon.png,sha256=-8db5ZzyHqf9A_b7bykutSp9M-7U0pEGqZVVPmcBVRQ,7404
|
|
105
|
+
createsonline/static/image/favicon-16x16.png,sha256=UrdRsMB9x08F8KIgTkHS3qj7gKjiZNAXGzmnMQWUXSs,353
|
|
106
|
+
createsonline/static/image/favicon-32x32.png,sha256=SV4YgRHK5otf3kfWyFLVc-ZlciEemkO7W4YxNGxNZL0,831
|
|
107
|
+
createsonline/static/image/favicon.ico,sha256=OPDXJZuOqNYH42Vh9zP6dTXbpP_OGtGaWTAWZ2ghvoQ,383
|
|
108
|
+
createsonline/static/image/favicon.svg,sha256=sxNwLzJOKa1KZdrjSRIgsf3sBXuIjgfkDeDXZQEztds,508
|
|
109
|
+
createsonline/static/image/icon-128x128.png,sha256=l6nGoLcjdHOfaGtSN1EM2x0STdN5yASdCYUvXixTpxg,5600
|
|
110
|
+
createsonline/static/image/icon-128x128.webp,sha256=NLbvvyRg4vNMI85EdMF22kWTFmjjKWKX2PkYpYTPfvM,2782
|
|
111
|
+
createsonline/static/image/icon-16x16.png,sha256=ltKwY4bYVH9yZINvWKT96QSwsJKAGV2-C73HAGWlhMI,358
|
|
112
|
+
createsonline/static/image/icon-16x16.webp,sha256=rikwZnjmOihaYTuP9_S4I_bBtRuWO57xzZdVEDOq9es,178
|
|
113
|
+
createsonline/static/image/icon-180x180.png,sha256=fvCI0DHEx288mW-GC1cxyqF_2MMliC_bQhoYAt8acBM,10319
|
|
114
|
+
createsonline/static/image/icon-180x180.webp,sha256=pBZ84mpmrZoajLiZyY6Zg_6XozVe70NswN2CwUpo6EU,5328
|
|
115
|
+
createsonline/static/image/icon-192x192.png,sha256=M2_V1gSa6z5kns2C3xSVX9xVrai8V7Ey8fBEvKtLS5M,11603
|
|
116
|
+
createsonline/static/image/icon-192x192.webp,sha256=Hbos96eLgx9WrvwVAv1pmvr-Xb9wj3ntvAf_kFQIlPs,6018
|
|
117
|
+
createsonline/static/image/icon-256x256.png,sha256=Luf7jUASGH4i3htGrWqSq-DSXdVxs5L2ndSXj59SJiA,21095
|
|
118
|
+
createsonline/static/image/icon-256x256.webp,sha256=kCkwibgeptat0kUQCG9MpOo35v4462M7LkD40j3xRTw,11486
|
|
119
|
+
createsonline/static/image/icon-32x32.png,sha256=nZqnr9TuBJTv8pgGVZoopRFCyQ3la6BUBRBC51hpZuU,717
|
|
120
|
+
createsonline/static/image/icon-32x32.webp,sha256=neX5X463cSwkovsuHHxPlEBLJD7oXg3h9tI0koVtGyY,340
|
|
121
|
+
createsonline/static/image/icon-384x384.png,sha256=o5RDUR4ScIuDR3mginhcN-93CC_4LR0SvQUoxcBmfeA,57060
|
|
122
|
+
createsonline/static/image/icon-384x384.webp,sha256=EhEX5CWPzrBPdQ6mB-qG2XKMcQMjjKD6jquPMp1OBl8,33726
|
|
123
|
+
createsonline/static/image/icon-48x48.png,sha256=Xu9QmuUW0QJD58melwXwBko8OcSlLIEP_XYyAdPtppw,1341
|
|
124
|
+
createsonline/static/image/icon-48x48.webp,sha256=XGHPXem9cDPw95zThxiWMH1Y4q_EL3ee3sT9cRYdzVw,612
|
|
125
|
+
createsonline/static/image/icon-512x512.png,sha256=xeaGnNJPpG39CMfdgLIK2S7r2BLWxmqxQ_61hp2Y2x4,111512
|
|
126
|
+
createsonline/static/image/icon-512x512.webp,sha256=PsPCvahy8NghPx96UinNSKdKm7TpMNzbZNpoSHXlJb8,69274
|
|
127
|
+
createsonline/static/image/icon-64x64.png,sha256=fyEGQ4YD61rDp6XZaWQI59vlK1q6tgsyVwOZ9EUohsI,2057
|
|
128
|
+
createsonline/static/image/icon-64x64.webp,sha256=hR__hrcXhx1YzCyU2RSQTuOVw4s3AzdE9giuRPlQmI0,942
|
|
129
|
+
createsonline/static/image/logo-header-h100.png,sha256=uFcVafNTXAuGlyhlZMGv9gatnUzfEodNJQx5WFOUFzM,4670
|
|
130
|
+
createsonline/static/image/logo-header-h100.webp,sha256=_tDXjmNvCnEl9bR_qAx1SvIh8OLPuj2BbvwZ_ZBbKZs,2422
|
|
131
|
+
createsonline/static/image/logo-header-h200@2x.png,sha256=Q3IkuwuNY7AEcYcivk6q5oRF0T3amdkePrd1wb0DQ2E,16378
|
|
132
|
+
createsonline/static/image/logo-header-h200@2x.webp,sha256=-ex8trG81KX_6X9M3M_04m90FYRZom6fBskVqUWzoFQ,9056
|
|
133
|
+
createsonline/static/image/logo.png,sha256=VBSsL0uWYWgK5UGVDqs8klzSfaWuG5fpjZuNYGrReAI,65917
|
|
134
|
+
createsonline/static/js/admin.js,sha256=VmvQyldaoI4TZ4raEhH5mIex5X6QBC6SKXARJR_gNWE,9003
|
|
135
|
+
createsonline/static/templates/admin/base.html,sha256=rrETfPHOIr4RNWTNdS0gLUyYvpo7-LOSAisFyZ47M4w,3376
|
|
136
|
+
createsonline/static/templates/admin/dashboard.html,sha256=awutW0m9l3TBuEV6qx2Qwp_8VpbBNpasOlgYrd_HsDk,6057
|
|
137
|
+
createsonline/static/templates/admin/model_form.html,sha256=7ZyMHJdcGAC2pHrGJslN25Plx1JiZWeQL4e5KccnWas,9966
|
|
138
|
+
createsonline/static/templates/admin/model_list.html,sha256=PVzCppJsVG5wxZ6RScjfJdHcFFeThzSu-GoXb95woM0,6587
|
|
139
|
+
createsonline/templates/404.html,sha256=pscfrPy-EU5JCT6TTbFo0Sk3m0K_CTGfC4lvU2E6j7A,2759
|
|
140
|
+
createsonline/templates/admin_login.html,sha256=IbxmhQir2iwmZFSQv_-O00R16rJl5nRHWN8xa8irU6A,3426
|
|
141
|
+
createsonline/templates/base.html,sha256=crFcXKUERzt8-pGmy_gZdujQivBJYf4006IEdcNCNWM,3262
|
|
142
|
+
createsonline/templates/index.html,sha256=sFbZgFjtPo_NzIC20Oo9cbl4kEhrVTYDXENvkLbKBUc,3033
|
|
143
|
+
createsonline/validation/__init__.py,sha256=u-QYeETFnmQSLBGR2GcKCVNz1ifgDZF__lKitlBKJHU,1089
|
|
144
|
+
createsonline/validation/fields.py,sha256=v-_iCSDQ1ImdYVjZne73siPws_8Ok70E2puMgrWCO6g,19773
|
|
145
|
+
createsonline/validation/models.py,sha256=XdYOmb9nRRzQ1xclmUQ9S3bRRZ9wPDFYQGR8OBQlY7o,16210
|
|
146
|
+
createsonline/validation/validators.py,sha256=vUCcgdwge2xvtU5jKtTnS-LhSIYrUpOWmKOAiHsroPg,16670
|
|
147
|
+
createsonline-0.1.26.dist-info/licenses/LICENSE,sha256=6navgsF2hGPREDRRbotF_1sKbqF3SXYR5swSjx4ACQA,1090
|
|
148
|
+
createsonline-0.1.26.dist-info/METADATA,sha256=7IMnv32kM847bZdtCgj5gb_sar987Rwtbgd0XCnQYso,2206
|
|
149
|
+
createsonline-0.1.26.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
150
|
+
createsonline-0.1.26.dist-info/entry_points.txt,sha256=G9XfNU2KMyVoe9neTaLcrMCtr4G40WyO6p-ExK6R2bQ,65
|
|
151
|
+
createsonline-0.1.26.dist-info/top_level.txt,sha256=CyWFCBXWE9ef2gcIskSsehQHJtT9z1EOsukltSRqOUY,14
|
|
152
|
+
createsonline-0.1.26.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Ahmed Hassan
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
createsonline
|