summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-06-20 05:10:48 +0000
committerCoprDistGit <infra@openeuler.org>2023-06-20 05:10:48 +0000
commit7260779e3ae6cb9978db8f749f51cb4b089cfcb8 (patch)
treec61708d7fb9e3d436d00aaea1c8c385d5fbe23a8
parent74bdacab0c556becf8176c5a9ffdde896152f12f (diff)
automatic import of python-py-to-ts-interfacesopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-py-to-ts-interfaces.spec444
-rw-r--r--sources1
3 files changed, 446 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..653b001 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/py-to-ts-interfaces-1.4.0.tar.gz
diff --git a/python-py-to-ts-interfaces.spec b/python-py-to-ts-interfaces.spec
new file mode 100644
index 0000000..d450cc8
--- /dev/null
+++ b/python-py-to-ts-interfaces.spec
@@ -0,0 +1,444 @@
+%global _empty_manifest_terminate_build 0
+Name: python-py-to-ts-interfaces
+Version: 1.4.0
+Release: 1
+Summary: A script to generate TypeScript interfaces from Python dataclasses, with enum support.
+License: MIT License
+URL: https://github.com/Syndallic/py-to-ts-interfaces
+Source0: https://mirrors.aliyun.com/pypi/web/packages/98/68/2517a347ccf1f47d9891175d56b2b5a589495738febcef1858cf4862fc92/py-to-ts-interfaces-1.4.0.tar.gz
+BuildArch: noarch
+
+
+%description
+# py-to-ts-interfaces
+### Python to TypeScript Interfaces
+
+## What is this?
+
+A script for converting Python dataclasses with type annotations to TypeScript interfaces. This is a very similar
+project to [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces), and only exists because that project
+does not currently support enums. This is a utility for another project I am working on, and has the
+additional benefit of allowing me to generate the TypeScript output in compliance with my eslint configuration. This
+is a much more primitive approach compared to [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces) which
+comes with certain limitations (see [Usage](#Usage) for details).
+
+## Installation
+
+```
+python --version # requires 3.9+
+pip install py-to-ts-interfaces
+```
+
+## Motivation
+
+Just like [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces), this script is intended for cases
+where a web application is composed of a Python server and a TypeScript client. Setting up a language translator
+like this means that it is possible to define the message schemas once (in Python), and then guarantee that the
+TypeScript message schemas are in sync with the Python ones. This avoids the annoying task of maintaining two
+definition sets, and more importantly, bugs caused by forgetting to update both interfaces.
+
+## Usage
+
+This script takes a single input folder, and requires that all python files inside only contain the following:
+- Module imports
+- Newlines
+- Spaces
+- [Dataclasses](https://docs.python.org/3/library/dataclasses.html)
+- Enums
+- String definitions
+
+If a dataclass contains an enum, the enum definition must be in the same folder also.
+This script also supports nullable types (see `MyNullableInterface` in the section below).
+Functions in Enum definitions will be ignored (e.g. a `__str__` override).
+
+### Example
+
+1. Write your Python definitions.
+
+```python
+from dataclasses import dataclass
+from enum import Enum
+from typing import Final, Union, List, Dict, Optional
+
+class MyEnum(Enum):
+ FIRST = "Number One"
+ SECOND = "Number Two"
+
+ def __str__(self):
+ return self.value
+
+CONSTANT_STRING: Final = "example"
+OTHER_STRING = "another example"
+
+@dataclass(frozen=True)
+class MyInterface:
+ field: MyEnum
+
+@dataclass(frozen=True)
+class MyNullableInterface:
+ field: Union[MyInterface, None] = None
+ otherField: Optional[MyInterface] = None
+
+@dataclass(frozen=True)
+class MyInterface2:
+ strange_type: Optional[List[int]]
+ other_type: List[str]
+ dict_type: Dict[int, Dict[str, MyEnum]]
+
+```
+
+2. In your shell, run the included command and pass in the path of the folder containing the files you want to convert,
+ and the path to the folder that the output should be written to. If the output folder path does not exist then it
+ will be created automatically.
+```
+$ py-ts-interfaces example_folder output_folder
+```
+
+3. The resulting file will look like this:
+```typescript
+export enum MyEnum {
+ FIRST = 'Number One',
+ SECOND = 'Number Two',
+}
+
+export const CONSTANT_STRING = 'example';
+export const OTHER_STRING = 'another example';
+
+export interface MyInterface {
+ field: MyEnum;
+}
+
+export interface MyNullableInterface {
+ field?: MyInterface;
+ otherField?: MyInterface;
+}
+
+export interface MyInterface2 {
+ strangeType?: number[];
+ otherType: string[];
+ dictType: Record<number, Record<string, MyEnum>>;
+}
+
+```
+
+## Supported Type Mappings
+
+| Python | Typescript |
+|:------------:|:------------:|
+| str | string |
+| int | number |
+| float | number |
+| complex | number |
+| bool | boolean |
+| List[T] | T[] |
+| Dict[T, P] | Record<T, P> |
+
+Where T and P are one of the listed supported types (this includes nested Dicts), or enums.
+
+
+%package -n python3-py-to-ts-interfaces
+Summary: A script to generate TypeScript interfaces from Python dataclasses, with enum support.
+Provides: python-py-to-ts-interfaces
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-py-to-ts-interfaces
+# py-to-ts-interfaces
+### Python to TypeScript Interfaces
+
+## What is this?
+
+A script for converting Python dataclasses with type annotations to TypeScript interfaces. This is a very similar
+project to [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces), and only exists because that project
+does not currently support enums. This is a utility for another project I am working on, and has the
+additional benefit of allowing me to generate the TypeScript output in compliance with my eslint configuration. This
+is a much more primitive approach compared to [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces) which
+comes with certain limitations (see [Usage](#Usage) for details).
+
+## Installation
+
+```
+python --version # requires 3.9+
+pip install py-to-ts-interfaces
+```
+
+## Motivation
+
+Just like [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces), this script is intended for cases
+where a web application is composed of a Python server and a TypeScript client. Setting up a language translator
+like this means that it is possible to define the message schemas once (in Python), and then guarantee that the
+TypeScript message schemas are in sync with the Python ones. This avoids the annoying task of maintaining two
+definition sets, and more importantly, bugs caused by forgetting to update both interfaces.
+
+## Usage
+
+This script takes a single input folder, and requires that all python files inside only contain the following:
+- Module imports
+- Newlines
+- Spaces
+- [Dataclasses](https://docs.python.org/3/library/dataclasses.html)
+- Enums
+- String definitions
+
+If a dataclass contains an enum, the enum definition must be in the same folder also.
+This script also supports nullable types (see `MyNullableInterface` in the section below).
+Functions in Enum definitions will be ignored (e.g. a `__str__` override).
+
+### Example
+
+1. Write your Python definitions.
+
+```python
+from dataclasses import dataclass
+from enum import Enum
+from typing import Final, Union, List, Dict, Optional
+
+class MyEnum(Enum):
+ FIRST = "Number One"
+ SECOND = "Number Two"
+
+ def __str__(self):
+ return self.value
+
+CONSTANT_STRING: Final = "example"
+OTHER_STRING = "another example"
+
+@dataclass(frozen=True)
+class MyInterface:
+ field: MyEnum
+
+@dataclass(frozen=True)
+class MyNullableInterface:
+ field: Union[MyInterface, None] = None
+ otherField: Optional[MyInterface] = None
+
+@dataclass(frozen=True)
+class MyInterface2:
+ strange_type: Optional[List[int]]
+ other_type: List[str]
+ dict_type: Dict[int, Dict[str, MyEnum]]
+
+```
+
+2. In your shell, run the included command and pass in the path of the folder containing the files you want to convert,
+ and the path to the folder that the output should be written to. If the output folder path does not exist then it
+ will be created automatically.
+```
+$ py-ts-interfaces example_folder output_folder
+```
+
+3. The resulting file will look like this:
+```typescript
+export enum MyEnum {
+ FIRST = 'Number One',
+ SECOND = 'Number Two',
+}
+
+export const CONSTANT_STRING = 'example';
+export const OTHER_STRING = 'another example';
+
+export interface MyInterface {
+ field: MyEnum;
+}
+
+export interface MyNullableInterface {
+ field?: MyInterface;
+ otherField?: MyInterface;
+}
+
+export interface MyInterface2 {
+ strangeType?: number[];
+ otherType: string[];
+ dictType: Record<number, Record<string, MyEnum>>;
+}
+
+```
+
+## Supported Type Mappings
+
+| Python | Typescript |
+|:------------:|:------------:|
+| str | string |
+| int | number |
+| float | number |
+| complex | number |
+| bool | boolean |
+| List[T] | T[] |
+| Dict[T, P] | Record<T, P> |
+
+Where T and P are one of the listed supported types (this includes nested Dicts), or enums.
+
+
+%package help
+Summary: Development documents and examples for py-to-ts-interfaces
+Provides: python3-py-to-ts-interfaces-doc
+%description help
+# py-to-ts-interfaces
+### Python to TypeScript Interfaces
+
+## What is this?
+
+A script for converting Python dataclasses with type annotations to TypeScript interfaces. This is a very similar
+project to [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces), and only exists because that project
+does not currently support enums. This is a utility for another project I am working on, and has the
+additional benefit of allowing me to generate the TypeScript output in compliance with my eslint configuration. This
+is a much more primitive approach compared to [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces) which
+comes with certain limitations (see [Usage](#Usage) for details).
+
+## Installation
+
+```
+python --version # requires 3.9+
+pip install py-to-ts-interfaces
+```
+
+## Motivation
+
+Just like [py-ts-interfaces](https://github.com/cs-cordero/py-ts-interfaces), this script is intended for cases
+where a web application is composed of a Python server and a TypeScript client. Setting up a language translator
+like this means that it is possible to define the message schemas once (in Python), and then guarantee that the
+TypeScript message schemas are in sync with the Python ones. This avoids the annoying task of maintaining two
+definition sets, and more importantly, bugs caused by forgetting to update both interfaces.
+
+## Usage
+
+This script takes a single input folder, and requires that all python files inside only contain the following:
+- Module imports
+- Newlines
+- Spaces
+- [Dataclasses](https://docs.python.org/3/library/dataclasses.html)
+- Enums
+- String definitions
+
+If a dataclass contains an enum, the enum definition must be in the same folder also.
+This script also supports nullable types (see `MyNullableInterface` in the section below).
+Functions in Enum definitions will be ignored (e.g. a `__str__` override).
+
+### Example
+
+1. Write your Python definitions.
+
+```python
+from dataclasses import dataclass
+from enum import Enum
+from typing import Final, Union, List, Dict, Optional
+
+class MyEnum(Enum):
+ FIRST = "Number One"
+ SECOND = "Number Two"
+
+ def __str__(self):
+ return self.value
+
+CONSTANT_STRING: Final = "example"
+OTHER_STRING = "another example"
+
+@dataclass(frozen=True)
+class MyInterface:
+ field: MyEnum
+
+@dataclass(frozen=True)
+class MyNullableInterface:
+ field: Union[MyInterface, None] = None
+ otherField: Optional[MyInterface] = None
+
+@dataclass(frozen=True)
+class MyInterface2:
+ strange_type: Optional[List[int]]
+ other_type: List[str]
+ dict_type: Dict[int, Dict[str, MyEnum]]
+
+```
+
+2. In your shell, run the included command and pass in the path of the folder containing the files you want to convert,
+ and the path to the folder that the output should be written to. If the output folder path does not exist then it
+ will be created automatically.
+```
+$ py-ts-interfaces example_folder output_folder
+```
+
+3. The resulting file will look like this:
+```typescript
+export enum MyEnum {
+ FIRST = 'Number One',
+ SECOND = 'Number Two',
+}
+
+export const CONSTANT_STRING = 'example';
+export const OTHER_STRING = 'another example';
+
+export interface MyInterface {
+ field: MyEnum;
+}
+
+export interface MyNullableInterface {
+ field?: MyInterface;
+ otherField?: MyInterface;
+}
+
+export interface MyInterface2 {
+ strangeType?: number[];
+ otherType: string[];
+ dictType: Record<number, Record<string, MyEnum>>;
+}
+
+```
+
+## Supported Type Mappings
+
+| Python | Typescript |
+|:------------:|:------------:|
+| str | string |
+| int | number |
+| float | number |
+| complex | number |
+| bool | boolean |
+| List[T] | T[] |
+| Dict[T, P] | Record<T, P> |
+
+Where T and P are one of the listed supported types (this includes nested Dicts), or enums.
+
+
+%prep
+%autosetup -n py-to-ts-interfaces-1.4.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-py-to-ts-interfaces -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 1.4.0-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..33d34b0
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+e0fc26f7e79f14a27be5121e3f55f0fe py-to-ts-interfaces-1.4.0.tar.gz