content-core 1.2.1__tar.gz → 1.2.3__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 content-core might be problematic. Click here for more details.
- {content_core-1.2.1 → content_core-1.2.3}/.gitignore +3 -1
- {content_core-1.2.1 → content_core-1.2.3}/PKG-INFO +1 -1
- {content_core-1.2.1 → content_core-1.2.3}/pyproject.toml +1 -1
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/processors/url.py +2 -2
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/processors/youtube.py +4 -3
- {content_core-1.2.1 → content_core-1.2.3}/uv.lock +1 -1
- content_core-1.2.1/mcp.md +0 -248
- content_core-1.2.1/test.py +0 -16
- {content_core-1.2.1 → content_core-1.2.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/.github/workflows/claude-code-review.yml +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/.github/workflows/claude.yml +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/.github/workflows/publish.yml +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/.python-version +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/CONTRIBUTING.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/LICENSE +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/Makefile +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/README.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/docs/macos.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/docs/mcp.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/docs/processors.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/docs/raycast.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/docs/usage.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/prompts/content/cleanup.jinja +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/prompts/content/summarize.jinja +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/.eslintrc.json +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/CHANGELOG.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/README.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/assets/command-icon.png +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/package-lock.json +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/package.json +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/raycast-env.d.ts +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/src/extract-content.tsx +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/src/quick-extract.tsx +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/src/summarize-content.tsx +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/src/utils/content-core.ts +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/src/utils/types.ts +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/raycast-content-core/tsconfig.json +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/cc_config.yaml +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/common/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/common/exceptions.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/common/state.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/common/types.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/common/utils.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/config.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/cleanup/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/cleanup/core.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/extraction/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/extraction/graph.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/identification/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/summary/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/summary/core.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/logging.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/mcp/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/mcp/server.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/models.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/models_config.yaml +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/notebooks/run.ipynb +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/notebooks/urls.ipynb +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/processors/audio.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/processors/docling.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/processors/office.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/processors/pdf.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/processors/text.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/processors/video.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/py.typed +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/templated_message.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/tools/__init__.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/tools/cleanup.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/tools/extract.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/src/content_core/tools/summarize.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.docx +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.epub +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.md +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.mp3 +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.mp4 +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.pdf +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.pptx +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.txt +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file.xlsx +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/input_content/file_audio.mp3 +0 -0
- {content_core-1.2.1 → content_core-1.2.3/tests/input_content}/new_pdf.pdf +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/integration/test_cli.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/integration/test_extraction.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/unit/test_config.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/unit/test_docling.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/unit/test_mcp_server.py +0 -0
- {content_core-1.2.1 → content_core-1.2.3}/tests/unit/test_pymupdf_ocr.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "content-core"
|
|
3
|
-
version = "1.2.
|
|
3
|
+
version = "1.2.3"
|
|
4
4
|
description = "Extract what matters from any media source. Available as Python Library, macOS Service, CLI and MCP Server"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
homepage = "https://github.com/lfnovo/content-core"
|
|
@@ -38,10 +38,10 @@ async def url_provider(state: ProcessSourceState):
|
|
|
38
38
|
or mime in SUPPORTED_FITZ_TYPES
|
|
39
39
|
or mime in SUPPORTED_OFFICE_TYPES
|
|
40
40
|
):
|
|
41
|
-
logger.
|
|
41
|
+
logger.debug(f"Identified type for {url}: {mime}")
|
|
42
42
|
return_dict["identified_type"] = mime
|
|
43
43
|
else:
|
|
44
|
-
logger.
|
|
44
|
+
logger.debug(f"Identified type for {url}: article")
|
|
45
45
|
return_dict["identified_type"] = "article"
|
|
46
46
|
return return_dict
|
|
47
47
|
|
|
@@ -3,12 +3,13 @@ import ssl
|
|
|
3
3
|
|
|
4
4
|
import aiohttp
|
|
5
5
|
from bs4 import BeautifulSoup
|
|
6
|
+
from youtube_transcript_api import YouTubeTranscriptApi # type: ignore
|
|
7
|
+
from youtube_transcript_api.formatters import TextFormatter # type: ignore
|
|
8
|
+
|
|
6
9
|
from content_core.common import ProcessSourceState
|
|
7
10
|
from content_core.common.exceptions import NoTranscriptFound
|
|
8
11
|
from content_core.config import CONFIG
|
|
9
12
|
from content_core.logging import logger
|
|
10
|
-
from youtube_transcript_api import YouTubeTranscriptApi # type: ignore
|
|
11
|
-
from youtube_transcript_api.formatters import TextFormatter # type: ignore
|
|
12
13
|
|
|
13
14
|
ssl._create_default_https_context = ssl._create_unverified_context
|
|
14
15
|
|
|
@@ -172,7 +173,7 @@ async def extract_youtube_transcript(state: ProcessSourceState):
|
|
|
172
173
|
"""
|
|
173
174
|
|
|
174
175
|
assert state.url, "No URL provided"
|
|
175
|
-
logger.
|
|
176
|
+
logger.debug(f"Extracting transcript from URL: {state.url}")
|
|
176
177
|
languages = CONFIG.get("youtube_transcripts", {}).get(
|
|
177
178
|
"preferred_languages", ["en", "es", "pt"]
|
|
178
179
|
)
|
content_core-1.2.1/mcp.md
DELETED
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
# MCP Server Implementation Plan for Content Core
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
Implement a FastMCP server that exposes Content Core's extraction functionality through the Model Context Protocol (MCP). The server will provide a single tool `extract_content` that accepts either a URL or file path and returns extracted content in JSON format using the 'auto' engine.
|
|
5
|
-
|
|
6
|
-
## Architecture
|
|
7
|
-
|
|
8
|
-
### 1. Dependencies
|
|
9
|
-
```toml
|
|
10
|
-
# Add to pyproject.toml as optional dependency
|
|
11
|
-
[project.optional-dependencies]
|
|
12
|
-
mcp = ["fastmcp>=0.5.0"]
|
|
13
|
-
|
|
14
|
-
# Add script entry point for uvx
|
|
15
|
-
[project.scripts]
|
|
16
|
-
content-core-mcp = "content_core.mcp.server:main"
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
This allows users to install with MCP support using:
|
|
20
|
-
```bash
|
|
21
|
-
pip install content-core[mcp]
|
|
22
|
-
# or with uv
|
|
23
|
-
uv pip install content-core[mcp]
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### 2. Server Structure
|
|
27
|
-
```
|
|
28
|
-
src/content_core/
|
|
29
|
-
├── mcp/
|
|
30
|
-
│ ├── __init__.py
|
|
31
|
-
│ └── server.py # Main MCP server implementation
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### 3. Implementation Details
|
|
35
|
-
|
|
36
|
-
#### Server Setup (`server.py`)
|
|
37
|
-
```python
|
|
38
|
-
from fastmcp import FastMCP
|
|
39
|
-
from typing import Optional, Dict, Any
|
|
40
|
-
import content_core as cc
|
|
41
|
-
|
|
42
|
-
# Initialize MCP server
|
|
43
|
-
mcp = FastMCP("Content Core MCP Server")
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
#### Tool Definition
|
|
47
|
-
The `extract_content` tool will:
|
|
48
|
-
- Accept either `url` or `file_path` as optional parameters
|
|
49
|
-
- Validate that exactly one is provided
|
|
50
|
-
- Return extracted content in JSON format
|
|
51
|
-
- Use the 'auto' engine by default
|
|
52
|
-
|
|
53
|
-
```python
|
|
54
|
-
@mcp.tool
|
|
55
|
-
async def extract_content(
|
|
56
|
-
url: Optional[str] = None,
|
|
57
|
-
file_path: Optional[str] = None
|
|
58
|
-
) -> Dict[str, Any]:
|
|
59
|
-
"""
|
|
60
|
-
Extract content from a URL or file using Content Core's auto engine.
|
|
61
|
-
|
|
62
|
-
Args:
|
|
63
|
-
url: Optional URL to extract content from
|
|
64
|
-
file_path: Optional file path to extract content from
|
|
65
|
-
|
|
66
|
-
Returns:
|
|
67
|
-
JSON object containing extracted content and metadata
|
|
68
|
-
|
|
69
|
-
Raises:
|
|
70
|
-
ValueError: If neither or both url and file_path are provided
|
|
71
|
-
"""
|
|
72
|
-
# Implementation details below
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
#### Input Validation
|
|
76
|
-
- Ensure exactly one input source is provided
|
|
77
|
-
- Validate URL format if URL is provided
|
|
78
|
-
- Validate file existence if file_path is provided
|
|
79
|
-
|
|
80
|
-
#### Integration with Content Core
|
|
81
|
-
```python
|
|
82
|
-
# Build extraction request
|
|
83
|
-
extraction_request = {}
|
|
84
|
-
if url:
|
|
85
|
-
extraction_request["url"] = url
|
|
86
|
-
elif file_path:
|
|
87
|
-
extraction_request["file_path"] = file_path
|
|
88
|
-
|
|
89
|
-
# Use Content Core's extract_content with auto engine
|
|
90
|
-
result = await cc.extract_content(extraction_request)
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
#### Return Format
|
|
94
|
-
The tool will return a JSON structure containing:
|
|
95
|
-
```json
|
|
96
|
-
{
|
|
97
|
-
"source_type": "url" | "file",
|
|
98
|
-
"source": "<url or file_path>",
|
|
99
|
-
"content": "<extracted content>",
|
|
100
|
-
"metadata": {
|
|
101
|
-
"engine_used": "<actual engine used by auto>",
|
|
102
|
-
"content_type": "<detected content type>",
|
|
103
|
-
"extraction_time": "<ISO timestamp>",
|
|
104
|
-
// Additional metadata from Content Core
|
|
105
|
-
},
|
|
106
|
-
"success": true,
|
|
107
|
-
"error": null // or error message if extraction failed
|
|
108
|
-
}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
#### Error Handling
|
|
112
|
-
- Wrap extraction in try/except block
|
|
113
|
-
- Return structured error response on failure
|
|
114
|
-
- Log errors using Context if needed
|
|
115
|
-
- Handle specific Content Core exceptions
|
|
116
|
-
|
|
117
|
-
### 4. Running the Server
|
|
118
|
-
|
|
119
|
-
#### Entry Point (`main` function)
|
|
120
|
-
```python
|
|
121
|
-
def main():
|
|
122
|
-
"""Entry point for the MCP server."""
|
|
123
|
-
import sys
|
|
124
|
-
# Run with STDIO transport for MCP compatibility
|
|
125
|
-
mcp.run()
|
|
126
|
-
|
|
127
|
-
if __name__ == "__main__":
|
|
128
|
-
main()
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
#### Usage with uvx
|
|
132
|
-
Users can run the server directly with uvx (no installation required):
|
|
133
|
-
```bash
|
|
134
|
-
# Run the MCP server
|
|
135
|
-
uvx --from "content-core[mcp]" content-core-mcp
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
#### Claude Desktop Configuration
|
|
139
|
-
Add to `claude_desktop_config.json`:
|
|
140
|
-
```json
|
|
141
|
-
{
|
|
142
|
-
"mcpServers": {
|
|
143
|
-
"content-core": {
|
|
144
|
-
"command": "uvx",
|
|
145
|
-
"args": [
|
|
146
|
-
"--from",
|
|
147
|
-
"content-core[mcp]",
|
|
148
|
-
"content-core-mcp"
|
|
149
|
-
]
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
#### Alternative: Local Development
|
|
156
|
-
```bash
|
|
157
|
-
# Install with MCP support
|
|
158
|
-
uv pip install -e ".[mcp]"
|
|
159
|
-
|
|
160
|
-
# Run directly
|
|
161
|
-
content-core-mcp
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### 5. Testing Strategy
|
|
165
|
-
|
|
166
|
-
#### Unit Tests
|
|
167
|
-
- Test input validation logic
|
|
168
|
-
- Mock Content Core extraction calls
|
|
169
|
-
- Verify JSON response structure
|
|
170
|
-
|
|
171
|
-
#### Integration Tests
|
|
172
|
-
- Test with real URLs
|
|
173
|
-
- Test with various file types
|
|
174
|
-
- Verify auto engine selection works correctly
|
|
175
|
-
|
|
176
|
-
### 6. Documentation
|
|
177
|
-
|
|
178
|
-
#### Usage Example
|
|
179
|
-
```python
|
|
180
|
-
# Client code example
|
|
181
|
-
from fastmcp import Client
|
|
182
|
-
|
|
183
|
-
client = Client()
|
|
184
|
-
result = await client.call_tool(
|
|
185
|
-
"extract_content",
|
|
186
|
-
{"url": "https://example.com/article"}
|
|
187
|
-
)
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### 7. Configuration
|
|
191
|
-
|
|
192
|
-
#### Environment Variables
|
|
193
|
-
- Support existing Content Core environment variables
|
|
194
|
-
- Allow MCP-specific configuration if needed
|
|
195
|
-
|
|
196
|
-
#### Config File Support
|
|
197
|
-
- Use existing `cc_config.yaml` if present
|
|
198
|
-
- Allow override via MCP server initialization
|
|
199
|
-
|
|
200
|
-
### 8. Future Enhancements (Not in initial implementation)
|
|
201
|
-
- Add streaming support for large files
|
|
202
|
-
- Support for multiple URLs/files in one request
|
|
203
|
-
- Add content cleaning and summarization tools
|
|
204
|
-
- Support custom extraction engines per request
|
|
205
|
-
- Add resource endpoints for browsing extracted content
|
|
206
|
-
|
|
207
|
-
### 9. Implementation Steps
|
|
208
|
-
|
|
209
|
-
1. Create `mcp/` directory structure
|
|
210
|
-
2. Implement basic server with extract_content tool
|
|
211
|
-
3. Add input validation and error handling
|
|
212
|
-
4. Integrate with Content Core extraction
|
|
213
|
-
5. Format JSON response properly
|
|
214
|
-
6. Add comprehensive logging
|
|
215
|
-
7. Write unit tests
|
|
216
|
-
8. Write integration tests
|
|
217
|
-
9. Add documentation and examples
|
|
218
|
-
10. Test with various MCP clients
|
|
219
|
-
|
|
220
|
-
### 10. Key Considerations
|
|
221
|
-
|
|
222
|
-
- **Async First**: Use async/await throughout since Content Core is async
|
|
223
|
-
- **Error Messages**: Provide clear, actionable error messages
|
|
224
|
-
- **Performance**: Consider caching for repeated requests
|
|
225
|
-
- **Security**: Validate file paths to prevent directory traversal
|
|
226
|
-
- **Compatibility**: Ensure works with all Content Core extraction engines
|
|
227
|
-
|
|
228
|
-
### 11. Publishing and Distribution
|
|
229
|
-
|
|
230
|
-
#### PyPI Package
|
|
231
|
-
The MCP server will be included as an optional extra in the main content-core package:
|
|
232
|
-
- Users install with `pip install content-core[mcp]`
|
|
233
|
-
- The `content-core-mcp` command becomes available after installation
|
|
234
|
-
- Works seamlessly with `uvx` for zero-install usage
|
|
235
|
-
|
|
236
|
-
#### Benefits of uvx approach:
|
|
237
|
-
1. **No installation required**: Users can run directly with `uvx`
|
|
238
|
-
2. **Automatic updates**: Always uses the latest published version
|
|
239
|
-
3. **Isolation**: Runs in isolated environment, avoiding dependency conflicts
|
|
240
|
-
4. **Simple configuration**: Just add to `claude_desktop_config.json`
|
|
241
|
-
|
|
242
|
-
#### Example MCP server listing entry:
|
|
243
|
-
```yaml
|
|
244
|
-
name: content-core
|
|
245
|
-
description: Extract content from URLs and files using Content Core
|
|
246
|
-
commands:
|
|
247
|
-
- uvx --from "content-core[mcp]" content-core-mcp
|
|
248
|
-
```
|
content_core-1.2.1/test.py
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
|
|
3
|
-
from crawl4ai import *
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
async def main():
|
|
7
|
-
async with AsyncWebCrawler() as crawler:
|
|
8
|
-
result = await crawler.arun(
|
|
9
|
-
url="https://www.nbcnews.com/business",
|
|
10
|
-
)
|
|
11
|
-
print(result.markdown)
|
|
12
|
-
print(result.title)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if __name__ == "__main__":
|
|
16
|
-
asyncio.run(main())
|
|
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
|
|
File without changes
|
|
File without changes
|
{content_core-1.2.1 → content_core-1.2.3}/src/content_core/content/identification/__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
|