summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-06-20 06:23:25 +0000
committerCoprDistGit <infra@openeuler.org>2023-06-20 06:23:25 +0000
commit51b01787be92348ebec147ec27a01aed18c5e5f5 (patch)
tree2a030e60dc7104325adf1b98e67d5d916344ca31
parent85ee3694ae2304f71035740c0609600139a0d315 (diff)
automatic import of python-dynamodb-stream-routeropeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-dynamodb-stream-router.spec325
-rw-r--r--sources1
3 files changed, 327 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..76a3620 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/dynamodb-stream-router-0.0.9.tar.gz
diff --git a/python-dynamodb-stream-router.spec b/python-dynamodb-stream-router.spec
new file mode 100644
index 0000000..1281d89
--- /dev/null
+++ b/python-dynamodb-stream-router.spec
@@ -0,0 +1,325 @@
+%global _empty_manifest_terminate_build 0
+Name: python-dynamodb-stream-router
+Version: 0.0.9
+Release: 1
+Summary: A framework for content-based routing of records in a Dynamodb Stream to the callable that should handle them
+License: Apache 2.0
+URL: https://github.com/QuiNovas/dynamodb-router-router
+Source0: https://mirrors.aliyun.com/pypi/web/packages/fe/7b/abfb992b4050e78bb698c00fadc2d954cd03935465ee6fb4c42adf548ee9/dynamodb-stream-router-0.0.9.tar.gz
+BuildArch: noarch
+
+Requires: python3-boto3
+Requires: python3-multipledispatch
+Requires: python3-simplejson
+Requires: python3-sly
+
+%description
+# dynamodb-stream-router
+
+> **WARNING - Version 0.0.6 is a breaking change from version 0.0.5. Please review the documentation before upgrading**
+
+Provies a framework for mapping records in a Dynamodb stream to callables based on the event name (MODIFY, INSERT, DELETE) and content.
+
+## Installation
+```bash
+pip install dynamodb-stream-router
+```
+
+## Routing
+- Routes are determined by examining the `eventName` in the `dynamodb` section of the DynamoDB stream [`Record`](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_Record.html) and through a `condition` which examines the contents of the `Record`.
+- Conditions can either be a callable that takes a `RouteRecord` and returns `True` or `False`, or it may be a string expression that will be parsed into a callable. See below for the expression language.
+- Routes have a priority, which is honored in an acending order. If multiple matching routes have the same priority, they will be executed in random order (concurrectly, if an `executor` is provided)
+- Routes are matched based on a `RouteRecord`, which is a helper class that (lazily) deserializers the DynamoDB item structure (used in `Keys`, `NewImage` and `OldImage`) into Python types, exactly in the same way that the boto3 dynamodb Table resource does.
+- Route handling functions take a `RouteRecord` and can return anything. The return value is not used by the framework.
+
+## Expressions
+
+### Keywords and types:
+| Type | Description | Example |
+|------|-------------|---------|
+| VALUE | A quoted string (single or double quote), integer, or float representing a literal value | 'foo', 1, 3.8 |
+| $OLD | A reference to `RouteRecord.old_image` | $OLD.foo |
+| $NEW | A reference to `RouteRecord.old_image` | $NEW.foo |
+| PATH | A path starting from a root of $OLD or $NEW. Can be specified using dot syntax or python style keys. When using dot reference paths must conform to python's restrictions. | $OLD.foo, $NEW.foo.bar, $OLD["foo"] |
+| INDEX | An integer used as an index into a list or set | $OLD.foo[0] |
+
+### Operators:
+| Symbol | Action |
+|--------|--------|
+| & | Logical AND |
+| \| | Logical OR |
+| () | Statement grouping |
+| == | Equality |
+| != | Non equality |
+| > | Greater than |
+| >= | Greater than or equal to |
+| < | Less than |
+| <= | Less than or equal to |
+| =~ | Regex comparison `PATH` =~ 'regex' where *'regex'* is a quoted `VALUE` |
+
+Comparison operators, except for regex comparison, can compare `PATH` to `VALUE`, `PATH` to `PATH`, or even `VALUE` to `VALUE`.
+
+### functions
+| Function | Arguments | Description |
+|----------|-----------|-------------|
+| has_changed(VALUE, VALUE) | VALUE - Comma separated list of quoted values | Tests $OLD and $NEW. If value is in one and not the other, or in both and differs, the the function will return True. Returns True if any key meets conditions. |
+| is_type(PATH, TYPE) | <ul><li>PATH - The path to test in the form of $OLD.foo.bar</li<li> TYPE - A Dynamodb type. Can be one of S, SS, B, BS, N, NS, L, M, or BOOL</li></ul> | Tests if PATH exists and the VALUE at PATH is of type TYPE. |
+| attribute_exists(PATH) | PATH - The path to test | Returns True if the provided path exists |
+| from_json(PATH) | PATH - The path to decode | Returns object decoded using simplejson.loads() |
+
+
+## Examples
+
+```python
+from dynamodb_stream_router import on_insert, on_modify, on_remove, on_operations, Operation, route_records, RouteRecord
+
+@on_insert("$NEW.foo == 'bar'", 0)
+def print_new_record(record: RouteRecord) -> None:
+ print(record.new_image)
+
+def test_old_foo(record: RouteRecord) -> bool:
+ return record.old_image["foo"] == "bar2"
+
+@on_remove(test_old_foo, 0)
+def print_old_record(record: RouteRecord) -> None:
+ print(record.old_record)
+
+@on_modify("has_changed('foo') & attribute_exists($NEW.foo)", 1)
+def print_changed_foo(record: RouteRecord) -> None:
+ print(f'{record.old_image.get("foo")} -> {record.new_image.get("foo")}')
+
+@on_operations({Operation.INSERT, Operation.MODIFY, Operation.REMOVE}, 1)
+def hello_world(record: RouteRecord) -> str:
+ return "Hello, DB STREAM"
+
+def lambda_handler(event, context):
+ route_records(event["Records"])
+
+```
+
+
+
+%package -n python3-dynamodb-stream-router
+Summary: A framework for content-based routing of records in a Dynamodb Stream to the callable that should handle them
+Provides: python-dynamodb-stream-router
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-dynamodb-stream-router
+# dynamodb-stream-router
+
+> **WARNING - Version 0.0.6 is a breaking change from version 0.0.5. Please review the documentation before upgrading**
+
+Provies a framework for mapping records in a Dynamodb stream to callables based on the event name (MODIFY, INSERT, DELETE) and content.
+
+## Installation
+```bash
+pip install dynamodb-stream-router
+```
+
+## Routing
+- Routes are determined by examining the `eventName` in the `dynamodb` section of the DynamoDB stream [`Record`](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_Record.html) and through a `condition` which examines the contents of the `Record`.
+- Conditions can either be a callable that takes a `RouteRecord` and returns `True` or `False`, or it may be a string expression that will be parsed into a callable. See below for the expression language.
+- Routes have a priority, which is honored in an acending order. If multiple matching routes have the same priority, they will be executed in random order (concurrectly, if an `executor` is provided)
+- Routes are matched based on a `RouteRecord`, which is a helper class that (lazily) deserializers the DynamoDB item structure (used in `Keys`, `NewImage` and `OldImage`) into Python types, exactly in the same way that the boto3 dynamodb Table resource does.
+- Route handling functions take a `RouteRecord` and can return anything. The return value is not used by the framework.
+
+## Expressions
+
+### Keywords and types:
+| Type | Description | Example |
+|------|-------------|---------|
+| VALUE | A quoted string (single or double quote), integer, or float representing a literal value | 'foo', 1, 3.8 |
+| $OLD | A reference to `RouteRecord.old_image` | $OLD.foo |
+| $NEW | A reference to `RouteRecord.old_image` | $NEW.foo |
+| PATH | A path starting from a root of $OLD or $NEW. Can be specified using dot syntax or python style keys. When using dot reference paths must conform to python's restrictions. | $OLD.foo, $NEW.foo.bar, $OLD["foo"] |
+| INDEX | An integer used as an index into a list or set | $OLD.foo[0] |
+
+### Operators:
+| Symbol | Action |
+|--------|--------|
+| & | Logical AND |
+| \| | Logical OR |
+| () | Statement grouping |
+| == | Equality |
+| != | Non equality |
+| > | Greater than |
+| >= | Greater than or equal to |
+| < | Less than |
+| <= | Less than or equal to |
+| =~ | Regex comparison `PATH` =~ 'regex' where *'regex'* is a quoted `VALUE` |
+
+Comparison operators, except for regex comparison, can compare `PATH` to `VALUE`, `PATH` to `PATH`, or even `VALUE` to `VALUE`.
+
+### functions
+| Function | Arguments | Description |
+|----------|-----------|-------------|
+| has_changed(VALUE, VALUE) | VALUE - Comma separated list of quoted values | Tests $OLD and $NEW. If value is in one and not the other, or in both and differs, the the function will return True. Returns True if any key meets conditions. |
+| is_type(PATH, TYPE) | <ul><li>PATH - The path to test in the form of $OLD.foo.bar</li<li> TYPE - A Dynamodb type. Can be one of S, SS, B, BS, N, NS, L, M, or BOOL</li></ul> | Tests if PATH exists and the VALUE at PATH is of type TYPE. |
+| attribute_exists(PATH) | PATH - The path to test | Returns True if the provided path exists |
+| from_json(PATH) | PATH - The path to decode | Returns object decoded using simplejson.loads() |
+
+
+## Examples
+
+```python
+from dynamodb_stream_router import on_insert, on_modify, on_remove, on_operations, Operation, route_records, RouteRecord
+
+@on_insert("$NEW.foo == 'bar'", 0)
+def print_new_record(record: RouteRecord) -> None:
+ print(record.new_image)
+
+def test_old_foo(record: RouteRecord) -> bool:
+ return record.old_image["foo"] == "bar2"
+
+@on_remove(test_old_foo, 0)
+def print_old_record(record: RouteRecord) -> None:
+ print(record.old_record)
+
+@on_modify("has_changed('foo') & attribute_exists($NEW.foo)", 1)
+def print_changed_foo(record: RouteRecord) -> None:
+ print(f'{record.old_image.get("foo")} -> {record.new_image.get("foo")}')
+
+@on_operations({Operation.INSERT, Operation.MODIFY, Operation.REMOVE}, 1)
+def hello_world(record: RouteRecord) -> str:
+ return "Hello, DB STREAM"
+
+def lambda_handler(event, context):
+ route_records(event["Records"])
+
+```
+
+
+
+%package help
+Summary: Development documents and examples for dynamodb-stream-router
+Provides: python3-dynamodb-stream-router-doc
+%description help
+# dynamodb-stream-router
+
+> **WARNING - Version 0.0.6 is a breaking change from version 0.0.5. Please review the documentation before upgrading**
+
+Provies a framework for mapping records in a Dynamodb stream to callables based on the event name (MODIFY, INSERT, DELETE) and content.
+
+## Installation
+```bash
+pip install dynamodb-stream-router
+```
+
+## Routing
+- Routes are determined by examining the `eventName` in the `dynamodb` section of the DynamoDB stream [`Record`](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_Record.html) and through a `condition` which examines the contents of the `Record`.
+- Conditions can either be a callable that takes a `RouteRecord` and returns `True` or `False`, or it may be a string expression that will be parsed into a callable. See below for the expression language.
+- Routes have a priority, which is honored in an acending order. If multiple matching routes have the same priority, they will be executed in random order (concurrectly, if an `executor` is provided)
+- Routes are matched based on a `RouteRecord`, which is a helper class that (lazily) deserializers the DynamoDB item structure (used in `Keys`, `NewImage` and `OldImage`) into Python types, exactly in the same way that the boto3 dynamodb Table resource does.
+- Route handling functions take a `RouteRecord` and can return anything. The return value is not used by the framework.
+
+## Expressions
+
+### Keywords and types:
+| Type | Description | Example |
+|------|-------------|---------|
+| VALUE | A quoted string (single or double quote), integer, or float representing a literal value | 'foo', 1, 3.8 |
+| $OLD | A reference to `RouteRecord.old_image` | $OLD.foo |
+| $NEW | A reference to `RouteRecord.old_image` | $NEW.foo |
+| PATH | A path starting from a root of $OLD or $NEW. Can be specified using dot syntax or python style keys. When using dot reference paths must conform to python's restrictions. | $OLD.foo, $NEW.foo.bar, $OLD["foo"] |
+| INDEX | An integer used as an index into a list or set | $OLD.foo[0] |
+
+### Operators:
+| Symbol | Action |
+|--------|--------|
+| & | Logical AND |
+| \| | Logical OR |
+| () | Statement grouping |
+| == | Equality |
+| != | Non equality |
+| > | Greater than |
+| >= | Greater than or equal to |
+| < | Less than |
+| <= | Less than or equal to |
+| =~ | Regex comparison `PATH` =~ 'regex' where *'regex'* is a quoted `VALUE` |
+
+Comparison operators, except for regex comparison, can compare `PATH` to `VALUE`, `PATH` to `PATH`, or even `VALUE` to `VALUE`.
+
+### functions
+| Function | Arguments | Description |
+|----------|-----------|-------------|
+| has_changed(VALUE, VALUE) | VALUE - Comma separated list of quoted values | Tests $OLD and $NEW. If value is in one and not the other, or in both and differs, the the function will return True. Returns True if any key meets conditions. |
+| is_type(PATH, TYPE) | <ul><li>PATH - The path to test in the form of $OLD.foo.bar</li<li> TYPE - A Dynamodb type. Can be one of S, SS, B, BS, N, NS, L, M, or BOOL</li></ul> | Tests if PATH exists and the VALUE at PATH is of type TYPE. |
+| attribute_exists(PATH) | PATH - The path to test | Returns True if the provided path exists |
+| from_json(PATH) | PATH - The path to decode | Returns object decoded using simplejson.loads() |
+
+
+## Examples
+
+```python
+from dynamodb_stream_router import on_insert, on_modify, on_remove, on_operations, Operation, route_records, RouteRecord
+
+@on_insert("$NEW.foo == 'bar'", 0)
+def print_new_record(record: RouteRecord) -> None:
+ print(record.new_image)
+
+def test_old_foo(record: RouteRecord) -> bool:
+ return record.old_image["foo"] == "bar2"
+
+@on_remove(test_old_foo, 0)
+def print_old_record(record: RouteRecord) -> None:
+ print(record.old_record)
+
+@on_modify("has_changed('foo') & attribute_exists($NEW.foo)", 1)
+def print_changed_foo(record: RouteRecord) -> None:
+ print(f'{record.old_image.get("foo")} -> {record.new_image.get("foo")}')
+
+@on_operations({Operation.INSERT, Operation.MODIFY, Operation.REMOVE}, 1)
+def hello_world(record: RouteRecord) -> str:
+ return "Hello, DB STREAM"
+
+def lambda_handler(event, context):
+ route_records(event["Records"])
+
+```
+
+
+
+%prep
+%autosetup -n dynamodb-stream-router-0.0.9
+
+%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-dynamodb-stream-router -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.0.9-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..bb9081a
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+74532c294936a48801dded29de6e366d dynamodb-stream-router-0.0.9.tar.gz