feat: Add report generation module for tracking metadata changes
- Implemented `report.nim` to create structured reports on metadata modifications. - Added functionality to merge reports and convert them to formatted strings. docs: Create prompt documentation for Markdown parser project - Added `prompt.md` detailing the requirements and functionalities for the Markdown parser. - Included specifications, usage examples, and testing guidelines. docs: Generate code review report for Markdown parser - Created `rapport_revue_code.md` outlining security vulnerabilities, code quality issues, and suggested improvements. - Provided a detailed analysis of the codebase with actionable recommendations. test: Add test data for Markdown parser - Included various Markdown files and a JPG image in `test_data` to simulate different scenarios. - Ensured that the parser can handle both valid and invalid metadata. chore: Add version management file - Created `version.nim` for automatic versioning of the Markdown parser. - Established constants for major, minor, patch, and build versions.
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
```mermaid
|
||||
flowchart TD
|
||||
%% Main Program Flow
|
||||
Start([Start]) --> ParseCmdLine[Parse Command Line Arguments]
|
||||
ParseCmdLine --> ValidateConfig[Validate Configuration]
|
||||
ValidateConfig --> ShowHelp{Show Help?}
|
||||
ValidateConfig --> ShowVersion{Show Version?}
|
||||
|
||||
ShowHelp -->|Yes| DisplayHelp[Display Help Text] --> Exit([Exit])
|
||||
ShowVersion -->|Yes| DisplayVersion[Display Version] --> Exit
|
||||
|
||||
ShowHelp -->|No| ShowVersion
|
||||
ShowVersion -->|No| ProcessFiles[Process Markdown Files]
|
||||
|
||||
%% Processing Files
|
||||
ProcessFiles --> SourceDir{Source Directory Specified?}
|
||||
|
||||
%% Source Directory Branch
|
||||
SourceDir -->|Yes| BackupSource[Backup & Rename Source Directory]
|
||||
BackupSource --> WalkSourceDir[Walk Directory Recursively]
|
||||
WalkSourceDir --> ProcessEachFile[Process Each File]
|
||||
ProcessEachFile --> IsMarkdown{Is Markdown File?}
|
||||
IsMarkdown -->|Yes| ProcessMarkdown[Process Markdown File]
|
||||
IsMarkdown -->|No| CopyFile[Copy File to Target]
|
||||
ProcessMarkdown --> CleanupTemp[Clean Up Temporary Directory]
|
||||
CopyFile --> CleanupTemp
|
||||
|
||||
%% Individual Files Branch
|
||||
SourceDir -->|No| FilesSpecified{Files Specified?}
|
||||
FilesSpecified -->|Yes| CreateTempDir[Create Temporary Directory]
|
||||
CreateTempDir --> ProcessEachSpecifiedFile[Process Each Specified File]
|
||||
ProcessEachSpecifiedFile --> IsSpecifiedMarkdown{Is Markdown File?}
|
||||
IsSpecifiedMarkdown -->|Yes| ProcessSpecifiedMarkdown[Process Markdown File]
|
||||
IsSpecifiedMarkdown -->|No| CopySpecifiedFile[Copy File to Target]
|
||||
ProcessSpecifiedMarkdown --> BackupTempDir[Backup Temporary Directory]
|
||||
CopySpecifiedFile --> BackupTempDir
|
||||
BackupTempDir --> CleanupTempDir[Clean Up Temporary Directory]
|
||||
|
||||
%% Process Markdown File Subflow
|
||||
subgraph ProcessMarkdownFileFlow[Process Markdown File]
|
||||
ReadFile[Read File Content] --> ExtractMetadata[Extract YAML Metadata]
|
||||
ExtractMetadata --> HasMetadata{Has Metadata?}
|
||||
HasMetadata -->|Yes| UseExistingMetadata[Use Existing Metadata]
|
||||
HasMetadata -->|No| AnalyzeEnabled{AI Analysis Enabled?}
|
||||
AnalyzeEnabled -->|Yes| AnalyzeWithAI[Analyze Content with AI]
|
||||
AnalyzeEnabled -->|No| NoMetadata[No Metadata Added]
|
||||
AnalyzeWithAI --> GenerateMetadata[Generate Metadata]
|
||||
GenerateMetadata --> AddMetadataToContent[Add Metadata to Content]
|
||||
UseExistingMetadata --> WriteFile[Write Processed Content]
|
||||
AddMetadataToContent --> WriteFile
|
||||
NoMetadata --> WriteFile
|
||||
end
|
||||
|
||||
ProcessMarkdown -.-> ProcessMarkdownFileFlow
|
||||
ProcessSpecifiedMarkdown -.-> ProcessMarkdownFileFlow
|
||||
|
||||
%% AI Analysis Subflow
|
||||
subgraph AIAnalysisFlow[AI Analysis]
|
||||
LoadConfig[Load AI Configuration] --> GetActiveModel[Get Active AI Model]
|
||||
GetActiveModel --> IsModelAvailable{Is Model Available?}
|
||||
IsModelAvailable -->|Yes| PreparePrompt[Prepare AI Prompt]
|
||||
IsModelAvailable -->|No| ReturnEmpty[Return Empty Result]
|
||||
PreparePrompt --> SendRequest[Send API Request]
|
||||
SendRequest --> ParseResponse[Parse AI Response]
|
||||
ParseResponse --> ExtractTitleDescTags[Extract Title, Description, Tags]
|
||||
ExtractTitleDescTags --> ReturnResult[Return Analysis Result]
|
||||
end
|
||||
|
||||
AnalyzeWithAI -.-> AIAnalysisFlow
|
||||
|
||||
%% Final Steps
|
||||
CleanupTemp --> GenerateReport[Generate Processing Report]
|
||||
CleanupTempDir --> GenerateReport
|
||||
GenerateReport --> DisplayReport[Display Report]
|
||||
DisplayReport --> Exit
|
||||
|
||||
%% Styling
|
||||
classDef process fill:#a8d5ba,stroke:#178a44,stroke-width:1px;
|
||||
classDef decision fill:#ffda9e,stroke:#d86018,stroke-width:1px;
|
||||
classDef io fill:#aac4f5,stroke:#1155cc,stroke-width:1px;
|
||||
classDef terminal fill:#f5b5c8,stroke:#be0d35,stroke-width:1px;
|
||||
classDef subgraphStyle fill:#f5f5f5,stroke:#666666,stroke-width:1px;
|
||||
|
||||
class Start,Exit terminal;
|
||||
class ParseCmdLine,BackupSource,WalkSourceDir,ProcessEachFile,ProcessMarkdown,CopyFile,CleanupTemp,CreateTempDir,ProcessEachSpecifiedFile,ProcessSpecifiedMarkdown,CopySpecifiedFile,BackupTempDir,CleanupTempDir,GenerateReport,DisplayReport process;
|
||||
class ShowHelp,ShowVersion,SourceDir,IsMarkdown,FilesSpecified,IsSpecifiedMarkdown,HasMetadata,AnalyzeEnabled,IsModelAvailable decision;
|
||||
class DisplayHelp,DisplayVersion,ReadFile,ExtractMetadata,UseExistingMetadata,AnalyzeWithAI,GenerateMetadata,AddMetadataToContent,WriteFile,NoMetadata,LoadConfig,GetActiveModel,PreparePrompt,SendRequest,ParseResponse,ExtractTitleDescTags,ReturnResult,ReturnEmpty io;
|
||||
class ProcessMarkdownFileFlow,AIAnalysisFlow subgraphStyle;
|
||||
```
|
||||
@@ -0,0 +1,133 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Visualisation du diagramme Mermaid</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 20px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
h1 {
|
||||
color: #333;
|
||||
text-align: center;
|
||||
}
|
||||
.mermaid {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin: 30px 0;
|
||||
background-color: white;
|
||||
padding: 20px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Diagramme de flux du Markdown Parser</h1>
|
||||
|
||||
<div class="mermaid">
|
||||
flowchart TD
|
||||
%% Main Program Flow
|
||||
Start([Start]) --> ParseCmdLine[Parse Command Line Arguments]
|
||||
ParseCmdLine --> ValidateConfig[Validate Configuration]
|
||||
ValidateConfig --> ShowHelp{Show Help?}
|
||||
ValidateConfig --> ShowVersion{Show Version?}
|
||||
|
||||
ShowHelp -->|Yes| DisplayHelp[Display Help Text] --> Exit([Exit])
|
||||
ShowVersion -->|Yes| DisplayVersion[Display Version] --> Exit
|
||||
|
||||
ShowHelp -->|No| ShowVersion
|
||||
ShowVersion -->|No| ProcessFiles[Process Markdown Files]
|
||||
|
||||
%% Processing Files
|
||||
ProcessFiles --> SourceDir{Source Directory Specified?}
|
||||
|
||||
%% Source Directory Branch
|
||||
SourceDir -->|Yes| BackupSource[Backup & Rename Source Directory]
|
||||
BackupSource --> WalkSourceDir[Walk Directory Recursively]
|
||||
WalkSourceDir --> ProcessEachFile[Process Each File]
|
||||
ProcessEachFile --> IsMarkdown{Is Markdown File?}
|
||||
IsMarkdown -->|Yes| ProcessMarkdown[Process Markdown File]
|
||||
IsMarkdown -->|No| CopyFile[Copy File to Target]
|
||||
ProcessMarkdown --> CleanupTemp[Clean Up Temporary Directory]
|
||||
CopyFile --> CleanupTemp
|
||||
|
||||
%% Individual Files Branch
|
||||
SourceDir -->|No| FilesSpecified{Files Specified?}
|
||||
FilesSpecified -->|Yes| CreateTempDir[Create Temporary Directory]
|
||||
CreateTempDir --> ProcessEachSpecifiedFile[Process Each Specified File]
|
||||
ProcessEachSpecifiedFile --> IsSpecifiedMarkdown{Is Markdown File?}
|
||||
IsSpecifiedMarkdown -->|Yes| ProcessSpecifiedMarkdown[Process Markdown File]
|
||||
IsSpecifiedMarkdown -->|No| CopySpecifiedFile[Copy File to Target]
|
||||
ProcessSpecifiedMarkdown --> BackupTempDir[Backup Temporary Directory]
|
||||
CopySpecifiedFile --> BackupTempDir
|
||||
BackupTempDir --> CleanupTempDir[Clean Up Temporary Directory]
|
||||
|
||||
%% Process Markdown File Subflow
|
||||
subgraph ProcessMarkdownFileFlow[Process Markdown File]
|
||||
ReadFile[Read File Content] --> ExtractMetadata[Extract YAML Metadata]
|
||||
ExtractMetadata --> HasMetadata{Has Metadata?}
|
||||
HasMetadata -->|Yes| UseExistingMetadata[Use Existing Metadata]
|
||||
HasMetadata -->|No| AnalyzeEnabled{AI Analysis Enabled?}
|
||||
AnalyzeEnabled -->|Yes| AnalyzeWithAI[Analyze Content with AI]
|
||||
AnalyzeEnabled -->|No| NoMetadata[No Metadata Added]
|
||||
AnalyzeWithAI --> GenerateMetadata[Generate Metadata]
|
||||
GenerateMetadata --> AddMetadataToContent[Add Metadata to Content]
|
||||
UseExistingMetadata --> WriteFile[Write Processed Content]
|
||||
AddMetadataToContent --> WriteFile
|
||||
NoMetadata --> WriteFile
|
||||
end
|
||||
|
||||
ProcessMarkdown -.-> ProcessMarkdownFileFlow
|
||||
ProcessSpecifiedMarkdown -.-> ProcessMarkdownFileFlow
|
||||
|
||||
%% AI Analysis Subflow
|
||||
subgraph AIAnalysisFlow[AI Analysis]
|
||||
LoadConfig[Load AI Configuration] --> GetActiveModel[Get Active AI Model]
|
||||
GetActiveModel --> IsModelAvailable{Is Model Available?}
|
||||
IsModelAvailable -->|Yes| PreparePrompt[Prepare AI Prompt]
|
||||
IsModelAvailable -->|No| ReturnEmpty[Return Empty Result]
|
||||
PreparePrompt --> SendRequest[Send API Request]
|
||||
SendRequest --> ParseResponse[Parse AI Response]
|
||||
ParseResponse --> ExtractTitleDescTags[Extract Title, Description, Tags]
|
||||
ExtractTitleDescTags --> ReturnResult[Return Analysis Result]
|
||||
end
|
||||
|
||||
AnalyzeWithAI -.-> AIAnalysisFlow
|
||||
|
||||
%% Final Steps
|
||||
CleanupTemp --> GenerateReport[Generate Processing Report]
|
||||
CleanupTempDir --> GenerateReport
|
||||
GenerateReport --> DisplayReport[Display Report]
|
||||
DisplayReport --> Exit
|
||||
|
||||
%% Styling
|
||||
classDef process fill:#a8d5ba,stroke:#178a44,stroke-width:1px;
|
||||
classDef decision fill:#ffda9e,stroke:#d86018,stroke-width:1px;
|
||||
classDef io fill:#aac4f5,stroke:#1155cc,stroke-width:1px;
|
||||
classDef terminal fill:#f5b5c8,stroke:#be0d35,stroke-width:1px;
|
||||
classDef subgraphStyle fill:#f5f5f5,stroke:#666666,stroke-width:1px;
|
||||
|
||||
class Start,Exit terminal;
|
||||
class ParseCmdLine,BackupSource,WalkSourceDir,ProcessEachFile,ProcessMarkdown,CopyFile,CleanupTemp,CreateTempDir,ProcessEachSpecifiedFile,ProcessSpecifiedMarkdown,CopySpecifiedFile,BackupTempDir,CleanupTempDir,GenerateReport,DisplayReport process;
|
||||
class ShowHelp,ShowVersion,SourceDir,IsMarkdown,FilesSpecified,IsSpecifiedMarkdown,HasMetadata,AnalyzeEnabled,IsModelAvailable decision;
|
||||
class DisplayHelp,DisplayVersion,ReadFile,ExtractMetadata,UseExistingMetadata,AnalyzeWithAI,GenerateMetadata,AddMetadataToContent,WriteFile,NoMetadata,LoadConfig,GetActiveModel,PreparePrompt,SendRequest,ParseResponse,ExtractTitleDescTags,ReturnResult,ReturnEmpty io;
|
||||
class ProcessMarkdownFileFlow,AIAnalysisFlow subgraphStyle;
|
||||
</div>
|
||||
|
||||
<script>
|
||||
mermaid.initialize({
|
||||
startOnLoad: true,
|
||||
theme: 'default',
|
||||
securityLevel: 'loose',
|
||||
flowchart: {
|
||||
useMaxWidth: false,
|
||||
htmlLabels: true
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user