From 319e4851aac245e6e8abd959039a937f4d5b4200 Mon Sep 17 00:00:00 2001 From: tsiresymila Date: Mon, 26 Feb 2024 17:45:11 +0300 Subject: [PATCH] [feature] version 0.1.0 --- README.md | 44 ++++++++++++++++++ nestipy.png | Bin 0 -> 58252 bytes src/nestipy/cli/handler.py | 9 ++-- .../core/platform/platform_litestar.py | 3 ++ 4 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 nestipy.png diff --git a/README.md b/README.md index e69de29..3183e19 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,44 @@ +

+ Nestipy Logo +

+ +## Description + +Nestipy is a framework for building efficient, scalable Python +server-side applications. It uses modern Python typing combines with elements of OOP (Object Oriented Programming), FP ( +Functional Programming). + +

Under the hood, Nestipy makes use of Litestar, but also provides compatibility with a wide range of other libraries, like FastAPI, allowing for easy use of the myriad of third-party plugins which are available.

+ +## Philosophy + +

Nestipy aims to provide an application architecture out of the box which allows for effortless creation of highly testable, scalable, and loosely coupled and easily maintainable applications. The architecture is heavily inspired by Angular.

+ +## Getting started + +```cmd + pip install nestipy + nestipy new my_app + cd my_app + python main.py +``` + +## Questions + +## Issues + +Please make sure to read the [Issue Reporting Checklist](https://github.com/tsiresymila/nestipy) before opening an +issue. Issues not conforming to the guidelines may be closed immediately. + +## Support + +Nestipy is an MIT-licensed open source project. It can grow thanks to the sponsors and support from the amazing backers. +If you'd like to join them, please [read more here](https://docs.nestipy.com/support). + +## Stay in touch + +- Author - [Tsiresy Mila](https://tsiresymila.vercel.app) + +## License + +Nestipy is [MIT licensed](LICENSE). \ No newline at end of file diff --git a/nestipy.png b/nestipy.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c8b5380a784f34f3a6401de3ff239ed7724587 GIT binary patch literal 58252 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

1oHeAus{7Pk1Xs?dJ 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 ID{372KO!6+LjV8( literal 0 HcmV?d00001 diff --git a/src/nestipy/cli/handler.py b/src/nestipy/cli/handler.py index 0658404..7f60b44 100644 --- a/src/nestipy/cli/handler.py +++ b/src/nestipy/cli/handler.py @@ -1,5 +1,4 @@ import os.path -from pathlib2 import Path from nestipy.common.templates.generator import TemplateGenerator @@ -39,6 +38,7 @@ def generate_resource_graphql(self, name): def generate_module(self, name: str, prefix: str = None): path = self.mkdir(name) self.generate(name, path, 'module', prefix=prefix) + self.modify_app_module(name) def generate_controller(self, name: str, prefix: str = None): path = self.mkdir(name) @@ -73,14 +73,14 @@ def generate(self, name, parent_path, template, prefix: str = None): @classmethod def modify_app_module(cls, name): name = str(name) - app_path = os.path.join(os.getcwd(), 'app_module.py') + app_path = os.path.join(os.getcwd(), 'src', 'app_module.py') if os.path.exists(app_path): new_import = f"{str(name).capitalize()}Module" with open(app_path, 'r') as file: file_content = file.read() file.close() module_pattern = r'@Module\(([^)]*)\)' - text_to_add = f'from src/{name.lower()}_module import {name.capitalize()}Module' + text_to_add = f'from .{name.lower()}.{name.lower()}_module import {name.capitalize()}Module' import re match = re.search(module_pattern, file_content) if match: @@ -96,7 +96,8 @@ def modify_app_module(cls, name): else: # If imports=[] doesn't exist, add imports directly modified_content = file_content.replace(match.group(0), - text_to_add + '\n@Module(imports=[' + new_import + '],') + text_to_add + f'\n@Module(\n\timports=[{new_import}],' + f'{existing_imports_str})') with open(app_path, 'w') as file2: file2.write(modified_content) file2.close() diff --git a/src/nestipy/core/platform/platform_litestar.py b/src/nestipy/core/platform/platform_litestar.py index d2f469b..757b75f 100644 --- a/src/nestipy/core/platform/platform_litestar.py +++ b/src/nestipy/core/platform/platform_litestar.py @@ -38,6 +38,9 @@ def controller_to_extend_litestar_controller(ctrl): if not inspect.ismethod(value) and not inspect.isfunction(value) and not inspect.isbuiltin( value) and name != '__slots__': class_attrs[name] = value + + if not hasattr(ctrl, 'tags'): + class_attrs['tags'] = [str(ctrl.__name__).replace('Controller', '')] return type(ctrl.__name__, (Controller,), {**class_attrs, "__module__": ctrl.__module__})