neuroglia-python 0.0.23__tar.gz → 0.1.0__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.
Files changed (60) hide show
  1. neuroglia_python-0.1.0/PKG-INFO +50 -0
  2. neuroglia_python-0.1.0/README.md +19 -0
  3. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/pyproject.toml +3 -1
  4. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/event_sourcing/abstractions.py +21 -1
  5. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/event_sourcing/event_store/event_store.py +9 -2
  6. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/event_sourcing/read_model_reconciliator.py +2 -2
  7. neuroglia_python-0.0.23/PKG-INFO +0 -127
  8. neuroglia_python-0.0.23/README.md +0 -98
  9. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/LICENSE +0 -0
  10. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/__init__.py +0 -0
  11. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/core/__init__.py +0 -0
  12. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/core/module_loader.py +0 -0
  13. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/core/operation_result.py +0 -0
  14. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/core/problem_details.py +0 -0
  15. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/core/type_extensions.py +0 -0
  16. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/core/type_finder.py +0 -0
  17. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/__init__.py +0 -0
  18. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/abstractions.py +0 -0
  19. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/__init__.py +0 -0
  20. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/abstractions.py +0 -0
  21. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/event_sourcing/__init__.py +0 -0
  22. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/event_sourcing/event_sourcing_repository.py +0 -0
  23. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/event_sourcing/event_store/__init__.py +0 -0
  24. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/memory/__init__.py +0 -0
  25. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/memory/memory_repository.py +0 -0
  26. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/mongo/__init__.py +0 -0
  27. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/infrastructure/mongo/mongo_repository.py +0 -0
  28. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/queries/generic/__init__.py +0 -0
  29. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/queries/generic/get_by_id_query.py +0 -0
  30. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/queries/generic/list_query.py +0 -0
  31. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/data/queryable.py +0 -0
  32. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/dependency_injection/__init__.py +0 -0
  33. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/dependency_injection/service_provider.py +0 -0
  34. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/eventing/cloud_events/__init__.py +0 -0
  35. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/eventing/cloud_events/cloud_event.py +0 -0
  36. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/eventing/cloud_events/decorators.py +0 -0
  37. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/eventing/cloud_events/infrastructure/__init__.py +0 -0
  38. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/eventing/cloud_events/infrastructure/cloud_event_bus.py +0 -0
  39. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/eventing/cloud_events/infrastructure/cloud_event_ingestor.py +0 -0
  40. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/eventing/cloud_events/infrastructure/cloud_event_middleware.py +0 -0
  41. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/eventing/cloud_events/infrastructure/cloud_event_publisher.py +0 -0
  42. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/expressions/__init__.py +0 -0
  43. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/expressions/javascript_expression_translator.py +0 -0
  44. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/hosting/__init__.py +0 -0
  45. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/hosting/abstractions.py +0 -0
  46. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/hosting/configuration/data_access_layer.py +0 -0
  47. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/hosting/web.py +0 -0
  48. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/integration/__init__.py +0 -0
  49. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/integration/models.py +0 -0
  50. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/mapping/__init__.py +0 -0
  51. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/mapping/mapper.py +0 -0
  52. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/mediation/__init__.py +0 -0
  53. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/mediation/mediator.py +0 -0
  54. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/mvc/__init__.py +0 -0
  55. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/mvc/controller_base.py +0 -0
  56. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/reactive/__init__.py +0 -0
  57. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/reactive/rx_async.py +0 -0
  58. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/serialization/__init__.py +0 -0
  59. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/serialization/abstractions.py +0 -0
  60. {neuroglia_python-0.0.23 → neuroglia_python-0.1.0}/src/neuroglia/serialization/json.py +0 -0
@@ -0,0 +1,50 @@
1
+ Metadata-Version: 2.1
2
+ Name: neuroglia-python
3
+ Version: 0.1.0
4
+ Summary: Port from .NET to Python of the Neuroglia Framework
5
+ License: Apache
6
+ Author: Charles d'Avernas
7
+ Author-email: charles.davernas@neuroglia.io
8
+ Requires-Python: >=3.12,<4.0
9
+ Classifier: License :: Other/Proprietary License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Requires-Dist: annotated-types (>=0.6.0,<0.7.0)
14
+ Requires-Dist: classy-fastapi (>=0.6.1,<0.7.0)
15
+ Requires-Dist: esdbclient (>=1.0.17,<2.0.0)
16
+ Requires-Dist: fastapi (>=0.109.2,<0.110.0)
17
+ Requires-Dist: grpcio (>=1.60.1,<2.0.0)
18
+ Requires-Dist: httpx (>=0.26.0,<0.27.0)
19
+ Requires-Dist: mkdocs (>=1.6.1,<2.0.0)
20
+ Requires-Dist: mkdocs-material (>=9.5.46,<10.0.0)
21
+ Requires-Dist: multipledispatch (>=1.0.0,<2.0.0)
22
+ Requires-Dist: pydantic-settings (>=2.2.0,<3.0.0)
23
+ Requires-Dist: pymongo (>=4.6.1,<5.0.0)
24
+ Requires-Dist: pytest (>=8.1.1,<9.0.0)
25
+ Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
26
+ Requires-Dist: rx (>=3.2.0,<4.0.0)
27
+ Requires-Dist: typing-extensions (>=4.9.0,<5.0.0)
28
+ Requires-Dist: uvicorn (>=0.27.1,<0.28.0)
29
+ Description-Content-Type: text/markdown
30
+
31
+ # Neuroglia Python Framework
32
+
33
+ A framework of libraries used to build modern Python V3 applications
34
+
35
+ ## Disclaimer
36
+
37
+ This project was the opportunity for me (cdavernas) to learn Python while porting some of the concepts and services of the .NET version of the Neuroglia Framework
38
+
39
+ ## Packaging
40
+
41
+ ```sh
42
+ # Set the version tag in pyproject.toml
43
+ # Commit changes
44
+
45
+ poetry build
46
+
47
+ poetry publish --repository gitlab -u <token-username> -p <token-password>
48
+
49
+ ```
50
+
@@ -0,0 +1,19 @@
1
+ # Neuroglia Python Framework
2
+
3
+ A framework of libraries used to build modern Python V3 applications
4
+
5
+ ## Disclaimer
6
+
7
+ This project was the opportunity for me (cdavernas) to learn Python while porting some of the concepts and services of the .NET version of the Neuroglia Framework
8
+
9
+ ## Packaging
10
+
11
+ ```sh
12
+ # Set the version tag in pyproject.toml
13
+ # Commit changes
14
+
15
+ poetry build
16
+
17
+ poetry publish --repository gitlab -u <token-username> -p <token-password>
18
+
19
+ ```
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "neuroglia-python"
3
- version = "0.0.23"
3
+ version = "0.1.0"
4
4
  description = "Port from .NET to Python of the Neuroglia Framework"
5
5
  authors = ["Charles d'Avernas <charles.davernas@neuroglia.io>"]
6
6
  license = "Apache"
@@ -25,6 +25,8 @@ rx = "^3.2.0"
25
25
  uvicorn = "^0.27.1"
26
26
  typing-extensions = "^4.9.0"
27
27
  pytest = "^8.1.1"
28
+ mkdocs = "^1.6.1"
29
+ mkdocs-material = "^9.5.46"
28
30
 
29
31
  [tool.poetry.group.dev.dependencies]
30
32
  pytest = "^8.0.1"
@@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
2
2
  from dataclasses import dataclass
3
3
  from datetime import datetime
4
4
  from enum import Enum
5
- from typing import Any, List, Optional, Type
5
+ from typing import Any, Callable, List, Optional, Type
6
6
  from neuroglia.data.abstractions import AggregateRoot
7
7
 
8
8
 
@@ -69,6 +69,23 @@ class EventRecord:
69
69
  ''' Gets a boolean indicating whether or not the recorded event is being replayed to its consumer/consumer group '''
70
70
 
71
71
 
72
+ @dataclass
73
+ class AckableEventRecord(EventRecord):
74
+ ''' Represents an ackable recorded event '''
75
+
76
+ _ack_delegate : Callable = None
77
+
78
+ _nack_delegate : Callable= None
79
+
80
+ async def ack_async(self) -> None:
81
+ ''' Acks the event record '''
82
+ self._ack_delegate()
83
+
84
+ async def nack_async(self) -> None:
85
+ ''' Nacks the event record'''
86
+ self._nack_delegate()
87
+
88
+
72
89
  class StreamReadDirection(Enum):
73
90
  ''' Enumerates all directions in which a event sourcing stream can be read '''
74
91
  FORWARDS = 0,
@@ -82,6 +99,9 @@ class EventStoreOptions:
82
99
 
83
100
  database_name: str
84
101
  ''' Gets/sets the name of the database to use, if any '''
102
+
103
+ consumer_group: str
104
+ ''' Gets/sets the name of the consumer group to use, if any '''
85
105
 
86
106
 
87
107
  class EventStore(ABC):
@@ -3,10 +3,11 @@ import logging
3
3
  import sys
4
4
  import threading
5
5
  from typing import Dict, List, Optional
6
+ from esdbclient.persistent import PersistentSubscription
6
7
  import rx
7
8
  from rx.disposable.disposable import Disposable
8
9
  from neuroglia.data.abstractions import DomainEvent
9
- from neuroglia.data.infrastructure.event_sourcing.abstractions import Aggregator, EventDescriptor, EventRecord, EventStore, EventStoreOptions, StreamDescriptor, StreamReadDirection
10
+ from neuroglia.data.infrastructure.event_sourcing.abstractions import AckableEventRecord, Aggregator, EventDescriptor, EventRecord, EventStore, EventStoreOptions, StreamDescriptor, StreamReadDirection
10
11
  from neuroglia.hosting.abstractions import ApplicationBuilderBase
11
12
  from neuroglia.serialization.json import JsonSerializer
12
13
  from esdbclient import EventStoreDBClient, NewEvent, StreamState, RecordedEvent
@@ -98,8 +99,14 @@ class ESEventStore(EventStore):
98
99
  else:
99
100
  try:
100
101
  self._eventstore_client.create_subscription_to_stream(stream_name=stream_name, resolve_links=True) # todo: persistence
102
+ # self._eventstore_client.create_subscription_to_stream(group_name = consumer_group, stream_name = stream_name, resolve_links = True, consumer_strategy = 'RoundRobin', min_checkpoint_count=1, max_checkpoint_count=1)
101
103
  except AlreadyExists:
102
104
  pass
105
+ # subscription = self._eventstore_client.read_subscription_to_stream(group_name = consumer_group, stream_name = stream_name)
106
+
107
+ try : self._eventstore_client.create_subscription_to_stream(group_name = consumer_group, stream_name = stream_name, resolve_links = True, consumer_strategy = 'RoundRobin', min_checkpoint_count=1, max_checkpoint_count=1)
108
+ except AlreadyExists: pass
109
+
103
110
  subject = Subject()
104
111
  thread = threading.Thread(target=self._consume_events_async, kwargs={'stream_id': stream_id, 'subject': subject, 'subscription': subscription})
105
112
  thread.start()
@@ -144,7 +151,7 @@ class ESEventStore(EventStore):
144
151
  e: RecordedEvent
145
152
  for e in subscription:
146
153
  try:
147
- decoded_event = self._decode_recorded_event(stream_id, e)
154
+ decoded_event = self._decode_recorded_event(stream_id, e, subscription)
148
155
  except Exception as ex:
149
156
  logging.error(f"An exception occured while decoding event with offset '{e.stream_position}' from stream '{e.stream_name}': {ex}")
150
157
  raise
@@ -2,7 +2,7 @@ import asyncio
2
2
  from dataclasses import dataclass
3
3
  import logging
4
4
  from rx.core.typing import Disposable
5
- from neuroglia.data.infrastructure.event_sourcing.abstractions import EventRecord, EventStore, EventStoreOptions
5
+ from neuroglia.data.infrastructure.event_sourcing.abstractions import AckableEventRecord, EventRecord, EventStore, EventStoreOptions
6
6
  from neuroglia.dependency_injection.service_provider import ServiceProviderBase
7
7
  from neuroglia.hosting.abstractions import HostedService
8
8
  from neuroglia.mediation.mediator import Mediator
@@ -46,7 +46,7 @@ class ReadModelReconciliator(HostedService):
46
46
  self._subscription.dispose()
47
47
 
48
48
  async def subscribe_async(self):
49
- observable = await self._event_store.observe_async(f'$ce-{self._event_store_options.database_name}')
49
+ observable = await self._event_store.observe_async(f'$ce-{self._event_store_options.database_name}', self._event_store_options.consumer_group)
50
50
  self._subscription = AsyncRx.subscribe(observable, lambda e: asyncio.run(self.on_event_record_stream_next_async(e)))
51
51
 
52
52
  async def on_event_record_stream_next_async(self, e: EventRecord):
@@ -1,127 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: neuroglia-python
3
- Version: 0.0.23
4
- Summary: Port from .NET to Python of the Neuroglia Framework
5
- License: Apache
6
- Author: Charles d'Avernas
7
- Author-email: charles.davernas@neuroglia.io
8
- Requires-Python: >=3.12,<4.0
9
- Classifier: License :: Other/Proprietary License
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.12
12
- Classifier: Programming Language :: Python :: 3.13
13
- Requires-Dist: annotated-types (>=0.6.0,<0.7.0)
14
- Requires-Dist: classy-fastapi (>=0.6.1,<0.7.0)
15
- Requires-Dist: esdbclient (>=1.0.17,<2.0.0)
16
- Requires-Dist: fastapi (>=0.109.2,<0.110.0)
17
- Requires-Dist: grpcio (>=1.60.1,<2.0.0)
18
- Requires-Dist: httpx (>=0.26.0,<0.27.0)
19
- Requires-Dist: multipledispatch (>=1.0.0,<2.0.0)
20
- Requires-Dist: pydantic-settings (>=2.2.0,<3.0.0)
21
- Requires-Dist: pymongo (>=4.6.1,<5.0.0)
22
- Requires-Dist: pytest (>=8.1.1,<9.0.0)
23
- Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
24
- Requires-Dist: rx (>=3.2.0,<4.0.0)
25
- Requires-Dist: typing-extensions (>=4.9.0,<5.0.0)
26
- Requires-Dist: uvicorn (>=0.27.1,<0.28.0)
27
- Description-Content-Type: text/markdown
28
-
29
- # Neuroglia Python Framework
30
-
31
- A framework of libraries used to build modern Python V3 applications
32
-
33
- ## Disclaimer
34
-
35
- This project was the opportunity for me (cdavernas) to learn Python while porting some of the concepts and services of the .NET version of the Neuroglia Framework
36
-
37
- ## Packaging
38
-
39
- ```sh
40
- # Set the version tag in pyproject.toml
41
- # Commit changes
42
-
43
- poetry build
44
-
45
- poetry publish --repository gitlab -u <token-username> -p <token-password>
46
-
47
- ```
48
-
49
- ---
50
-
51
- _DRAFT_
52
-
53
- ## Developer Guide Structure
54
-
55
- ### Introduction
56
-
57
- Briefly describe your framework, its purpose, and its target audience.
58
- Highlight key features and benefits.
59
-
60
- #### Installation:
61
-
62
- Provide clear and step-by-step instructions on how to install your framework, including:
63
- Prerequisites (e.g., Python version, dependencies)
64
- Installation methods (e.g., pip install <framework_name>, source code compilation)
65
- Virtual environment recommendations (for isolation and dependency management)
66
-
67
- #### Getting Started:
68
-
69
- Offer a simple "Hello, World!" or similar example to demonstrate basic usage and familiarize users with your framework's syntax and structure.
70
- Include code snippets and explanations where necessary.
71
-
72
- #### Core Concepts:
73
-
74
- Dedicate this section to in-depth explanations of the fundamental building blocks and functionalities of your framework. This might include:
75
- Key objects and classes within the framework
76
- Data structures and design patterns employed
77
- Architectural overview (e.g., MVC, MVVM) if applicable
78
-
79
- #### Tutorials and Examples:
80
-
81
- Provide a collection of well-structured, step-by-step tutorials that showcase how to accomplish common tasks using your framework.
82
- Consider varying the difficulty levels (beginner, intermediate, advanced) to cater to a wide range of users.
83
- Include code examples, explanations, and screenshots as needed.
84
-
85
- #### API Reference:
86
-
87
- Create a comprehensive reference for all available classes, functions, and modules within your framework.
88
- Use a consistent format that includes the following information for each API element:
89
- Name
90
- Description
91
- Arguments (with data types and descriptions)
92
- Return values (with data types and descriptions)
93
- Usage examples
94
-
95
- #### Testing and Debugging:
96
-
97
- Explain how to effectively test code written using your framework.
98
- Recommend testing frameworks and tools.
99
- Provide practical guidance on common debugging techniques and strategies.
100
-
101
- #### Contributing:
102
-
103
- Outline how developers can contribute to your framework's development.
104
- Include information on:
105
- Issue tracking system (e.g., GitHub issues)
106
- Pull request guidelines
107
- Coding style and conventions
108
- Testing requirements
109
-
110
- #### Community and Support:
111
-
112
- Specify available resources for users to seek help and engage with the community. This could include:
113
- Official channels (e.g., discussion forums, mailing lists)
114
- Third-party resources (e.g., Stack Overflow tags, community blogs)
115
-
116
- #### License:
117
-
118
- Clearly state the license under which your framework is distributed.
119
-
120
- #### Additional Tips:
121
-
122
- Maintain a clear and concise writing style, using easy-to-understand language.
123
- Ensure proper formatting and structure for readability.
124
- Provide code snippets in a visually appealing format, using code blocks and syntax highlighting.
125
- Consider adding screenshots or diagrams to illustrate complex concepts.
126
- Regularly update the guide with new features, bug fixes, and best practices.
127
-
@@ -1,98 +0,0 @@
1
- # Neuroglia Python Framework
2
-
3
- A framework of libraries used to build modern Python V3 applications
4
-
5
- ## Disclaimer
6
-
7
- This project was the opportunity for me (cdavernas) to learn Python while porting some of the concepts and services of the .NET version of the Neuroglia Framework
8
-
9
- ## Packaging
10
-
11
- ```sh
12
- # Set the version tag in pyproject.toml
13
- # Commit changes
14
-
15
- poetry build
16
-
17
- poetry publish --repository gitlab -u <token-username> -p <token-password>
18
-
19
- ```
20
-
21
- ---
22
-
23
- _DRAFT_
24
-
25
- ## Developer Guide Structure
26
-
27
- ### Introduction
28
-
29
- Briefly describe your framework, its purpose, and its target audience.
30
- Highlight key features and benefits.
31
-
32
- #### Installation:
33
-
34
- Provide clear and step-by-step instructions on how to install your framework, including:
35
- Prerequisites (e.g., Python version, dependencies)
36
- Installation methods (e.g., pip install <framework_name>, source code compilation)
37
- Virtual environment recommendations (for isolation and dependency management)
38
-
39
- #### Getting Started:
40
-
41
- Offer a simple "Hello, World!" or similar example to demonstrate basic usage and familiarize users with your framework's syntax and structure.
42
- Include code snippets and explanations where necessary.
43
-
44
- #### Core Concepts:
45
-
46
- Dedicate this section to in-depth explanations of the fundamental building blocks and functionalities of your framework. This might include:
47
- Key objects and classes within the framework
48
- Data structures and design patterns employed
49
- Architectural overview (e.g., MVC, MVVM) if applicable
50
-
51
- #### Tutorials and Examples:
52
-
53
- Provide a collection of well-structured, step-by-step tutorials that showcase how to accomplish common tasks using your framework.
54
- Consider varying the difficulty levels (beginner, intermediate, advanced) to cater to a wide range of users.
55
- Include code examples, explanations, and screenshots as needed.
56
-
57
- #### API Reference:
58
-
59
- Create a comprehensive reference for all available classes, functions, and modules within your framework.
60
- Use a consistent format that includes the following information for each API element:
61
- Name
62
- Description
63
- Arguments (with data types and descriptions)
64
- Return values (with data types and descriptions)
65
- Usage examples
66
-
67
- #### Testing and Debugging:
68
-
69
- Explain how to effectively test code written using your framework.
70
- Recommend testing frameworks and tools.
71
- Provide practical guidance on common debugging techniques and strategies.
72
-
73
- #### Contributing:
74
-
75
- Outline how developers can contribute to your framework's development.
76
- Include information on:
77
- Issue tracking system (e.g., GitHub issues)
78
- Pull request guidelines
79
- Coding style and conventions
80
- Testing requirements
81
-
82
- #### Community and Support:
83
-
84
- Specify available resources for users to seek help and engage with the community. This could include:
85
- Official channels (e.g., discussion forums, mailing lists)
86
- Third-party resources (e.g., Stack Overflow tags, community blogs)
87
-
88
- #### License:
89
-
90
- Clearly state the license under which your framework is distributed.
91
-
92
- #### Additional Tips:
93
-
94
- Maintain a clear and concise writing style, using easy-to-understand language.
95
- Ensure proper formatting and structure for readability.
96
- Provide code snippets in a visually appealing format, using code blocks and syntax highlighting.
97
- Consider adding screenshots or diagrams to illustrate complex concepts.
98
- Regularly update the guide with new features, bug fixes, and best practices.