strapi-kit 0.0.2__py3-none-any.whl → 0.0.3__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.
- strapi_kit/__init__.py +1 -1
- strapi_kit/_version.py +2 -2
- strapi_kit/client/async_client.py +87 -1
- strapi_kit/client/base.py +91 -2
- strapi_kit/client/sync_client.py +87 -1
- strapi_kit/config_provider.py +1 -16
- strapi_kit/exceptions/__init__.py +2 -0
- strapi_kit/exceptions/errors.py +13 -0
- strapi_kit/export/exporter.py +6 -5
- strapi_kit/models/__init__.py +8 -0
- strapi_kit/models/content_type.py +148 -0
- strapi_kit/models/export_format.py +5 -3
- strapi_kit/models/request/query.py +9 -6
- strapi_kit/operations/media.py +13 -6
- strapi_kit/operations/streaming.py +5 -4
- strapi_kit/utils/__init__.py +20 -1
- strapi_kit/utils/rate_limiter.py +4 -2
- strapi_kit/utils/seo.py +294 -0
- strapi_kit/utils/uid.py +118 -0
- {strapi_kit-0.0.2.dist-info → strapi_kit-0.0.3.dist-info}/METADATA +203 -10
- {strapi_kit-0.0.2.dist-info → strapi_kit-0.0.3.dist-info}/RECORD +23 -21
- {strapi_kit-0.0.2.dist-info → strapi_kit-0.0.3.dist-info}/WHEEL +0 -0
- {strapi_kit-0.0.2.dist-info → strapi_kit-0.0.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: strapi-kit
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.3
|
|
4
4
|
Summary: A modern Python client for Strapi CMS with import/export capabilities
|
|
5
5
|
Project-URL: Homepage, https://github.com/mehdizare/strapi-kit
|
|
6
6
|
Project-URL: Documentation, https://mehdizare.github.io/strapi-kit/
|
|
@@ -61,6 +61,7 @@ A modern Python client for Strapi CMS with comprehensive import/export capabilit
|
|
|
61
61
|
- 🔒 **Type Safe**: Built with Pydantic for robust data validation and type safety
|
|
62
62
|
- 🔄 **Import/Export**: Comprehensive backup/restore and data migration tools
|
|
63
63
|
- 🔁 **Smart Retry**: Automatic retry with exponential backoff for transient failures
|
|
64
|
+
- 🔍 **Schema Introspection**: Content-Type Builder API support for schema discovery
|
|
64
65
|
- 📦 **Modern Python**: Built for Python 3.12+ with full type hints
|
|
65
66
|
|
|
66
67
|
## Installation
|
|
@@ -654,6 +655,143 @@ asyncio.run(main())
|
|
|
654
655
|
- Update metadata without re-uploading
|
|
655
656
|
- Full support for both sync and async
|
|
656
657
|
|
|
658
|
+
### Content-Type Builder API
|
|
659
|
+
|
|
660
|
+
Query Strapi's Content-Type Builder to discover schemas, content types, and components:
|
|
661
|
+
|
|
662
|
+
```python
|
|
663
|
+
from strapi_kit import SyncClient, StrapiConfig
|
|
664
|
+
|
|
665
|
+
config = StrapiConfig(base_url="http://localhost:1337", api_token="your-token")
|
|
666
|
+
|
|
667
|
+
with SyncClient(config) as client:
|
|
668
|
+
# List all content types (excludes plugins by default)
|
|
669
|
+
content_types = client.get_content_types()
|
|
670
|
+
for ct in content_types:
|
|
671
|
+
print(f"{ct.uid}: {ct.info.display_name}")
|
|
672
|
+
# api::article.article: Article
|
|
673
|
+
# api::category.category: Category
|
|
674
|
+
|
|
675
|
+
# Include plugin content types
|
|
676
|
+
all_types = client.get_content_types(include_plugins=True)
|
|
677
|
+
|
|
678
|
+
# List all components
|
|
679
|
+
components = client.get_components()
|
|
680
|
+
for comp in components:
|
|
681
|
+
print(f"{comp.category}/{comp.uid}: {comp.info.display_name}")
|
|
682
|
+
# shared/shared.seo: SEO
|
|
683
|
+
# blocks/blocks.hero: Hero Section
|
|
684
|
+
|
|
685
|
+
# Get full schema for a content type
|
|
686
|
+
schema = client.get_content_type_schema("api::article.article")
|
|
687
|
+
print(f"Display name: {schema.display_name}")
|
|
688
|
+
print(f"Plural name: {schema.plural_name}")
|
|
689
|
+
|
|
690
|
+
# Check field types
|
|
691
|
+
print(schema.get_field_type("title")) # "string"
|
|
692
|
+
print(schema.is_relation_field("author")) # True
|
|
693
|
+
print(schema.get_relation_target("author")) # "api::author.author"
|
|
694
|
+
|
|
695
|
+
# Check for components
|
|
696
|
+
print(schema.is_component_field("seo")) # True
|
|
697
|
+
print(schema.get_component_uid("seo")) # "shared.seo"
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
**Async version:**
|
|
701
|
+
|
|
702
|
+
```python
|
|
703
|
+
async with AsyncClient(config) as client:
|
|
704
|
+
content_types = await client.get_content_types()
|
|
705
|
+
components = await client.get_components()
|
|
706
|
+
schema = await client.get_content_type_schema("api::article.article")
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
### UID Utilities
|
|
710
|
+
|
|
711
|
+
Utility functions for working with Strapi content type UIDs:
|
|
712
|
+
|
|
713
|
+
```python
|
|
714
|
+
from strapi_kit.utils import (
|
|
715
|
+
uid_to_endpoint,
|
|
716
|
+
uid_to_api_id, # Alias for uid_to_endpoint
|
|
717
|
+
api_id_to_singular,
|
|
718
|
+
uid_to_admin_url,
|
|
719
|
+
extract_model_name,
|
|
720
|
+
is_api_content_type,
|
|
721
|
+
)
|
|
722
|
+
|
|
723
|
+
# Convert UID to API endpoint (pluralized)
|
|
724
|
+
uid_to_endpoint("api::article.article") # "articles"
|
|
725
|
+
uid_to_endpoint("api::category.category") # "categories"
|
|
726
|
+
uid_to_endpoint("api::class.class") # "classes"
|
|
727
|
+
|
|
728
|
+
# Convert plural API ID to singular
|
|
729
|
+
api_id_to_singular("articles") # "article"
|
|
730
|
+
api_id_to_singular("categories") # "category"
|
|
731
|
+
api_id_to_singular("people") # "person" (handles irregular plurals)
|
|
732
|
+
api_id_to_singular("children") # "child"
|
|
733
|
+
|
|
734
|
+
# Build admin panel URL
|
|
735
|
+
uid_to_admin_url("api::article.article", "http://localhost:1337")
|
|
736
|
+
# "http://localhost:1337/admin/content-manager/collection-types/api::article.article"
|
|
737
|
+
|
|
738
|
+
uid_to_admin_url("api::homepage.homepage", "http://localhost:1337", kind="singleType")
|
|
739
|
+
# "http://localhost:1337/admin/content-manager/single-types/api::homepage.homepage"
|
|
740
|
+
|
|
741
|
+
# Extract model name from UID
|
|
742
|
+
extract_model_name("api::article.article") # "article"
|
|
743
|
+
extract_model_name("plugin::users-permissions.user") # "user"
|
|
744
|
+
|
|
745
|
+
# Check if UID is an API content type
|
|
746
|
+
is_api_content_type("api::article.article") # True
|
|
747
|
+
is_api_content_type("plugin::users-permissions.user") # False
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
### SEO Configuration Detection
|
|
751
|
+
|
|
752
|
+
Detect SEO configuration patterns in content type schemas:
|
|
753
|
+
|
|
754
|
+
```python
|
|
755
|
+
from strapi_kit.utils import detect_seo_configuration, SEOConfiguration
|
|
756
|
+
|
|
757
|
+
# Detect SEO in a schema dict
|
|
758
|
+
schema = {
|
|
759
|
+
"uid": "api::article.article",
|
|
760
|
+
"attributes": {
|
|
761
|
+
"title": {"type": "string"},
|
|
762
|
+
"seo": {"type": "component", "component": "shared.seo"},
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
config = detect_seo_configuration(schema)
|
|
767
|
+
print(config.has_seo) # True
|
|
768
|
+
print(config.seo_type) # "component"
|
|
769
|
+
print(config.seo_field_name) # "seo"
|
|
770
|
+
print(config.seo_component_uid) # "shared.seo"
|
|
771
|
+
print(config.fields) # {"title": "seo.metaTitle", "description": "seo.metaDescription", ...}
|
|
772
|
+
|
|
773
|
+
# Also detects flat SEO fields
|
|
774
|
+
schema_flat = {
|
|
775
|
+
"uid": "api::page.page",
|
|
776
|
+
"attributes": {
|
|
777
|
+
"metaTitle": {"type": "string"},
|
|
778
|
+
"metaDescription": {"type": "text"},
|
|
779
|
+
"ogImage": {"type": "media"},
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
config = detect_seo_configuration(schema_flat)
|
|
784
|
+
print(config.has_seo) # True
|
|
785
|
+
print(config.seo_type) # "flat"
|
|
786
|
+
print(config.fields) # {"title": "metaTitle", "description": "metaDescription", "og_image": "ogImage"}
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
**Supported SEO patterns:**
|
|
790
|
+
|
|
791
|
+
- **Component-based**: Fields named `seo`, `meta`, `metadata` with type `component`
|
|
792
|
+
- **Component UIDs**: Components with `seo` in the UID (e.g., `shared.seo`, `custom.page-seo`)
|
|
793
|
+
- **Flat fields**: `metaTitle`, `meta_title`, `seoTitle`, `metaDescription`, `ogTitle`, `canonicalUrl`, `noIndex`, etc.
|
|
794
|
+
|
|
657
795
|
### Export/Import with Relation Resolution
|
|
658
796
|
|
|
659
797
|
strapi-kit provides comprehensive export/import functionality with automatic relation resolution for migrating content between Strapi instances.
|
|
@@ -732,23 +870,35 @@ We provide two complete migration examples for different use cases:
|
|
|
732
870
|
Perfect for straightforward migrations with known content types:
|
|
733
871
|
|
|
734
872
|
```bash
|
|
735
|
-
#
|
|
736
|
-
|
|
873
|
+
# Set environment variables (or edit the script)
|
|
874
|
+
export SOURCE_STRAPI_TOKEN='your-source-token'
|
|
875
|
+
export TARGET_STRAPI_TOKEN='your-target-token'
|
|
876
|
+
|
|
877
|
+
# Run the migration
|
|
737
878
|
python examples/simple_migration.py
|
|
738
879
|
```
|
|
739
880
|
|
|
740
881
|
Features:
|
|
741
882
|
- ✅ Single-file, easy to understand
|
|
742
|
-
- ✅
|
|
743
|
-
- ✅
|
|
883
|
+
- ✅ Environment variable support for credentials
|
|
884
|
+
- ✅ Configuration validation before migration
|
|
885
|
+
- ✅ Connection verification for both instances
|
|
886
|
+
- ✅ Timestamped backup files to prevent overwrites
|
|
887
|
+
- ✅ Comprehensive error handling
|
|
744
888
|
- ✅ Automatic relation resolution
|
|
745
|
-
- ✅
|
|
889
|
+
- ✅ Includes media files
|
|
746
890
|
|
|
747
891
|
#### Full Migration (Production-Ready)
|
|
748
892
|
|
|
749
893
|
Comprehensive migration tool with auto-discovery and verification:
|
|
750
894
|
|
|
751
895
|
```bash
|
|
896
|
+
# Set environment variables (required)
|
|
897
|
+
export SOURCE_STRAPI_URL="http://localhost:1337"
|
|
898
|
+
export SOURCE_STRAPI_TOKEN="your-source-api-token"
|
|
899
|
+
export TARGET_STRAPI_URL="http://localhost:1338"
|
|
900
|
+
export TARGET_STRAPI_TOKEN="your-target-api-token"
|
|
901
|
+
|
|
752
902
|
# Export all content from source
|
|
753
903
|
python examples/full_migration_v5.py export
|
|
754
904
|
|
|
@@ -763,6 +913,7 @@ python examples/full_migration_v5.py verify
|
|
|
763
913
|
```
|
|
764
914
|
|
|
765
915
|
Features:
|
|
916
|
+
- ✅ **Environment variable configuration** (no hardcoded credentials)
|
|
766
917
|
- ✅ **Auto-discovers all content types** (no manual configuration needed)
|
|
767
918
|
- ✅ Progress bars for long operations
|
|
768
919
|
- ✅ Detailed migration reports
|
|
@@ -946,6 +1097,42 @@ db_config = DatabaseConfig(db_connection)
|
|
|
946
1097
|
client = SyncClient(db_config)
|
|
947
1098
|
```
|
|
948
1099
|
|
|
1100
|
+
## Error Handling
|
|
1101
|
+
|
|
1102
|
+
strapi-kit provides a rich exception hierarchy for precise error handling:
|
|
1103
|
+
|
|
1104
|
+
```python
|
|
1105
|
+
from strapi_kit import (
|
|
1106
|
+
StrapiError, # Base for all errors
|
|
1107
|
+
ConfigurationError, # Invalid config (missing token, bad URL)
|
|
1108
|
+
ValidationError, # Invalid input/query params
|
|
1109
|
+
AuthenticationError, # HTTP 401
|
|
1110
|
+
AuthorizationError, # HTTP 403
|
|
1111
|
+
NotFoundError, # HTTP 404
|
|
1112
|
+
ConflictError, # HTTP 409
|
|
1113
|
+
ServerError, # HTTP 5xx
|
|
1114
|
+
NetworkError, # Connection issues (base)
|
|
1115
|
+
RateLimitError, # HTTP 429
|
|
1116
|
+
ImportExportError, # Data operations (base)
|
|
1117
|
+
FormatError, # Invalid data format
|
|
1118
|
+
MediaError, # Media upload/download errors
|
|
1119
|
+
)
|
|
1120
|
+
|
|
1121
|
+
try:
|
|
1122
|
+
with SyncClient(config) as client:
|
|
1123
|
+
response = client.get_many("articles")
|
|
1124
|
+
except ConfigurationError as e:
|
|
1125
|
+
print(f"Config issue: {e}")
|
|
1126
|
+
except ValidationError as e:
|
|
1127
|
+
print(f"Invalid query: {e}")
|
|
1128
|
+
except NotFoundError as e:
|
|
1129
|
+
print(f"Not found: {e}")
|
|
1130
|
+
except StrapiError as e:
|
|
1131
|
+
print(f"Strapi error: {e}")
|
|
1132
|
+
```
|
|
1133
|
+
|
|
1134
|
+
All exceptions inherit from `StrapiError`, making it easy to catch all package-specific errors while still allowing precise handling of specific error types.
|
|
1135
|
+
|
|
949
1136
|
## Development
|
|
950
1137
|
|
|
951
1138
|
### Setup
|
|
@@ -1045,7 +1232,7 @@ This project is in active development. Currently implemented:
|
|
|
1045
1232
|
- **Query Builder**: `StrapiQuery` fluent API with full type safety
|
|
1046
1233
|
- **Typed Client Methods**: `get_one()`, `get_many()`, `create()`, `update()`, `remove()`
|
|
1047
1234
|
- **Dependency Injection**: Full DI support with protocols for testability
|
|
1048
|
-
- **
|
|
1235
|
+
- **Full test coverage** with type-safe query building
|
|
1049
1236
|
|
|
1050
1237
|
### ✅ Phase 3: Media Operations (Complete)
|
|
1051
1238
|
- **Media Upload**: Single and batch file uploads with metadata
|
|
@@ -1061,13 +1248,19 @@ This project is in active development. Currently implemented:
|
|
|
1061
1248
|
- **Media Export**: Download and package media files
|
|
1062
1249
|
- **Content Import**: Import with ID mapping and relation resolution
|
|
1063
1250
|
- **Schema Caching**: Efficient content type metadata handling
|
|
1064
|
-
- **
|
|
1251
|
+
- **85% overall test coverage** with 460 passing tests
|
|
1252
|
+
|
|
1253
|
+
### ✅ Phase 5: Schema Introspection (Complete)
|
|
1254
|
+
- **Content-Type Builder API**: List content types, components, and full schemas
|
|
1255
|
+
- **UID Utilities**: Convert UIDs to endpoints, singularize, build admin URLs
|
|
1256
|
+
- **SEO Detection**: Detect SEO configuration patterns in schemas
|
|
1257
|
+
- **86% overall test coverage** with 528 passing tests
|
|
1065
1258
|
|
|
1066
|
-
### 🚧 Phase
|
|
1259
|
+
### 🚧 Phase 6: Advanced Features (Planned)
|
|
1067
1260
|
- Bulk operations with streaming
|
|
1068
|
-
- Content type introspection
|
|
1069
1261
|
- Advanced retry strategies
|
|
1070
1262
|
- Rate limiting
|
|
1263
|
+
- GraphQL support
|
|
1071
1264
|
|
|
1072
1265
|
### Key Features
|
|
1073
1266
|
- **Type-Safe**: Full Pydantic validation and mypy strict mode compliance
|
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
strapi_kit/__init__.py,sha256=
|
|
1
|
+
strapi_kit/__init__.py,sha256=z4BR2eysdjTvsFaTqyUX0aPnSODMC2MyhdpvtCgWHVY,2177
|
|
2
2
|
strapi_kit/__version__.py,sha256=oLc_AUMPwiL7J2vgrvXdzVqbSQl2hqkPZ6dNfUx1lTU,478
|
|
3
|
-
strapi_kit/_version.py,sha256=
|
|
4
|
-
strapi_kit/config_provider.py,sha256=
|
|
3
|
+
strapi_kit/_version.py,sha256=pBZsQt6tlL02W-ri--X_4JCubpAK7jjCSnOmUp_isjc,704
|
|
4
|
+
strapi_kit/config_provider.py,sha256=Eky8mH6XgvgrwzsQuAc4gPpbPby_miycxqQH175rlU4,11864
|
|
5
5
|
strapi_kit/protocols.py,sha256=wMeGSFCSxeamv2YDzWWWSVJtiGrm__1Xg00QighEbQ4,10971
|
|
6
6
|
strapi_kit/auth/__init__.py,sha256=VhjbOiyBVSafz3lf2a43bnbSm0J8PG-lguIKHlRplx8,117
|
|
7
7
|
strapi_kit/auth/api_token.py,sha256=FntOxnf18ZdF0YwGjt0J6DM9tlxmIGZGIplqkLvstl0,1419
|
|
8
8
|
strapi_kit/cache/__init__.py,sha256=MpqVNsjbE6_QGEwyxZ80h-PFkB8NzDv7xGxJK1g5agQ,126
|
|
9
9
|
strapi_kit/cache/schema_cache.py,sha256=cmZBS2E0m0YyxpqS7_Z9evDqu_JZxQH086Vv7th7140,6552
|
|
10
10
|
strapi_kit/client/__init__.py,sha256=R9Ux5bCret4mnXItnFh5MxYlMOjoS4bepPX1KpNSs5w,216
|
|
11
|
-
strapi_kit/client/async_client.py,sha256=
|
|
12
|
-
strapi_kit/client/base.py,sha256=
|
|
13
|
-
strapi_kit/client/sync_client.py,sha256=
|
|
14
|
-
strapi_kit/exceptions/__init__.py,sha256=
|
|
15
|
-
strapi_kit/exceptions/errors.py,sha256=
|
|
11
|
+
strapi_kit/client/async_client.py,sha256=GUWFfUABcm6tJgWb9CaoYGhfEu7lmZx_nKUr0v97tJ4,39021
|
|
12
|
+
strapi_kit/client/base.py,sha256=jITcMtDPNpup60yHAbdn7jzATz-ccQv5l1WuefPJ-00,19567
|
|
13
|
+
strapi_kit/client/sync_client.py,sha256=bJGzhdTedIl2nnZqjzASEyejiOHM8-_AlubItp_IqcY,36078
|
|
14
|
+
strapi_kit/exceptions/__init__.py,sha256=lGjEMAbbKO4MXIodY6jxF5x0WerbSZEnYL_r990tzXM,748
|
|
15
|
+
strapi_kit/exceptions/errors.py,sha256=Yc051k-3tCmT7ybJjQXs9V_i6bh0pY4xW6zmTT7i4PQ,5328
|
|
16
16
|
strapi_kit/export/__init__.py,sha256=s1_1e75FodxpzaC8oWmrXNBUKIXt_0wuhQk5Iz2YUpY,340
|
|
17
|
-
strapi_kit/export/exporter.py,sha256=
|
|
17
|
+
strapi_kit/export/exporter.py,sha256=F3ow3NlyutdC-yc-cGZwyAoIVCu-8UnbQyOSrBR4QV0,14056
|
|
18
18
|
strapi_kit/export/importer.py,sha256=8ReQK7UivJGJU78W8RfPCwLSEGcYURzsNlVuI2fvugE,23010
|
|
19
19
|
strapi_kit/export/media_handler.py,sha256=xmx06M4ehtpNpVDwwuppwGpLwRd9s2M-NNnQ7I1T5Pk,11014
|
|
20
20
|
strapi_kit/export/relation_resolver.py,sha256=bXsrY80JWdvzmfFZc0UIpluReg9BWWBdr5SXhEqlaCs,5660
|
|
21
|
-
strapi_kit/models/__init__.py,sha256=
|
|
21
|
+
strapi_kit/models/__init__.py,sha256=zm-V86_4yWVS0LGezajQvK0lALmHiZtX8o0tC0QVBk0,3441
|
|
22
22
|
strapi_kit/models/bulk.py,sha256=g1swXgk8nWE_C-u6LIwKJzk2E5xmqMxDMQgY6SzxY7Q,2100
|
|
23
23
|
strapi_kit/models/config.py,sha256=Nq1pWlDc50wSV3RvQseKG688zlHw8vlNFRZqAPtvj0Q,4543
|
|
24
|
+
strapi_kit/models/content_type.py,sha256=AIONiPq6-ZyNdoAygiR1_ynh-s2d5ti2GvtmnaktzMs,4150
|
|
24
25
|
strapi_kit/models/enums.py,sha256=sxxlBNwOyxasqI7hwTanrv1kppseIkNUf-3SJF15TH8,2939
|
|
25
|
-
strapi_kit/models/export_format.py,sha256=
|
|
26
|
+
strapi_kit/models/export_format.py,sha256=x8cH-uktCaUVxOJCVtLdS1gs3NpNqTqExWQa5wWoEqc,5351
|
|
26
27
|
strapi_kit/models/import_options.py,sha256=aRjWSI2ZOPl8j0ZiLlR8TfAjLrpzn7HBpK1LQ3Rt1IA,4795
|
|
27
28
|
strapi_kit/models/schema.py,sha256=qNU7v_HF0AESDqmmKmMy_ERPOI-zUqFCujlAjTZ1Lo8,2489
|
|
28
29
|
strapi_kit/models/request/__init__.py,sha256=RvuVgPvc2tAx9A_Esh04SZZ5Oi1GFiYpxdg90TLsd6A,54
|
|
@@ -30,7 +31,7 @@ strapi_kit/models/request/fields.py,sha256=VrPyf0Pg_EQ3z2IyzBhaw_4fr7N5VWJRcN2Li
|
|
|
30
31
|
strapi_kit/models/request/filters.py,sha256=3qMzI8cTMfYCFWRAGMbw6DmEBtD2yUWB4UswABQavR4,19274
|
|
31
32
|
strapi_kit/models/request/pagination.py,sha256=hXFp534JutocVgWN0L0kInwSVGmhzhCJGTPdNzpJpUc,5244
|
|
32
33
|
strapi_kit/models/request/populate.py,sha256=xYjOFdauqxHtIEaYI5w-hXeX92TcfIdYGybJzrSdxYA,9399
|
|
33
|
-
strapi_kit/models/request/query.py,sha256=
|
|
34
|
+
strapi_kit/models/request/query.py,sha256=3s9TQlskxCb6ShCj9Lyu6Se4whRpuaxsriZukPAdPDQ,15074
|
|
34
35
|
strapi_kit/models/request/sort.py,sha256=BJqBt5ZEw3LkyHWfKHmQ7NtOtZMWFP3tNxdgbrsSJhw,4654
|
|
35
36
|
strapi_kit/models/response/__init__.py,sha256=1Cn009-Zp-vLcRSV-E65TaszK1b09qCVi6_LNKHBMNo,56
|
|
36
37
|
strapi_kit/models/response/base.py,sha256=mutKKPSUMdd4Jsg7bv18bad9OwNUdKHjutHDloz9_5E,1982
|
|
@@ -42,14 +43,15 @@ strapi_kit/models/response/relation.py,sha256=wZb4HIwM6RChZmFDbtKgLjunGS1dauxwm8
|
|
|
42
43
|
strapi_kit/models/response/v4.py,sha256=7i-HmNIkL6alyM0o7Y-u3v57O8ROMYH4w0HH95_p9iw,1996
|
|
43
44
|
strapi_kit/models/response/v5.py,sha256=bXHK4TH15aUy3ssxZZBz2myI6JR4BYnrSRWitju1HoQ,1838
|
|
44
45
|
strapi_kit/operations/__init__.py,sha256=9tUk9gZQQThF93jXjB38XM20rPCfp6QVhgmiYTC28AY,355
|
|
45
|
-
strapi_kit/operations/media.py,sha256=
|
|
46
|
-
strapi_kit/operations/streaming.py,sha256=
|
|
46
|
+
strapi_kit/operations/media.py,sha256=26eUo-o6UDtHOKNuVc8bvoXht037-bH114glLvk-RQg,7498
|
|
47
|
+
strapi_kit/operations/streaming.py,sha256=A6Czlq_c2yIc7vQMx4OwLURBgdTPnnOfa80z-Mw5pMQ,4796
|
|
47
48
|
strapi_kit/parsers/__init__.py,sha256=-4WSHKbFhnbOB4j7MF2qyktgkb6t8RY3slTYKV4vhvg,142
|
|
48
49
|
strapi_kit/parsers/version_detecting.py,sha256=i6Wh7NSQYPWSv0GR63ZJLuPF6BqFwQ_Y7J3q7l7h1JQ,6421
|
|
49
|
-
strapi_kit/utils/__init__.py,sha256=
|
|
50
|
-
strapi_kit/utils/rate_limiter.py,sha256=
|
|
51
|
-
strapi_kit/utils/
|
|
52
|
-
strapi_kit
|
|
53
|
-
strapi_kit-0.0.
|
|
54
|
-
strapi_kit-0.0.
|
|
55
|
-
strapi_kit-0.0.
|
|
50
|
+
strapi_kit/utils/__init__.py,sha256=FFSuu9W6Yt1r0OEU55bs9zLz2RuAy0wCVPfzN2BRz7E,823
|
|
51
|
+
strapi_kit/utils/rate_limiter.py,sha256=c-oAgCILG-6nrjhxIXEx3sKqRgkxOHcNJE496ix7aVA,6367
|
|
52
|
+
strapi_kit/utils/seo.py,sha256=p1CR3NGPJfarLosqRa3PAgigS9l9IB_LXUMjaZBXDeM,9317
|
|
53
|
+
strapi_kit/utils/uid.py,sha256=XjZ7tTPpiAiVzxylmwCE7aMPZKXhF_uL7ZwFotYLSZs,6102
|
|
54
|
+
strapi_kit-0.0.3.dist-info/METADATA,sha256=tKu7Xae8xYsdokePSiZvURE1d4mbSStMDbSNwCZze2E,38005
|
|
55
|
+
strapi_kit-0.0.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
56
|
+
strapi_kit-0.0.3.dist-info/licenses/LICENSE,sha256=lN0YUtXlAFBt9MNYr2F0GJEYdprxDOTIqcVhKxMsaTI,1067
|
|
57
|
+
strapi_kit-0.0.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|