issues-fs 0.3.0__py3-none-any.whl → 0.4.0__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.
Files changed (77) hide show
  1. issues_fs/issues/Issue__Path__Config.py +25 -0
  2. issues_fs/issues/__init__.py +3 -0
  3. issues_fs/issues/graph_services/Comments__Service.py +235 -0
  4. issues_fs/issues/graph_services/Graph__Repository.py +307 -0
  5. issues_fs/issues/graph_services/Graph__Repository__Factory.py +106 -0
  6. issues_fs/issues/graph_services/Link__Service.py +227 -0
  7. issues_fs/issues/graph_services/Node__Service.py +392 -0
  8. issues_fs/issues/graph_services/Type__Service.py +209 -0
  9. issues_fs/issues/graph_services/__init__.py +3 -0
  10. issues_fs/issues/phase_1/Issue__Children__Service.py +340 -0
  11. issues_fs/issues/phase_1/Root__Issue__Service.py +137 -0
  12. issues_fs/issues/phase_1/Root__Selection__Service.py +310 -0
  13. issues_fs/issues/phase_1/__init__.py +3 -0
  14. issues_fs/issues/status/Git__Status__Service.py +115 -0
  15. issues_fs/issues/status/Index__Status__Service.py +131 -0
  16. issues_fs/issues/status/Server__Status__Service.py +113 -0
  17. issues_fs/issues/status/Storage__Status__Service.py +75 -0
  18. issues_fs/issues/status/Types__Status__Service.py +75 -0
  19. issues_fs/issues/status/__init__.py +3 -0
  20. issues_fs/issues/storage/Path__Handler__Graph_Node.py +185 -0
  21. issues_fs/issues/storage/Path__Handler__Issues.py +57 -0
  22. issues_fs/issues/storage/__init__.py +3 -0
  23. issues_fs/schemas/__init__.py +0 -0
  24. issues_fs/schemas/enums/Enum__Comment__Author.py +10 -0
  25. issues_fs/schemas/enums/Enum__Graph__Storage__Backend.py +8 -0
  26. issues_fs/schemas/enums/Enum__Issue__Status.py +13 -0
  27. issues_fs/schemas/enums/__init__.py +3 -0
  28. issues_fs/schemas/graph/Safe_Str__Graph_Types.py +63 -0
  29. issues_fs/schemas/graph/Schema__Global__Index.py +16 -0
  30. issues_fs/schemas/graph/Schema__Graph__Link.py +8 -0
  31. issues_fs/schemas/graph/Schema__Graph__Node.py +10 -0
  32. issues_fs/schemas/graph/Schema__Graph__Response.py +21 -0
  33. issues_fs/schemas/graph/Schema__Link__Create__Request.py +12 -0
  34. issues_fs/schemas/graph/Schema__Link__Create__Response.py +15 -0
  35. issues_fs/schemas/graph/Schema__Link__Delete__Response.py +16 -0
  36. issues_fs/schemas/graph/Schema__Link__List__Response.py +15 -0
  37. issues_fs/schemas/graph/Schema__Link__Type.py +20 -0
  38. issues_fs/schemas/graph/Schema__Node.py +43 -0
  39. issues_fs/schemas/graph/Schema__Node__Create__Request.py +19 -0
  40. issues_fs/schemas/graph/Schema__Node__Create__Response.py +14 -0
  41. issues_fs/schemas/graph/Schema__Node__Delete__Response.py +15 -0
  42. issues_fs/schemas/graph/Schema__Node__Link.py +17 -0
  43. issues_fs/schemas/graph/Schema__Node__List__Response.py +16 -0
  44. issues_fs/schemas/graph/Schema__Node__Summary.py +15 -0
  45. issues_fs/schemas/graph/Schema__Node__Type.py +28 -0
  46. issues_fs/schemas/graph/Schema__Node__Update__Request.py +18 -0
  47. issues_fs/schemas/graph/Schema__Node__Update__Response.py +14 -0
  48. issues_fs/schemas/graph/Schema__Property__Definition.py +27 -0
  49. issues_fs/schemas/graph/Schema__Type__Index.py +16 -0
  50. issues_fs/schemas/graph/Schema__Type__Summary.py +13 -0
  51. issues_fs/schemas/graph/__init__.py +0 -0
  52. issues_fs/schemas/identifiers/Comment_Id.py +5 -0
  53. issues_fs/schemas/identifiers/Issue_Id.py +13 -0
  54. issues_fs/schemas/identifiers/__init__.py +0 -0
  55. issues_fs/schemas/issues/Schema__Comment.py +61 -0
  56. issues_fs/schemas/issues/__init__.py +0 -0
  57. issues_fs/schemas/issues/phase_1/Schema__Issue__Children.py +85 -0
  58. issues_fs/schemas/issues/phase_1/Schema__Root.py +60 -0
  59. issues_fs/schemas/issues/phase_1/__init__.py +0 -0
  60. issues_fs/schemas/safe_str/Safe_Str__Hex_Color.py +10 -0
  61. issues_fs/schemas/safe_str/Safe_Str__Issue_Id.py +14 -0
  62. issues_fs/schemas/safe_str/Safe_Str__Issue__Node__Description.py +15 -0
  63. issues_fs/schemas/safe_str/Safe_Str__Label_Name.py +9 -0
  64. issues_fs/schemas/safe_str/__init__.py +0 -0
  65. issues_fs/schemas/status/Schema__API__Info.py +15 -0
  66. issues_fs/schemas/status/Schema__Git__Status.py +21 -0
  67. issues_fs/schemas/status/Schema__Index__Status.py +22 -0
  68. issues_fs/schemas/status/Schema__Server__Status.py +28 -0
  69. issues_fs/schemas/status/Schema__Storage__Status.py +23 -0
  70. issues_fs/schemas/status/Schema__Types__Status.py +30 -0
  71. issues_fs/schemas/status/__init__.py +0 -0
  72. issues_fs/version +1 -1
  73. {issues_fs-0.3.0.dist-info → issues_fs-0.4.0.dist-info}/METADATA +2 -1
  74. issues_fs-0.4.0.dist-info/RECORD +79 -0
  75. issues_fs-0.3.0.dist-info/RECORD +0 -8
  76. {issues_fs-0.3.0.dist-info → issues_fs-0.4.0.dist-info}/LICENSE +0 -0
  77. {issues_fs-0.3.0.dist-info → issues_fs-0.4.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,85 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Schema__Issue__Children - Request/response schemas for child issue operations
3
+ # Phase 1: Supports adding children and converting to hierarchical structure
4
+ # ═══════════════════════════════════════════════════════════════════════════════
5
+
6
+ from typing import List
7
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
8
+ from osbot_utils.type_safe.primitives.core.Safe_UInt import Safe_UInt
9
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Text import Safe_Str__Text
10
+ from osbot_utils.type_safe.primitives.domains.files.safe_str.Safe_Str__File__Path import Safe_Str__File__Path
11
+
12
+ # todo: refactor all/most of the the Safe_Str__Text into domain specific type safe primitives
13
+
14
+ # ═══════════════════════════════════════════════════════════════════════════════
15
+ # Create Child Request
16
+ # ═══════════════════════════════════════════════════════════════════════════════
17
+
18
+ class Schema__Issue__Child__Create(Type_Safe): # Request to create child issue
19
+ issue_type : Safe_Str__Text # Type: task, bug, feature, etc.
20
+ title : Safe_Str__Text # Issue title
21
+ description : Safe_Str__Text # Optional description
22
+ status : Safe_Str__Text # Optional status (defaults to type's default)
23
+
24
+
25
+ # ═══════════════════════════════════════════════════════════════════════════════
26
+ # Child Issue Response
27
+ # ═══════════════════════════════════════════════════════════════════════════════
28
+
29
+ class Schema__Issue__Child__Response(Type_Safe): # Response after creating child
30
+ success : bool
31
+ path : Safe_Str__File__Path # Relative path to child
32
+ label : Safe_Str__Text # Generated label (e.g., "Task-1")
33
+ issue_type : Safe_Str__Text # Issue type
34
+ title : Safe_Str__Text # Issue title
35
+ message : Safe_Str__Text # Error message if failed
36
+
37
+
38
+ # ═══════════════════════════════════════════════════════════════════════════════
39
+ # Child Summary (for list response)
40
+ # ═══════════════════════════════════════════════════════════════════════════════
41
+
42
+ class Schema__Issue__Child__Summary(Type_Safe): # Summary of a child issue
43
+ path : Safe_Str__File__Path # Relative path
44
+ label : Safe_Str__Text # Issue label
45
+ title : Safe_Str__Text # Issue title
46
+ issue_type : Safe_Str__Text # Issue type
47
+ status : Safe_Str__Text = '' # Current status
48
+
49
+
50
+ # ═══════════════════════════════════════════════════════════════════════════════
51
+ # List Children Response
52
+ # ═══════════════════════════════════════════════════════════════════════════════
53
+
54
+ class Schema__Issue__Children__List__Response(Type_Safe): # Response listing children
55
+ success : bool = False
56
+ children : List[dict] = None # List of child summaries
57
+ total : Safe_UInt = Safe_UInt(0) # Total count
58
+ message : Safe_Str__Text = '' # Error message if failed
59
+
60
+
61
+ # ═══════════════════════════════════════════════════════════════════════════════
62
+ # Convert to New Structure Response
63
+ # ═══════════════════════════════════════════════════════════════════════════════
64
+
65
+ class Schema__Issue__Convert__Response(Type_Safe): # Response after converting issue
66
+ success : bool
67
+ converted : bool # True if actually converted (vs already had issues/)
68
+ issues_path : Safe_Str__File__Path # Path to issues/ folder
69
+ message : Safe_Str__Text # Status message
70
+
71
+
72
+ class Schema__Add_Child__Request(Type_Safe): # Request body for adding child
73
+ parent_path : Safe_Str__File__Path # Path to parent issue
74
+ issue_type : Safe_Str__Text # Child issue type
75
+ title : Safe_Str__Text # Child title
76
+ description : Safe_Str__Text = '' # Optional description
77
+ status : Safe_Str__Text = '' # Optional status
78
+
79
+
80
+ class Schema__List_Children__Request(Type_Safe): # Request for listing children
81
+ parent_path : Safe_Str__File__Path # Path to parent issue
82
+
83
+
84
+ class Schema__Convert__Request(Type_Safe): # Request for converting issue
85
+ issue_path : Safe_Str__File__Path # Path to issue to convert
@@ -0,0 +1,60 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Schema__Root - Data types for root selection feature
3
+ # Phase 1: Allows any folder with issue.json/node.json to be selected as root
4
+ # ═══════════════════════════════════════════════════════════════════════════════
5
+
6
+ from typing import List
7
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
8
+ from osbot_utils.type_safe.primitives.core.Safe_UInt import Safe_UInt
9
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Text import Safe_Str__Text
10
+ from osbot_utils.type_safe.primitives.domains.files.safe_str.Safe_Str__File__Path import Safe_Str__File__Path
11
+
12
+ from issues_fs.schemas.graph.Safe_Str__Graph_Types import Safe_Str__Node_Type, Safe_Str__Node_Label
13
+
14
+
15
+ # ═══════════════════════════════════════════════════════════════════════════════
16
+ # Root Candidate Schema
17
+ # ═══════════════════════════════════════════════════════════════════════════════
18
+
19
+ class Schema__Root__Candidate(Type_Safe): # A folder that can serve as root
20
+ path : Safe_Str__File__Path # Relative path from .issues/
21
+ label : Safe_Str__Text # Issue label or "Root"
22
+ title : Safe_Str__Text # Issue title for display
23
+ issue_type : Safe_Str__Text # bug, task, feature, git-repo, etc.
24
+ depth : Safe_UInt = Safe_UInt(0) # Nesting depth from .issues/
25
+ has_issues : bool = False # Has issues/ subfolder (new arch)
26
+ has_children: Safe_UInt = Safe_UInt(0) # Count of child issues
27
+
28
+
29
+ # ═══════════════════════════════════════════════════════════════════════════════
30
+ # Request Schemas
31
+ # ═══════════════════════════════════════════════════════════════════════════════
32
+
33
+ class Schema__Root__Select__Request(Type_Safe): # Request to select a root
34
+ path : Safe_Str__File__Path # Path to select as root
35
+
36
+
37
+ # ═══════════════════════════════════════════════════════════════════════════════
38
+ # Response Schemas
39
+ # ═══════════════════════════════════════════════════════════════════════════════
40
+
41
+ class Schema__Root__Current__Response(Type_Safe): # Current root response
42
+ success : bool
43
+ path : Safe_Str__File__Path # Current root path
44
+ label : Safe_Str__Text # Current root label
45
+ issue_type : Safe_Str__Text # Current root type
46
+ message : Safe_Str__Text
47
+
48
+
49
+ class Schema__Root__List__Response(Type_Safe): # List of root candidates
50
+ success : bool
51
+ roots : List[Schema__Root__Candidate] = None
52
+ total : Safe_UInt
53
+ message : Safe_Str__Text
54
+
55
+
56
+ class Schema__Root__Select__Response(Type_Safe): # Response after selecting root
57
+ success : bool
58
+ path : Safe_Str__File__Path # Selected path
59
+ previous : Safe_Str__File__Path # Previous root path
60
+ message : Safe_Str__Text
File without changes
@@ -0,0 +1,10 @@
1
+ import re
2
+ from osbot_utils.type_safe.primitives.core.Safe_Str import Safe_Str
3
+ from osbot_utils.type_safe.primitives.core.enums.Enum__Safe_Str__Regex_Mode import Enum__Safe_Str__Regex_Mode
4
+
5
+
6
+ class Safe_Str__Hex_Color(Safe_Str): # Hex color like #22c55e
7
+ max_length = 7
8
+ regex = re.compile(r'^#[0-9A-Fa-f]{6}$')
9
+ regex_mode = Enum__Safe_Str__Regex_Mode.MATCH # Pattern defines VALID format
10
+ strict_validation = True # Required with MATCH mode
@@ -0,0 +1,14 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Safe_Str__Issue_Id - Type-safe issue identifier in Issue-NNN format
3
+ # ═══════════════════════════════════════════════════════════════════════════════
4
+
5
+ import re
6
+ from osbot_utils.type_safe.primitives.core.Safe_Str import Safe_Str
7
+ from osbot_utils.type_safe.primitives.core.enums.Enum__Safe_Str__Regex_Mode import Enum__Safe_Str__Regex_Mode
8
+
9
+
10
+ class Safe_Str__Issue_Id(Safe_Str): # Issue ID in Issue-NNN format
11
+ max_length = 20
12
+ regex = re.compile(r'^[Ii]ssue-\d{1,5}$')
13
+ regex_mode = Enum__Safe_Str__Regex_Mode.MATCH # Pattern defines VALID format
14
+ strict_validation = True # Required with MATCH mode
@@ -0,0 +1,15 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Safe_Str__Multiline - Safe string type that preserves newlines
3
+ # For description fields, comments, and other multiline text content
4
+ # ═══════════════════════════════════════════════════════════════════════════════
5
+
6
+ import re
7
+ from osbot_utils.type_safe.primitives.core.Safe_Str import Safe_Str
8
+ from osbot_utils.type_safe.primitives.core.enums.Enum__Safe_Str__Regex_Mode import Enum__Safe_Str__Regex_Mode
9
+
10
+
11
+ class Safe_Str__Issue__Node__Description(Safe_Str): # Multiline text (preserves newlines)
12
+ max_length = 50000 # Allow long descriptions
13
+ regex = re.compile(r'[^\x20-\x7E\n\r\t]') # Allow printable ASCII + newlines + tabs
14
+ regex_mode = Enum__Safe_Str__Regex_Mode.REPLACE # Replace invalid chars
15
+ allow_empty = True # Empty is valid
@@ -0,0 +1,9 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Safe_Str__Label_Name - Type-safe label name with alphanumeric and hyphens
3
+ # ═══════════════════════════════════════════════════════════════════════════════
4
+
5
+ from osbot_utils.type_safe.primitives.domains.identifiers.safe_str.Safe_Str__Id import Safe_Str__Id
6
+
7
+
8
+ class Safe_Str__Label_Name(Safe_Str__Id): # Label name like "bug", "feature"
9
+ pass
File without changes
@@ -0,0 +1,15 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Schema__API__Info - API version and build information
3
+ # ═══════════════════════════════════════════════════════════════════════════════
4
+
5
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
6
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Text import Safe_Str__Text
7
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Version import Safe_Str__Version
8
+
9
+
10
+ class Schema__API__Info(Type_Safe): # API version info
11
+ version : Safe_Str__Version = '' # Semantic version (e.g., "0.2.4")
12
+ build_date : Safe_Str__Text = '' # Build timestamp
13
+ environment : Safe_Str__Text = '' # dev, staging, production
14
+ python_version: Safe_Str__Text = '' # Python runtime version
15
+ api_name : Safe_Str__Text = '' # API service name
@@ -0,0 +1,21 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Schema__Git__Status - Git repository integration status
3
+ # ═══════════════════════════════════════════════════════════════════════════════
4
+
5
+ from typing import List
6
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
7
+ from osbot_utils.type_safe.primitives.core.Safe_UInt import Safe_UInt
8
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Text import Safe_Str__Text
9
+
10
+
11
+ class Schema__Git__Status(Type_Safe): # Git integration status
12
+ is_git_repo : bool = False # Inside a git repository
13
+ git_root : Safe_Str__Text = '' # Git root directory
14
+ current_branch : Safe_Str__Text = '' # Current branch name
15
+ current_commit : Safe_Str__Text = '' # Current commit hash (short)
16
+ is_dirty : bool = False # Has uncommitted changes
17
+ issues_tracked : bool = False # .issues/ in git
18
+ untracked_issues : Safe_UInt = Safe_UInt(0) # Untracked issue files
19
+ modified_issues : Safe_UInt = Safe_UInt(0) # Modified issue files
20
+ remote_name : Safe_Str__Text = '' # Remote name (origin)
21
+ remote_url : Safe_Str__Text = '' # Remote URL # todo: this create an Type_Safe primitive that supports git urls (which could have @)
@@ -0,0 +1,22 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Schema__Index__Status - Index and node statistics
3
+ # ═══════════════════════════════════════════════════════════════════════════════
4
+
5
+ from typing import List
6
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
7
+ from osbot_utils.type_safe.primitives.core.Safe_UInt import Safe_UInt
8
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Text import Safe_Str__Text
9
+
10
+
11
+ class Schema__Type__Count(Type_Safe): # Count for a single type
12
+ node_type : Safe_Str__Text = '' # Type name
13
+ count : Safe_UInt = Safe_UInt(0) # Number of nodes
14
+ next_index : Safe_UInt = Safe_UInt(1) # Next index to assign
15
+
16
+
17
+ class Schema__Index__Status(Type_Safe): # Index statistics
18
+ global_index_exists : bool = False # _index.json exists
19
+ total_nodes : Safe_UInt = Safe_UInt(0) # Total across all types
20
+ #total_links : Safe_UInt = Safe_UInt(0) # Total relationships
21
+ type_counts : List[Schema__Type__Count] # Per-type counts
22
+ last_updated : Safe_Str__Text = '' # Last index update time
@@ -0,0 +1,28 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Schema__Server__Status - Comprehensive server status information
3
+ # Aggregates all status components into a single response
4
+ # ═══════════════════════════════════════════════════════════════════════════════
5
+
6
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
7
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Text import Safe_Str__Text
8
+ from osbot_utils.type_safe.primitives.domains.identifiers.safe_int.Timestamp_Now import Timestamp_Now
9
+ from issues_fs.schemas.status.Schema__API__Info import Schema__API__Info
10
+ from issues_fs.schemas.status.Schema__Git__Status import Schema__Git__Status
11
+ from issues_fs.schemas.status.Schema__Index__Status import Schema__Index__Status
12
+ from issues_fs.schemas.status.Schema__Storage__Status import Schema__Storage__Status
13
+ from issues_fs.schemas.status.Schema__Types__Status import Schema__Types__Status
14
+
15
+
16
+ class Schema__Server__Status(Type_Safe): # Full server status
17
+ timestamp : Timestamp_Now # Status check timestamp
18
+ api : Schema__API__Info = None # API version info
19
+ storage : Schema__Storage__Status = None # Storage backend status
20
+ types : Schema__Types__Status = None # Type configuration
21
+ index : Schema__Index__Status = None # Index statistics
22
+ git : Schema__Git__Status = None # Git integration status
23
+
24
+
25
+ class Schema__Server__Status__Response(Type_Safe): # API response wrapper
26
+ success : bool = False # Operation success
27
+ status : Schema__Server__Status = None # Full status data
28
+ message : Safe_Str__Text = '' # Error message if failed
@@ -0,0 +1,23 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Schema__Storage__Status - Memory-FS storage backend information
3
+ # ═══════════════════════════════════════════════════════════════════════════════
4
+
5
+ from typing import List
6
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
7
+ from osbot_utils.type_safe.primitives.core.Safe_UInt import Safe_UInt
8
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Text import Safe_Str__Text
9
+ from osbot_utils.type_safe.primitives.domains.files.safe_str.Safe_Str__File__Path import Safe_Str__File__Path
10
+
11
+
12
+ class Schema__Storage__Capability(Type_Safe): # Single capability info
13
+ name : Safe_Str__Text = '' # Capability name
14
+ supported : bool = False # Whether supported
15
+ description : Safe_Str__Text = '' # What it does
16
+
17
+
18
+ class Schema__Storage__Status(Type_Safe): # Memory-FS status info
19
+ backend_type : Safe_Str__Text # memory, local_disk, sqlite, zip
20
+ root_path : Safe_Str__File__Path = None # Root path (if applicable)
21
+ is_connected : bool # Storage accessible
22
+ is_writable : bool # Can write to storage
23
+ file_count : Safe_UInt # Number of files
@@ -0,0 +1,30 @@
1
+ # ═══════════════════════════════════════════════════════════════════════════════
2
+ # Schema__Types__Status - Node and link type configuration status
3
+ # ═══════════════════════════════════════════════════════════════════════════════
4
+
5
+ from typing import List
6
+ from osbot_utils.type_safe.Type_Safe import Type_Safe
7
+ from osbot_utils.type_safe.primitives.core.Safe_UInt import Safe_UInt
8
+ from osbot_utils.type_safe.primitives.domains.common.safe_str.Safe_Str__Text import Safe_Str__Text
9
+ from issues_fs.schemas.safe_str.Safe_Str__Hex_Color import Safe_Str__Hex_Color
10
+
11
+
12
+ class Schema__Node__Type__Summary(Type_Safe): # Node type summary
13
+ name : Safe_Str__Text = '' # Type name (bug, task, etc.)
14
+ display_name : Safe_Str__Text = '' # Display name
15
+ color : Safe_Str__Hex_Color = '' # Hex color
16
+ status_count : Safe_UInt = Safe_UInt(0) # Number of statuses defined
17
+
18
+
19
+ class Schema__Link__Type__Summary(Type_Safe): # Link type summary
20
+ verb : Safe_Str__Text = '' # Verb (blocks, has-task)
21
+ inverse_verb : Safe_Str__Text = '' # Inverse verb
22
+ is_symmetric : bool = False # verb == inverse_verb
23
+
24
+
25
+ class Schema__Types__Status(Type_Safe): # Type configuration status
26
+ is_initialized : bool # Types loaded
27
+ node_type_count : Safe_UInt # Number of node types
28
+ link_type_count : Safe_UInt # Number of link types
29
+ node_types : List[Schema__Node__Type__Summary] # Node type summaries
30
+ link_types : List[Schema__Link__Type__Summary] # Link type summaries
File without changes
issues_fs/version CHANGED
@@ -1 +1 @@
1
- v0.3.0
1
+ v0.4.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: issues_fs
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: Issues-FS
5
5
  Home-page: https://github.com/owasp-sbot/Issues-FS
6
6
  License: Apache 2.0
@@ -10,6 +10,7 @@ Requires-Python: >=3.12,<4.0
10
10
  Classifier: License :: Other/Proprietary License
11
11
  Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.12
13
+ Requires-Dist: memory_fs
13
14
  Requires-Dist: osbot-utils
14
15
  Project-URL: Repository, https://github.com/owasp-sbot/Issues-FS
15
16
  Description-Content-Type: text/markdown
@@ -0,0 +1,79 @@
1
+ issues_fs/__init__.py,sha256=0onJhZJAiKrCd5_0tDVQWym1rZ6vuZb_ZsOvh9Ptkjc,53
2
+ issues_fs/issues/Issue__Path__Config.py,sha256=Irrh-E86_obOIiGYogxvZpZMwi8V8BVZf7R40hK40-U,1686
3
+ issues_fs/issues/__init__.py,sha256=kKzdVtUK71LUGkW_ue_kXLJsg84clIOrXS0_lHpRf44,514
4
+ issues_fs/issues/graph_services/Comments__Service.py,sha256=JD_ZNl0yqEFdGtCkspRRib6puoHX67KcF3eXaEKnw74,14935
5
+ issues_fs/issues/graph_services/Graph__Repository.py,sha256=K0jQrOa87rSr1hdtrKg2iQAsrtlyaguk0Mh3dRReWIM,18126
6
+ issues_fs/issues/graph_services/Graph__Repository__Factory.py,sha256=PId7O40Pst7a3mdub5lgJHr9g9izelB3ZhFlN2INUo4,7669
7
+ issues_fs/issues/graph_services/Link__Service.py,sha256=ap7x7WbZ9dyVF9FRXuFgFdcuiIaZ_x_7Squ-Aw-aoJY,14230
8
+ issues_fs/issues/graph_services/Node__Service.py,sha256=-9cy7I-QSwPRZXA0CTMeJfi60NK_PpQqnimJjLOcr0s,23519
9
+ issues_fs/issues/graph_services/Type__Service.py,sha256=8WlXq2yYhKkaP8OHgeLXXn8kQUz49yv8M_e4KfLOZRM,14763
10
+ issues_fs/issues/graph_services/__init__.py,sha256=kKzdVtUK71LUGkW_ue_kXLJsg84clIOrXS0_lHpRf44,514
11
+ issues_fs/issues/phase_1/Issue__Children__Service.py,sha256=PKQcdxMNESY6ls6L3YprBPNAWgxtF8kZXqeCcixzXM8,21372
12
+ issues_fs/issues/phase_1/Root__Issue__Service.py,sha256=ybRPqmdR5wlvWKRvfIXwFU2s_kZWkNI5hjI-OLWhjVc,9368
13
+ issues_fs/issues/phase_1/Root__Selection__Service.py,sha256=xdRsAQ9lvj7-AA3AS6ijPJPyl5yBu0ceI5S68kO0n48,19338
14
+ issues_fs/issues/phase_1/__init__.py,sha256=kKzdVtUK71LUGkW_ue_kXLJsg84clIOrXS0_lHpRf44,514
15
+ issues_fs/issues/status/Git__Status__Service.py,sha256=CzjBzBUL67H7XLak82Iy8WcfFi2M71qvWRAlVbZ-y7A,7782
16
+ issues_fs/issues/status/Index__Status__Service.py,sha256=7Lj3-H0ErVonfSqtGkAfF9lWC_UYw0wqeJjFUHCFOM8,8035
17
+ issues_fs/issues/status/Server__Status__Service.py,sha256=ol-5bziO5gdKUm_HodR0WqHOkY72FWT6sQmALvR5o6k,8173
18
+ issues_fs/issues/status/Storage__Status__Service.py,sha256=sUp6sJoqsqBdi6b7MTk6NXLyMgUwcGICbVbUXt8ppYg,5214
19
+ issues_fs/issues/status/Types__Status__Service.py,sha256=272nua6gCaRsdHFqB2SMNaHTWq3SQlfX7iMJCU5kGcc,5640
20
+ issues_fs/issues/status/__init__.py,sha256=kKzdVtUK71LUGkW_ue_kXLJsg84clIOrXS0_lHpRf44,514
21
+ issues_fs/issues/storage/Path__Handler__Graph_Node.py,sha256=_delfZlf7NfXzoLblDzMOmYgmrOh4QH_YC6Ge7U99yA,12691
22
+ issues_fs/issues/storage/Path__Handler__Issues.py,sha256=iVk6YkE0hAUmk29cvqB_jYerWABx3AJH0coVcnU1txk,4285
23
+ issues_fs/issues/storage/__init__.py,sha256=IljmuJSP3HFsjqcnOL_9QKdzYUu3JKH4-KHDaicBz8k,555
24
+ issues_fs/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ issues_fs/schemas/enums/Enum__Comment__Author.py,sha256=cMEWZWBHSYg7XzJJUF0g8LbgzpK9UKqKHK_ep6qpdrM,791
26
+ issues_fs/schemas/enums/Enum__Graph__Storage__Backend.py,sha256=mHW3KJgXr5bnqunAzzFE666c40I0I8XQRaVaMDqdH_w,530
27
+ issues_fs/schemas/enums/Enum__Issue__Status.py,sha256=ZBiQUyw5eHC06x58ahn9Oe0vcgw3VPAnzTQ8JsEv-Do,864
28
+ issues_fs/schemas/enums/__init__.py,sha256=BjlS_E9JCgPoOIrp5yaASD-1d5oh-gBB_wfmQC7-OPw,513
29
+ issues_fs/schemas/graph/Safe_Str__Graph_Types.py,sha256=FxaaiQTMCPQkS4lqzLNW8ZDaQd8fMnneaWXWY6f9g1Y,5277
30
+ issues_fs/schemas/graph/Schema__Global__Index.py,sha256=7D7yvtEHiFqhT5g7ZRuc05VDdepoeQe8OMk3xPcj7IE,1585
31
+ issues_fs/schemas/graph/Schema__Graph__Link.py,sha256=wUmyf9rb_C6G2yVE3a4SNNTBwtPhhdzV_TY3tNWNUrU,553
32
+ issues_fs/schemas/graph/Schema__Graph__Node.py,sha256=GQUMxXWFWSMtQsXMflthKR7tcbMRaSY_IKQkvZVS2xk,627
33
+ issues_fs/schemas/graph/Schema__Graph__Response.py,sha256=xJQOr92bVOwx5U-CjLjYQEsm8L3Lzcxr1O6aAIdA-pA,1652
34
+ issues_fs/schemas/graph/Schema__Link__Create__Request.py,sha256=7TijKxLQilNNPuVtFFg3oYbFr6cuX_XR6048XOTLoF8,1143
35
+ issues_fs/schemas/graph/Schema__Link__Create__Response.py,sha256=oZnQVdz63JV_UkHIBMudbwOL9-zV_TC09dCRqXmqY0k,1452
36
+ issues_fs/schemas/graph/Schema__Link__Delete__Response.py,sha256=zYXsC_K9tAHxHuB1jpxqFyaEn84X6xLc2Ybp0Y-17Qg,1538
37
+ issues_fs/schemas/graph/Schema__Link__List__Response.py,sha256=oBWMeXyCqe0BwpSUtxjAcL2blXuW8uOKDpFZp8MdUIQ,1417
38
+ issues_fs/schemas/graph/Schema__Link__Type.py,sha256=FrClbjZi3d02SIboldff_bjN2BHI8JtTq1eOP7JijFg,1994
39
+ issues_fs/schemas/graph/Schema__Node.py,sha256=h5s8AKXUBeSDmezKEUNSmyQ5Q7EdlqpVjJisMszkV3g,4069
40
+ issues_fs/schemas/graph/Schema__Node__Create__Request.py,sha256=FME_4ITf84K5U-m3XtnlEBMBfYthhuKRTGreYZKcXek,1907
41
+ issues_fs/schemas/graph/Schema__Node__Create__Response.py,sha256=0xteFZp_UVsAC5bcbXb0GIKtWhFFNC2r5qqA6BuMcZI,1290
42
+ issues_fs/schemas/graph/Schema__Node__Delete__Response.py,sha256=mBwBMzk8mxt48yErAc5Lk1VDUx5jnjSLfaD_dACwTds,1417
43
+ issues_fs/schemas/graph/Schema__Node__Link.py,sha256=Vqi53LzGAoqPZRgbqgTNpLVCNT1U2kSw8ExZp0ZCA8g,1684
44
+ issues_fs/schemas/graph/Schema__Node__List__Response.py,sha256=tDoptCqvFDZ66JZHK02hFFbwxs8f7GCOVrZ4A3pnmxo,1522
45
+ issues_fs/schemas/graph/Schema__Node__Summary.py,sha256=LZBgfisN1dH7_MUKyxWXlasCXj1XEkvcdy4sVL66pHM,1440
46
+ issues_fs/schemas/graph/Schema__Node__Type.py,sha256=byRXJdmL4r0AE0Wy5GZ6BWUhIbiA2yXPZad75hT-u1c,2641
47
+ issues_fs/schemas/graph/Schema__Node__Update__Request.py,sha256=PbDv9FE4gIPR3LLyWBlXUK8n8ehmbDcKxH2KGur7AB8,1778
48
+ issues_fs/schemas/graph/Schema__Node__Update__Response.py,sha256=1Aku8zu8yEusRdfDu_XLd4hQLyzq3474Gi0os0AwOHU,1299
49
+ issues_fs/schemas/graph/Schema__Property__Definition.py,sha256=eaoYYAXLrjDJrU8j48YYw_5m9Y5geF_MjWkO9YjhNfE,2468
50
+ issues_fs/schemas/graph/Schema__Type__Index.py,sha256=Y7stBg-BgkmJLz_Se3Cz_xncGS6D6J1k5JwTBVhCKpw,1540
51
+ issues_fs/schemas/graph/Schema__Type__Summary.py,sha256=0WfUNzWOoZP0B4bM4v77hVlVfXHAps-KCI5cP6-3P24,1186
52
+ issues_fs/schemas/graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ issues_fs/schemas/identifiers/Comment_Id.py,sha256=zQrbjecusjsCZ4yQrvoL64Sx3ON95hL1q9A2uIeMHss,99
54
+ issues_fs/schemas/identifiers/Issue_Id.py,sha256=aOSjG2XqVQf3A58dxg9BnoL9Cq9zUFvSLnMU8uNClAo,579
55
+ issues_fs/schemas/identifiers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ issues_fs/schemas/issues/Schema__Comment.py,sha256=Qv0YYmJUSz4IzviVGs2Jlo8OKUyYgo-w-RA_-ebifDU,4599
57
+ issues_fs/schemas/issues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
+ issues_fs/schemas/issues/phase_1/Schema__Issue__Children.py,sha256=vhVKKDFsw1plDi4jSaQEUYksPKBj2nTMT_5iI9M4Bm4,7654
59
+ issues_fs/schemas/issues/phase_1/Schema__Root.py,sha256=CzW5UNUV5TYFvxl0dxZYohp3uAWDSdVUYSO6d3J3s9I,4980
60
+ issues_fs/schemas/issues/phase_1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
+ issues_fs/schemas/safe_str/Safe_Str__Hex_Color.py,sha256=kLEaz4V0bbQXzplq1xoYnLT1IzSQWi8bgXrkFjbuHOo,642
62
+ issues_fs/schemas/safe_str/Safe_Str__Issue_Id.py,sha256=5hjEYBmpMe9eCoC9I61cboSu2qtXWXFOgTXy8ArJebI,1199
63
+ issues_fs/schemas/safe_str/Safe_Str__Issue__Node__Description.py,sha256=-HFMzWTCc_uEfuZ7Pp2PJZWAyfEJuL8yZRMLx_nZDlc,1366
64
+ issues_fs/schemas/safe_str/Safe_Str__Label_Name.py,sha256=fJGZgX19p4pGYnh4Pc24mcjma_P80dVNJWfYXmMRGRA,787
65
+ issues_fs/schemas/safe_str/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
+ issues_fs/schemas/status/Schema__API__Info.py,sha256=rxSFdKTqwZog0zAgbC7rENj4QVuoPbH5e1jWG6J1E7s,1474
67
+ issues_fs/schemas/status/Schema__Git__Status.py,sha256=LIqvg58Oh6NxLWiz8tl5W-dF-2DsB8NwhZKvPtoRO9k,2163
68
+ issues_fs/schemas/status/Schema__Index__Status.py,sha256=fshb0QoEXmvrdXrYU2MEId6C-rR5elLLL_fc7SmucEE,1949
69
+ issues_fs/schemas/status/Schema__Server__Status.py,sha256=EQmMPfIhsPEzkNPyAu2hIjF1OhJSDBFGPjSHYA1La0g,2516
70
+ issues_fs/schemas/status/Schema__Storage__Status.py,sha256=OpGGBAFaHRGCU9qX6mlj6WJVM2aewHfcf9T55nkEh6M,1993
71
+ issues_fs/schemas/status/Schema__Types__Status.py,sha256=QmNgl8RIKaREPgaRs38ehm3mn61eZMRegoV_WUfcGcg,2447
72
+ issues_fs/schemas/status/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
+ issues_fs/utils/Version.py,sha256=orB_CjJtnaw2ZvWuThE6SPdQF5Qpxuuz-qKcgO3UVlc,734
74
+ issues_fs/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ issues_fs/version,sha256=zBGyinqIPmH_DS6p1sYeDvoOFlX6a5F143lEW-yMHFU,7
76
+ issues_fs-0.4.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
77
+ issues_fs-0.4.0.dist-info/METADATA,sha256=U4CIGP81WuFCpPCG4sqcOpbxq2lrtMh9sMg1Jc0Gip4,12712
78
+ issues_fs-0.4.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
79
+ issues_fs-0.4.0.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- issues_fs/__init__.py,sha256=0onJhZJAiKrCd5_0tDVQWym1rZ6vuZb_ZsOvh9Ptkjc,53
2
- issues_fs/utils/Version.py,sha256=orB_CjJtnaw2ZvWuThE6SPdQF5Qpxuuz-qKcgO3UVlc,734
3
- issues_fs/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- issues_fs/version,sha256=4apo-i85Xj_wQXKgNhV_C-B8om5MrdAetyEDJ1TebHE,7
5
- issues_fs-0.3.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
6
- issues_fs-0.3.0.dist-info/METADATA,sha256=JgZ1eEd4Aqu9E0GGUMzVrqT8CSz0fCf9nZCrOQ8Tp0w,12687
7
- issues_fs-0.3.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
8
- issues_fs-0.3.0.dist-info/RECORD,,