Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/finbourne/lusid-features-python
https://github.com/finbourne/lusid-features-python
Last synced: 22 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/finbourne/lusid-features-python
- Owner: finbourne
- License: other
- Created: 2020-09-14T09:35:49.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-06-24T13:45:41.000Z (7 months ago)
- Last Synced: 2024-12-12T10:22:06.846Z (26 days ago)
- Language: Python
- Size: 25.4 KB
- Stars: 0
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
![LUSID_by_Finbourne](./resources/Finbourne_Logo_Teal.svg)
# Lusid Feature Python Decorator Scanner
## Description
This repository contains source code which provides a python decorator called 'lusid_feature', which can then be used
within a python project to scan through all 'lusid_feature' decorator values in a desired project package. The runner
will then produce an output text file of desired name and path with all lusid_feature codes.The generated text file is then passed into a Lusid feature reporter python script, which maps the feature codes to
full feature names and their implementation status, ultimately creating a visual features report across all Lusid SDKs.## Usage
### Installing
Run:
```
pip install lusidfeature
```### Importing
This repository has two main functions that need to be imported for the scanner to work
1. lusid_feature in lusid_feature.py - The decorator used with functions and methods
2. extract_features_to_file(argv) in reporter - The function that extracts all decorator values and writes them to a file### Implementing `lusid_feature` decorator
When successfully imported, lusid_feature decorator can be used to decorate functions and methods in the following manner:
```
from lusidfeature import lusid_feature@lusid_feature("F1")
def some_function():
pass # function/method implementation
```Rules around using lusid_feature decorator:
- The decorator must always be called with brackets, and have a string value passed. It can optionally contain multiple values.
Correct Usage: ```@lusid_feature("F1") or @lusid_feature("F1", "F2")```
Incorrect Usage:```@lusid_feature```
- The decorator must not have an empty string passed. The following will throw an error:
```@lusid_feature("")```
- The decorator must not have duplicate feature values across the package files that are being scanned.
The following will throw an error if both functions/methods with the same feature codes are found in the same package:
```
@lusid_feature("F1")
def some_function():
pass # function/method implementation@lusid_feature("F1")
def some_other_function():
pass # function/method implementation
```### Running the decorator scanner
To extract the feature values and write them to a file, the following function must be imported and run from a main function in a main.py file:
```
from lusidfeature.reporter import extract_features_to_filedef main(argv):
extract_features_to_file(argv)if __name__ == "__main__":
main(sys.argv)```
The reason we must use 'if __name__ == "__main__"' with an entry main function is because the decorator scanner
must be run directly, together with strictly required "root project directory", "project package name"
and "output file path" parameters.### Input parameters (sys.argv)
The command line requires two parameters
- --outpath or -o
This is the full qualified filename of where to create the output fileExamples:
_Windows_:
```
-o \.txt-o C:\\home\src\output\features.txt
```_Unix (Mac/Linux)_:
```
-o /.txt-o home/src/output/features.txt
```
- --package or -p
This is the package that the decorator scanner should look for decorators in
Examples:
```
-p lusid.submodule
-p lusid.submodule.anothersubmodule
-p tests.tutorials
```- --root or -r
The path of root directory from which the decorator scanner should start traversing packages and modules.
The path must point to a directory within the project folder, and not to a directory outside the project.
(Recommended to be the root SDK folder or src folder rather than the base project path.)Examples:
_Windows_:
```
-r C:\\home\lusid-sdk-python\sdk
```_Unix (Mac/Linux)_:
```
-r home/lusid-sdk-python/sdk
```To run, set your PYTHONPATH for the required folders and run the following example in a similar way:
```
python main.py -p "tests.tutorials" -o "/usr/app/features.txt"
```## Output file
The decorator scanner should write a file to the specified path with the example content:
features.txt
```
F1
F32
F2
F3
F10
F11
F8
etc...
```### Stacking decorators
Decorator stacking for lusid_feature is not supported at the moment. The following will NOT yield expected results.
Incorrect usage:
```
@lusid_feature("F1")
@lusid_feature("F2")
def some_function():
pass # function/method implementation
```