diff --git a/bankfeeds/README.md b/bankfeeds/README.md index f3430b843..942b4d07d 100755 --- a/bankfeeds/README.md +++ b/bankfeeds/README.md @@ -14,28 +14,21 @@ pip install codat-bankfeeds import codat from codat.models import operations, shared -s = codat.Codat() -s.config_security( +s = codat.Codat( security=shared.Security( - api_key="YOUR_API_KEY_HERE", - ) + auth_header="YOUR_API_KEY_HERE", + ), ) - + + req = operations.GetBankAccountPushOptionsRequest( - security=operations.GetBankAccountPushOptionsSecurity( - api_key="YOUR_API_KEY_HERE", - ), - path_params=operations.GetBankAccountPushOptionsPathParams( - account_id="unde", - company_id="deserunt", - connection_id="porro", - ), - query_params=operations.GetBankAccountPushOptionsQueryParams( - order_by="nulla", - page=6027.63, - page_size=8579.46, - query="perspiciatis", - ), + account_id="unde", + company_id="deserunt", + connection_id="porro", + order_by="nulla", + page=6027.63, + page_size=8579.46, + query="perspiciatis", ) res = s.bank_account_transactions.get_bank_account_push_options(req) @@ -52,13 +45,13 @@ if res.push_option is not None: ### bank_account_transactions * `get_bank_account_push_options` - List push options for bank account bank transactions -* `list_all_bank_transactionscount` - List bank transactions for bank account +* `list_bank_account_transactions` - List bank transactions for bank account * `post_bank_transactions` - Create bank transactions ### bank_feed_accounts +* `create_bank_feed` - Create bank feed bank accounts * `get_bank_feeds` - List bank feed bank accounts -* `put_bank_feeds` - Update bank feed bank accounts * `update_bank_feed` - Update bank feed bank account diff --git a/bankfeeds/RELEASES.md b/bankfeeds/RELEASES.md index 7095d08de..b62fc6680 100644 --- a/bankfeeds/RELEASES.md +++ b/bankfeeds/RELEASES.md @@ -14,4 +14,68 @@ Based on: - OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml - Speakeasy CLI 1.7.1 https://github.com/speakeasy-api/speakeasy ### Releases -- [PyPI v0.1.1] https://pypi.org/project/codat-bankfeeds/0.1.1 - bankfeeds \ No newline at end of file +- [PyPI v0.1.1] https://pypi.org/project/codat-bankfeeds/0.1.1 - bankfeeds + +## 2023-03-04 00:17:14 +### Changes +Based on: +- OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml +- Speakeasy CLI 1.8.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [PyPI v0.2.0] https://pypi.org/project/codat-bankfeeds/0.2.0 - bankfeeds + +## 2023-03-06 00:19:15 +### Changes +Based on: +- OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml +- Speakeasy CLI 1.8.4 https://github.com/speakeasy-api/speakeasy +### Releases +- [PyPI v0.2.1] https://pypi.org/project/codat-bankfeeds/0.2.1 - bankfeeds + +## 2023-03-07 00:19:35 +### Changes +Based on: +- OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml +- Speakeasy CLI 1.8.5 https://github.com/speakeasy-api/speakeasy +### Releases +- [PyPI v0.2.2] https://pypi.org/project/codat-bankfeeds/0.2.2 - bankfeeds + +## 2023-03-08 00:18:50 +### Changes +Based on: +- OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml +- Speakeasy CLI 1.8.6 https://github.com/speakeasy-api/speakeasy +### Releases +- [PyPI v0.2.3] https://pypi.org/project/codat-bankfeeds/0.2.3 - bankfeeds + +## 2023-03-09 00:18:55 +### Changes +Based on: +- OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml +- Speakeasy CLI 1.8.7 https://github.com/speakeasy-api/speakeasy +### Releases +- [PyPI v0.2.4] https://pypi.org/project/codat-bankfeeds/0.2.4 - bankfeeds + +## 2023-03-10 00:18:44 +### Changes +Based on: +- OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml +- Speakeasy CLI 1.9.1 https://github.com/speakeasy-api/speakeasy +### Releases +- [PyPI v0.3.0] https://pypi.org/project/codat-bankfeeds/0.3.0 - bankfeeds + +## 2023-03-11 00:16:21 +### Changes +Based on: +- OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml +- Speakeasy CLI 1.9.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [PyPI v0.3.1] https://pypi.org/project/codat-bankfeeds/0.3.1 - bankfeeds + +## 2023-03-15 00:18:03 +### Changes +Based on: +- OpenAPI Doc 2.1.0 https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Bank-Feeds.yaml +- Speakeasy CLI 1.11.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [PyPI v0.4.0] https://pypi.org/project/codat-bankfeeds/0.4.0 - bankfeeds \ No newline at end of file diff --git a/bankfeeds/USAGE.md b/bankfeeds/USAGE.md index c802447be..f1ecce9cd 100755 --- a/bankfeeds/USAGE.md +++ b/bankfeeds/USAGE.md @@ -3,28 +3,21 @@ import codat from codat.models import operations, shared -s = codat.Codat() -s.config_security( +s = codat.Codat( security=shared.Security( - api_key="YOUR_API_KEY_HERE", - ) + auth_header="YOUR_API_KEY_HERE", + ), ) - + + req = operations.GetBankAccountPushOptionsRequest( - security=operations.GetBankAccountPushOptionsSecurity( - api_key="YOUR_API_KEY_HERE", - ), - path_params=operations.GetBankAccountPushOptionsPathParams( - account_id="unde", - company_id="deserunt", - connection_id="porro", - ), - query_params=operations.GetBankAccountPushOptionsQueryParams( - order_by="nulla", - page=6027.63, - page_size=8579.46, - query="perspiciatis", - ), + account_id="unde", + company_id="deserunt", + connection_id="porro", + order_by="nulla", + page=6027.63, + page_size=8579.46, + query="perspiciatis", ) res = s.bank_account_transactions.get_bank_account_push_options(req) diff --git a/bankfeeds/files.gen b/bankfeeds/files.gen index fc0f39a39..1551d704b 100755 --- a/bankfeeds/files.gen +++ b/bankfeeds/files.gen @@ -1,6 +1,7 @@ src/codat/bank_account_transactions.py src/codat/bank_feed_accounts.py src/codat/sdk.py +pylintrc setup.py src/codat/__init__.py src/codat/models/__init__.py @@ -8,10 +9,10 @@ src/codat/utils/__init__.py src/codat/utils/retries.py src/codat/utils/utils.py src/codat/models/operations/get_bank_account_push_options.py -src/codat/models/operations/list_all_bank_transactionscount.py +src/codat/models/operations/list_bank_account_transactions.py src/codat/models/operations/post_bank_transactions.py +src/codat/models/operations/create_bank_feed.py src/codat/models/operations/get_bank_feeds.py -src/codat/models/operations/put_bank_feeds.py src/codat/models/operations/update_bank_feed.py src/codat/models/operations/__init__.py src/codat/models/shared/security.py diff --git a/bankfeeds/gen.yaml b/bankfeeds/gen.yaml index 1a715dfde..3b6d88b76 100644 --- a/bankfeeds/gen.yaml +++ b/bankfeeds/gen.yaml @@ -1,14 +1,14 @@ configVersion: 1.0.0 management: - docChecksum: 2850b50909854a03af955e915ac1f608 + docChecksum: 5d482fdc77beeaca660224bb3f31b4ec docVersion: 2.1.0 - speakeasyVersion: 1.7.1 + speakeasyVersion: 1.11.0 generation: telemetryEnabled: false sdkClassName: codat sdkFlattening: true python: - version: 0.1.1 + version: 0.4.0 author: Speakeasy description: Python Client SDK Generated by Speakeasy packageName: codat-bankfeeds diff --git a/bankfeeds/pylintrc b/bankfeeds/pylintrc new file mode 100755 index 000000000..532df1904 --- /dev/null +++ b/bankfeeds/pylintrc @@ -0,0 +1,641 @@ +[MAIN] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint +# in a server-like mode. +clear-cache-post-run=no + +# Load and enable all available extensions. Use --list-extensions to see a list +# all available extensions. +#enable-all-extensions= + +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +#errors-only= + +# Always return a 0 (non-error) status code, even if lint errors are found. +# This is primarily useful in continuous integration scripts. +#exit-zero= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist= + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold under which the program will exit with error. +fail-under=10 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +#from-stdin= + +# Files or directories to be skipped. They should be base names, not paths. +ignore=CVS + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, +# it can't be used as an escape character. +ignore-paths= + +# Files or directories matching the regular expression patterns are skipped. +# The regex matches against base names, not paths. The default value ignores +# Emacs file locks +ignore-patterns=^\.# + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.9 + +# Discover python modules and packages in the file system subtree. +recursive=no + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# In verbose mode, extra non-checker-related info will be displayed. +#verbose= + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. If left empty, argument names will be checked with the set +# naming style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +bad-names-rgxs= + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +#class-attribute-rgx= + +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. If left empty, class names will be checked with the set naming style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. If left empty, function names will be checked with the set +# naming style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _, + id + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +good-names-rgxs= + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. If left empty, variable names will be checked with the set +# naming style. +#variable-rgx= + + +[CLASSES] + +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + __post_init__ + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=25 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when caught. +overgeneral-exceptions=builtins.BaseException,builtins.Exception + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[IMPORTS] + +# List of modules that can be imported at any level, not just the top level +# one. +allow-any-import-level= + +# Allow explicit reexports by alias from a package __init__. +allow-reexport-from-package=no + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules= + +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). +ext-import-graph= + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). +import-graph= + +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Couples of modules and preferred modules, separated by a comma. +preferred-modules= + + +[LOGGING] + +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + trailing-whitespace, + line-too-long, + missing-class-docstring, + missing-module-docstring, + missing-function-docstring, + too-many-instance-attributes, + wrong-import-order, + too-many-arguments, + broad-exception-raised, + too-few-public-methods, + too-many-branches, + chained-comparison, + duplicate-code, + trailing-newlines, + too-many-public-methods, + too-many-locals + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[METHOD_ARGS] + +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +notes-rgx= + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit,argparse.parse_error + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +#output-format= + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=yes + +# Signatures are removed from the similarity computation +ignore-signatures=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it work, +# install the 'python-enchant' package. +spelling-dict= + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains the private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins=no-member, + not-async-context-manager, + not-context-manager, + attribute-defined-outside-init + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins= + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io diff --git a/bankfeeds/setup.py b/bankfeeds/setup.py index 518a207f8..bb42e9ccc 100755 --- a/bankfeeds/setup.py +++ b/bankfeeds/setup.py @@ -8,7 +8,7 @@ setuptools.setup( name="codat-bankfeeds", - version="0.1.1", + version="0.4.0", author="Speakeasy", description="Python Client SDK Generated by Speakeasy", long_description=long_description, @@ -30,6 +30,7 @@ "typing-inspect==0.8.0", "typing_extensions==4.3.0", "urllib3==1.26.12", + "pylint==2.16.2", ], package_dir={'': 'src'}, python_requires='>=3.9' diff --git a/bankfeeds/src/codat/__init__.py b/bankfeeds/src/codat/__init__.py index 8d74a7d2f..0f9f50e91 100755 --- a/bankfeeds/src/codat/__init__.py +++ b/bankfeeds/src/codat/__init__.py @@ -1 +1 @@ -from .sdk import * \ No newline at end of file +from .sdk import * diff --git a/bankfeeds/src/codat/bank_account_transactions.py b/bankfeeds/src/codat/bank_account_transactions.py index c37da07f2..547728169 100755 --- a/bankfeeds/src/codat/bank_account_transactions.py +++ b/bankfeeds/src/codat/bank_account_transactions.py @@ -1,25 +1,24 @@ -import requests +import requests as requests_http from . import utils from codat.models import operations from typing import Optional class BankAccountTransactions: - _client: requests.Session - _security_client: requests.Session + _client: requests_http.Session + _security_client: requests_http.Session _server_url: str _language: str _sdk_version: str _gen_version: str - def __init__(self, client: requests.Session, security_client: requests.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None: + def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None: self._client = client self._security_client = security_client self._server_url = server_url self._language = language self._sdk_version = sdk_version self._gen_version = gen_version - - + def get_bank_account_push_options(self, request: operations.GetBankAccountPushOptionsRequest) -> operations.GetBankAccountPushOptionsResponse: r"""List push options for bank account bank transactions Gets the options of pushing bank account transactions. @@ -27,51 +26,49 @@ def get_bank_account_push_options(self, request: operations.GetBankAccountPushOp base_url = self._server_url - url = utils.generate_url(base_url, "/companies/{companyId}/connections/{connectionId}/options/bankAccounts/{accountId}/bankTransactions", request.path_params) + url = utils.generate_url(operations.GetBankAccountPushOptionsRequest, base_url, '/companies/{companyId}/connections/{connectionId}/options/bankAccounts/{accountId}/bankTransactions', request) - query_params = utils.get_query_params(request.query_params) + query_params = utils.get_query_params(operations.GetBankAccountPushOptionsRequest, request) - client = utils.configure_security_client(self._client, request.security) + client = self._security_client - r = client.request("GET", url, params=query_params) - content_type = r.headers.get("Content-Type") + http_res = client.request('GET', url, params=query_params) + content_type = http_res.headers.get('Content-Type') - res = operations.GetBankAccountPushOptionsResponse(status_code=r.status_code, content_type=content_type) + res = operations.GetBankAccountPushOptionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) - if r.status_code == 200: - if utils.match_content_type(content_type, "application/json"): - out = utils.unmarshal_json(r.text, Optional[operations.GetBankAccountPushOptionsPushOption]) + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetBankAccountPushOptionsPushOption]) res.push_option = out return res - - def list_all_bank_transactionscount(self, request: operations.ListAllBankTransactionscountRequest) -> operations.ListAllBankTransactionscountResponse: + def list_bank_account_transactions(self, request: operations.ListBankAccountTransactionsRequest) -> operations.ListBankAccountTransactionsResponse: r"""List bank transactions for bank account Gets bank transactions for a given bank account ID """ base_url = self._server_url - url = utils.generate_url(base_url, "/companies/{companyId}/connections/{connectionId}/data/bankAccounts/{accountId}/bankTransactions", request.path_params) + url = utils.generate_url(operations.ListBankAccountTransactionsRequest, base_url, '/companies/{companyId}/connections/{connectionId}/data/bankAccounts/{accountId}/bankTransactions', request) - query_params = utils.get_query_params(request.query_params) + query_params = utils.get_query_params(operations.ListBankAccountTransactionsRequest, request) - client = utils.configure_security_client(self._client, request.security) + client = self._security_client - r = client.request("GET", url, params=query_params) - content_type = r.headers.get("Content-Type") + http_res = client.request('GET', url, params=query_params) + content_type = http_res.headers.get('Content-Type') - res = operations.ListAllBankTransactionscountResponse(status_code=r.status_code, content_type=content_type) + res = operations.ListBankAccountTransactionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) - if r.status_code == 200: - if utils.match_content_type(content_type, "application/json"): - out = utils.unmarshal_json(r.text, Optional[operations.ListAllBankTransactionscountLinks]) + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.ListBankAccountTransactionsLinks]) res.links = out return res - def post_bank_transactions(self, request: operations.PostBankTransactionsRequest) -> operations.PostBankTransactionsResponse: r"""Create bank transactions Posts bank transactions to the accounting package for a given company. @@ -83,24 +80,24 @@ def post_bank_transactions(self, request: operations.PostBankTransactionsRequest base_url = self._server_url - url = utils.generate_url(base_url, "/companies/{companyId}/connections/{connectionId}/push/bankAccounts/{accountId}}/bankTransactions", request.path_params) + url = utils.generate_url(operations.PostBankTransactionsRequest, base_url, '/companies/{companyId}/connections/{connectionId}/push/bankAccounts/{accountId}}/bankTransactions', request) headers = {} - req_content_type, data, form = utils.serialize_request_body(request) - if req_content_type != "multipart/form-data" and req_content_type != "multipart/mixed": - headers["content-type"] = req_content_type - query_params = utils.get_query_params(request.query_params) + req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + query_params = utils.get_query_params(operations.PostBankTransactionsRequest, request) - client = utils.configure_security_client(self._client, request.security) + client = self._security_client - r = client.request("POST", url, params=query_params, data=data, files=form, headers=headers) - content_type = r.headers.get("Content-Type") + http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') - res = operations.PostBankTransactionsResponse(status_code=r.status_code, content_type=content_type) + res = operations.PostBankTransactionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) - if r.status_code == 200: - if utils.match_content_type(content_type, "application/json"): - out = utils.unmarshal_json(r.text, Optional[operations.PostBankTransactions200ApplicationJSON]) + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.PostBankTransactions200ApplicationJSON]) res.post_bank_transactions_200_application_json_object = out return res diff --git a/bankfeeds/src/codat/bank_feed_accounts.py b/bankfeeds/src/codat/bank_feed_accounts.py index 10e23659a..4c682ea2d 100755 --- a/bankfeeds/src/codat/bank_feed_accounts.py +++ b/bankfeeds/src/codat/bank_feed_accounts.py @@ -1,79 +1,76 @@ -import requests +import requests as requests_http from . import utils from codat.models import operations from typing import Optional class BankFeedAccounts: - _client: requests.Session - _security_client: requests.Session + _client: requests_http.Session + _security_client: requests_http.Session _server_url: str _language: str _sdk_version: str _gen_version: str - def __init__(self, client: requests.Session, security_client: requests.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None: + def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None: self._client = client self._security_client = security_client self._server_url = server_url self._language = language self._sdk_version = sdk_version self._gen_version = gen_version - - - def get_bank_feeds(self, request: operations.GetBankFeedsRequest) -> operations.GetBankFeedsResponse: - r"""List bank feed bank accounts - Get BankFeed BankAccounts for a single data source connected to a single company. + + def create_bank_feed(self, request: operations.CreateBankFeedRequest) -> operations.CreateBankFeedResponse: + r"""Create bank feed bank accounts + Put BankFeed BankAccounts for a single data source connected to a single company. """ base_url = self._server_url - url = utils.generate_url(base_url, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts", request.path_params) + url = utils.generate_url(operations.CreateBankFeedRequest, base_url, '/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type - client = utils.configure_security_client(self._client, request.security) + client = self._security_client - r = client.request("GET", url) - content_type = r.headers.get("Content-Type") + http_res = client.request('PUT', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') - res = operations.GetBankFeedsResponse(status_code=r.status_code, content_type=content_type) + res = operations.CreateBankFeedResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) - if r.status_code == 200: - if utils.match_content_type(content_type, "application/json"): - out = utils.unmarshal_json(r.text, Optional[list[operations.GetBankFeedsBankFeedBankAccount]]) + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[list[operations.CreateBankFeedBankFeedBankAccount]]) res.bank_feed_bank_accounts = out return res - - def put_bank_feeds(self, request: operations.PutBankFeedsRequest) -> operations.PutBankFeedsResponse: - r"""Update bank feed bank accounts - Put BankFeed BankAccounts for a single data source connected to a single company. + def get_bank_feeds(self, request: operations.GetBankFeedsRequest) -> operations.GetBankFeedsResponse: + r"""List bank feed bank accounts + Get BankFeed BankAccounts for a single data source connected to a single company. """ base_url = self._server_url - url = utils.generate_url(base_url, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts", request.path_params) + url = utils.generate_url(operations.GetBankFeedsRequest, base_url, '/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts', request) - headers = {} - req_content_type, data, form = utils.serialize_request_body(request) - if req_content_type != "multipart/form-data" and req_content_type != "multipart/mixed": - headers["content-type"] = req_content_type - client = utils.configure_security_client(self._client, request.security) + client = self._security_client - r = client.request("PUT", url, data=data, files=form, headers=headers) - content_type = r.headers.get("Content-Type") + http_res = client.request('GET', url) + content_type = http_res.headers.get('Content-Type') - res = operations.PutBankFeedsResponse(status_code=r.status_code, content_type=content_type) + res = operations.GetBankFeedsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) - if r.status_code == 200: - if utils.match_content_type(content_type, "application/json"): - out = utils.unmarshal_json(r.text, Optional[list[operations.PutBankFeedsBankFeedBankAccount]]) + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[list[operations.GetBankFeedsBankFeedBankAccount]]) res.bank_feed_bank_accounts = out return res - def update_bank_feed(self, request: operations.UpdateBankFeedRequest) -> operations.UpdateBankFeedResponse: r"""Update bank feed bank account Update a single BankFeed BankAccount for a single data source connected to a single company. @@ -81,23 +78,23 @@ def update_bank_feed(self, request: operations.UpdateBankFeedRequest) -> operati base_url = self._server_url - url = utils.generate_url(base_url, "/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/{bankAccountId}", request.path_params) + url = utils.generate_url(operations.UpdateBankFeedRequest, base_url, '/companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/{bankAccountId}', request) headers = {} - req_content_type, data, form = utils.serialize_request_body(request) - if req_content_type != "multipart/form-data" and req_content_type != "multipart/mixed": - headers["content-type"] = req_content_type + req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type - client = utils.configure_security_client(self._client, request.security) + client = self._security_client - r = client.request("PATCH", url, data=data, files=form, headers=headers) - content_type = r.headers.get("Content-Type") + http_res = client.request('PATCH', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') - res = operations.UpdateBankFeedResponse(status_code=r.status_code, content_type=content_type) + res = operations.UpdateBankFeedResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) - if r.status_code == 200: - if utils.match_content_type(content_type, "application/json"): - out = utils.unmarshal_json(r.text, Optional[operations.UpdateBankFeedBankFeedBankAccount]) + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.UpdateBankFeedBankFeedBankAccount]) res.bank_feed_bank_account = out return res diff --git a/bankfeeds/src/codat/models/operations/__init__.py b/bankfeeds/src/codat/models/operations/__init__.py index 79c97921b..ac5c78948 100755 --- a/bankfeeds/src/codat/models/operations/__init__.py +++ b/bankfeeds/src/codat/models/operations/__init__.py @@ -1,8 +1,8 @@ +from .create_bank_feed import * from .get_bank_account_push_options import * from .get_bank_feeds import * -from .list_all_bank_transactionscount import * +from .list_bank_account_transactions import * from .post_bank_transactions import * -from .put_bank_feeds import * from .update_bank_feed import * -__all__ = ["GetBankAccountPushOptionsPathParams","GetBankAccountPushOptionsPushOption","GetBankAccountPushOptionsPushOptionOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionChoice","GetBankAccountPushOptionsPushOptionPushOptionChoiceOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoice","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoiceOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoice","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoiceOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoice","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoiceOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfo","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfo","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushValidationInfo","GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation","GetBankAccountPushOptionsPushOptionPushOptionChoicePushValidationInfo","GetBankAccountPushOptionsPushOptionPushOptionChoicePushValidationInfoPushFieldValidation","GetBankAccountPushOptionsPushOptionPushValidationInfo","GetBankAccountPushOptionsPushOptionPushValidationInfoPushFieldValidation","GetBankAccountPushOptionsQueryParams","GetBankAccountPushOptionsRequest","GetBankAccountPushOptionsResponse","GetBankAccountPushOptionsSecurity","GetBankFeedsBankFeedBankAccount","GetBankFeedsBankFeedBankAccountAccountTypeEnum","GetBankFeedsPathParams","GetBankFeedsRequest","GetBankFeedsResponse","GetBankFeedsSecurity","ListAllBankTransactionscountLinks","ListAllBankTransactionscountLinksLinks","ListAllBankTransactionscountLinksLinksCurrent","ListAllBankTransactionscountLinksLinksNext","ListAllBankTransactionscountLinksLinksPrevious","ListAllBankTransactionscountLinksLinksSelf","ListAllBankTransactionscountLinksResults","ListAllBankTransactionscountLinksResultsTransactions","ListAllBankTransactionscountLinksResultsTransactionsTransactionTypeEnum","ListAllBankTransactionscountPathParams","ListAllBankTransactionscountQueryParams","ListAllBankTransactionscountRequest","ListAllBankTransactionscountResponse","ListAllBankTransactionscountSecurity","PostBankTransactions200ApplicationJSON","PostBankTransactions200ApplicationJSONChanges","PostBankTransactions200ApplicationJSONChangesPushOperationRecordRef","PostBankTransactions200ApplicationJSONChangesTypeEnum","PostBankTransactions200ApplicationJSONData","PostBankTransactions200ApplicationJSONDataTransactions","PostBankTransactions200ApplicationJSONDataTransactionsTransactionTypeEnum","PostBankTransactions200ApplicationJSONStatusEnum","PostBankTransactions200ApplicationJSONValidation","PostBankTransactions200ApplicationJSONValidationValidationItem","PostBankTransactionsPathParams","PostBankTransactionsQueryParams","PostBankTransactionsRequest","PostBankTransactionsRequestBody","PostBankTransactionsRequestBodyTransactions","PostBankTransactionsRequestBodyTransactionsTransactionTypeEnum","PostBankTransactionsResponse","PostBankTransactionsSecurity","PutBankFeedsBankFeedBankAccount","PutBankFeedsBankFeedBankAccountAccountTypeEnum","PutBankFeedsPathParams","PutBankFeedsRequest","PutBankFeedsResponse","PutBankFeedsSecurity","UpdateBankFeedBankFeedBankAccount","UpdateBankFeedBankFeedBankAccountAccountTypeEnum","UpdateBankFeedPathParams","UpdateBankFeedRequest","UpdateBankFeedResponse","UpdateBankFeedSecurity"] \ No newline at end of file +__all__ = ["CreateBankFeedBankFeedBankAccount","CreateBankFeedBankFeedBankAccountAccountTypeEnum","CreateBankFeedRequest","CreateBankFeedResponse","GetBankAccountPushOptionsPushOption","GetBankAccountPushOptionsPushOptionOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionProperty","GetBankAccountPushOptionsPushOptionPushOptionPropertyOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionChoice","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionChoiceOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionProperty","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionChoice","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionProperty","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoice","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionProperty","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoice","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfo","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfo","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushValidationInfo","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushValidationInfo","GetBankAccountPushOptionsPushOptionPushOptionPropertyPushValidationInfoPushFieldValidation","GetBankAccountPushOptionsRequest","GetBankAccountPushOptionsResponse","GetBankFeedsBankFeedBankAccount","GetBankFeedsBankFeedBankAccountAccountTypeEnum","GetBankFeedsRequest","GetBankFeedsResponse","ListBankAccountTransactionsLinks","ListBankAccountTransactionsLinksLinks","ListBankAccountTransactionsLinksLinksCurrent","ListBankAccountTransactionsLinksLinksNext","ListBankAccountTransactionsLinksLinksPrevious","ListBankAccountTransactionsLinksLinksSelf","ListBankAccountTransactionsLinksResults","ListBankAccountTransactionsLinksResultsTransactions","ListBankAccountTransactionsLinksResultsTransactionsTransactionTypeEnum","ListBankAccountTransactionsRequest","ListBankAccountTransactionsResponse","PostBankTransactions200ApplicationJSON","PostBankTransactions200ApplicationJSONChanges","PostBankTransactions200ApplicationJSONChangesPushOperationRecordRef","PostBankTransactions200ApplicationJSONChangesTypeEnum","PostBankTransactions200ApplicationJSONData","PostBankTransactions200ApplicationJSONDataTransactions","PostBankTransactions200ApplicationJSONDataTransactionsTransactionTypeEnum","PostBankTransactions200ApplicationJSONStatusEnum","PostBankTransactions200ApplicationJSONValidation","PostBankTransactions200ApplicationJSONValidationValidationItem","PostBankTransactionsRequest","PostBankTransactionsRequestBody","PostBankTransactionsRequestBodyTransactions","PostBankTransactionsRequestBodyTransactionsTransactionTypeEnum","PostBankTransactionsResponse","UpdateBankFeedBankFeedBankAccount","UpdateBankFeedBankFeedBankAccountAccountTypeEnum","UpdateBankFeedRequest","UpdateBankFeedResponse"] diff --git a/bankfeeds/src/codat/models/operations/create_bank_feed.py b/bankfeeds/src/codat/models/operations/create_bank_feed.py new file mode 100755 index 000000000..e0f58e0cf --- /dev/null +++ b/bankfeeds/src/codat/models/operations/create_bank_feed.py @@ -0,0 +1,50 @@ +from __future__ import annotations +import dataclasses +import dateutil.parser +import requests as requests_http +from codat import utils +from dataclasses_json import Undefined, dataclass_json +from datetime import datetime +from enum import Enum +from marshmallow import fields +from typing import Optional + +class CreateBankFeedBankFeedBankAccountAccountTypeEnum(str, Enum): + UNKNOWN = "Unknown" + CREDIT = "Credit" + DEBIT = "Debit" + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CreateBankFeedBankFeedBankAccount: + r"""CreateBankFeedBankFeedBankAccount + The target bank account in a supported accounting package for ingestion into a bank feed. + """ + + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + account_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountName'), 'exclude': lambda f: f is None }}) + account_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountNumber'), 'exclude': lambda f: f is None }}) + account_type: Optional[CreateBankFeedBankFeedBankAccountAccountTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountType'), 'exclude': lambda f: f is None }}) + balance: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance'), 'exclude': lambda f: f is None }}) + currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency'), 'exclude': lambda f: f is None }}) + feed_start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feedStartDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + sort_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortCode'), 'exclude': lambda f: f is None }}) + status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + +@dataclasses.dataclass +class CreateBankFeedRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) + request_body: Optional[list[CreateBankFeedBankFeedBankAccount]] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + + +@dataclasses.dataclass +class CreateBankFeedResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + bank_feed_bank_accounts: Optional[list[CreateBankFeedBankFeedBankAccount]] = dataclasses.field(default=None) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + \ No newline at end of file diff --git a/bankfeeds/src/codat/models/operations/get_bank_account_push_options.py b/bankfeeds/src/codat/models/operations/get_bank_account_push_options.py index 1f6b7d5e8..4237c91fa 100755 --- a/bankfeeds/src/codat/models/operations/get_bank_account_push_options.py +++ b/bankfeeds/src/codat/models/operations/get_bank_account_push_options.py @@ -1,5 +1,6 @@ from __future__ import annotations import dataclasses +import requests as requests_http from codat import utils from dataclasses_json import Undefined, dataclass_json from enum import Enum @@ -7,32 +8,36 @@ @dataclasses.dataclass -class GetBankAccountPushOptionsPathParams: +class GetBankAccountPushOptionsRequest: account_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'accountId', 'style': 'simple', 'explode': False }}) company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) - - -@dataclasses.dataclass -class GetBankAccountPushOptionsQueryParams: page: float = dataclasses.field(metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) order_by: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'orderBy', 'style': 'form', 'explode': True }}) page_size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionChoiceOptionTypeEnum(str, Enum): + ARRAY = "Array" + OBJECT = "Object" + STRING = "String" + NUMBER = "Number" + BOOLEAN = "Boolean" + DATE_TIME = "DateTime" + FILE = "File" + MULTI_PART = "MultiPart" -@dataclasses.dataclass -class GetBankAccountPushOptionsSecurity: - api_key: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) - +@dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsRequest: - path_params: GetBankAccountPushOptionsPathParams = dataclasses.field() - query_params: GetBankAccountPushOptionsQueryParams = dataclasses.field() - security: GetBankAccountPushOptionsSecurity = dataclasses.field() +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionChoice: + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName'), 'exclude': lambda f: f is None }}) + required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }}) + type: Optional[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionChoiceOptionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + value: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value'), 'exclude': lambda f: f is None }}) -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoiceOptionTypeEnum(str, Enum): +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum(str, Enum): ARRAY = "Array" OBJECT = "Object" STRING = "String" @@ -45,31 +50,54 @@ class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOpt @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation: - details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('details') }}) - field: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('field') }}) - ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('ref'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionChoice: + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName'), 'exclude': lambda f: f is None }}) + required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }}) + type: Optional[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + value: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum(str, Enum): + ARRAY = "Array" + OBJECT = "Object" + STRING = "String" + NUMBER = "Number" + BOOLEAN = "Boolean" + DATE_TIME = "DateTime" + FILE = "File" + MULTI_PART = "MultiPart" + @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfo: - information: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('information'), 'exclude': lambda f: f is None }}) - warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('warnings'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoice: + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName'), 'exclude': lambda f: f is None }}) + required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }}) + type: Optional[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + value: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum(str, Enum): + ARRAY = "Array" + OBJECT = "Object" + STRING = "String" + NUMBER = "Number" + BOOLEAN = "Boolean" + DATE_TIME = "DateTime" + FILE = "File" + MULTI_PART = "MultiPart" + @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoice: - description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('description') }}) - display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('displayName') }}) - required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('required') }}) - type: GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoiceOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('type') }}) - value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('value') }}) - rel: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('rel'), 'exclude': lambda f: f is None }}) - validation: Optional[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('validation'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoice: + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + display_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName'), 'exclude': lambda f: f is None }}) + required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }}) + type: Optional[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoiceOptionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + value: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value'), 'exclude': lambda f: f is None }}) -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoiceOptionTypeEnum(str, Enum): +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyOptionTypeEnum(str, Enum): ARRAY = "Array" OBJECT = "Object" STRING = "String" @@ -82,32 +110,30 @@ class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOpt @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation: - details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('details') }}) - field: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('field') }}) - ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('ref'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation: + details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('details') }}) + field: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('field'), 'exclude': lambda f: f is None }}) + ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ref'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfo: - information: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('information'), 'exclude': lambda f: f is None }}) - warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('warnings'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfo: + information: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('information'), 'exclude': lambda f: f is None }}) + warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('warnings'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoice: - description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('description') }}) - display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('displayName') }}) - required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('required') }}) - type: GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoiceOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('type') }}) - value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('value') }}) - options: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushOptionChoice]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('options'), 'exclude': lambda f: f is None }}) - rel: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('rel'), 'exclude': lambda f: f is None }}) - validation: Optional[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoicePushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('validation'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionProperty: + description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description') }}) + display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName') }}) + required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required') }}) + type: GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + options: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoice]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }}) + validation: Optional[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validation'), 'exclude': lambda f: f is None }}) -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoiceOptionTypeEnum(str, Enum): +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyOptionTypeEnum(str, Enum): ARRAY = "Array" OBJECT = "Object" STRING = "String" @@ -120,32 +146,31 @@ class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoiceOptionT @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation: - details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('details') }}) - field: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('field') }}) - ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('ref'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation: + details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('details') }}) + field: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('field'), 'exclude': lambda f: f is None }}) + ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ref'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushValidationInfo: - information: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('information'), 'exclude': lambda f: f is None }}) - warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('warnings'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfo: + information: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('information'), 'exclude': lambda f: f is None }}) + warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('warnings'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoice: - description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('description') }}) - display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('displayName') }}) - required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('required') }}) - type: GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoiceOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('type') }}) - value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('value') }}) - options: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushOptionChoice]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('options'), 'exclude': lambda f: f is None }}) - rel: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('rel'), 'exclude': lambda f: f is None }}) - validation: Optional[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoicePushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('validation'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionProperty: + description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description') }}) + display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName') }}) + required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required') }}) + type: GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + options: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionChoice]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }}) + properties: Optional[dict[str, GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushOptionProperty]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('properties'), 'exclude': lambda f: f is None }}) + validation: Optional[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionPropertyPushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validation'), 'exclude': lambda f: f is None }}) -class GetBankAccountPushOptionsPushOptionPushOptionChoiceOptionTypeEnum(str, Enum): +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyOptionTypeEnum(str, Enum): ARRAY = "Array" OBJECT = "Object" STRING = "String" @@ -158,32 +183,31 @@ class GetBankAccountPushOptionsPushOptionPushOptionChoiceOptionTypeEnum(str, Enu @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushValidationInfoPushFieldValidation: - details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('details') }}) - field: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('field') }}) - ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('ref'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation: + details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('details') }}) + field: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('field'), 'exclude': lambda f: f is None }}) + ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ref'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoicePushValidationInfo: - information: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('information'), 'exclude': lambda f: f is None }}) - warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('warnings'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushValidationInfo: + information: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('information'), 'exclude': lambda f: f is None }}) + warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('warnings'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushOptionChoice: - description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('description') }}) - display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('displayName') }}) - required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('required') }}) - type: GetBankAccountPushOptionsPushOptionPushOptionChoiceOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('type') }}) - value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('value') }}) - options: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoicePushOptionChoice]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('options'), 'exclude': lambda f: f is None }}) - rel: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('rel'), 'exclude': lambda f: f is None }}) - validation: Optional[GetBankAccountPushOptionsPushOptionPushOptionChoicePushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('validation'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionProperty: + description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description') }}) + display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName') }}) + required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required') }}) + type: GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + options: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionChoice]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }}) + properties: Optional[dict[str, GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushOptionProperty]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('properties'), 'exclude': lambda f: f is None }}) + validation: Optional[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionPropertyPushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validation'), 'exclude': lambda f: f is None }}) -class GetBankAccountPushOptionsPushOptionOptionTypeEnum(str, Enum): +class GetBankAccountPushOptionsPushOptionPushOptionPropertyOptionTypeEnum(str, Enum): ARRAY = "Array" OBJECT = "Object" STRING = "String" @@ -196,29 +220,49 @@ class GetBankAccountPushOptionsPushOptionOptionTypeEnum(str, Enum): @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushValidationInfoPushFieldValidation: - details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('details') }}) - field: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('field') }}) - ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('ref'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushValidationInfoPushFieldValidation: + details: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('details') }}) + field: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('field'), 'exclude': lambda f: f is None }}) + ref: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ref'), 'exclude': lambda f: f is None }}) + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetBankAccountPushOptionsPushOptionPushOptionPropertyPushValidationInfo: + information: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('information'), 'exclude': lambda f: f is None }}) + warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('warnings'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass -class GetBankAccountPushOptionsPushOptionPushValidationInfo: - information: Optional[list[GetBankAccountPushOptionsPushOptionPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('information'), 'exclude': lambda f: f is None }}) - warnings: Optional[list[GetBankAccountPushOptionsPushOptionPushValidationInfoPushFieldValidation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('warnings'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionPushOptionProperty: + description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description') }}) + display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName') }}) + required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required') }}) + type: GetBankAccountPushOptionsPushOptionPushOptionPropertyOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + options: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionChoice]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }}) + properties: Optional[dict[str, GetBankAccountPushOptionsPushOptionPushOptionPropertyPushOptionProperty]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('properties'), 'exclude': lambda f: f is None }}) + validation: Optional[GetBankAccountPushOptionsPushOptionPushOptionPropertyPushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validation'), 'exclude': lambda f: f is None }}) +class GetBankAccountPushOptionsPushOptionOptionTypeEnum(str, Enum): + ARRAY = "Array" + OBJECT = "Object" + STRING = "String" + NUMBER = "Number" + BOOLEAN = "Boolean" + DATE_TIME = "DateTime" + FILE = "File" + MULTI_PART = "MultiPart" + @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass class GetBankAccountPushOptionsPushOption: - description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('description') }}) - display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('displayName') }}) - required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('required') }}) - type: GetBankAccountPushOptionsPushOptionOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('type') }}) - options: Optional[list[GetBankAccountPushOptionsPushOptionPushOptionChoice]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('options'), 'exclude': lambda f: f is None }}) - rel: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('rel'), 'exclude': lambda f: f is None }}) - validation: Optional[GetBankAccountPushOptionsPushOptionPushValidationInfo] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('validation'), 'exclude': lambda f: f is None }}) + display_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayName') }}) + required: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required') }}) + type: GetBankAccountPushOptionsPushOptionOptionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + properties: Optional[dict[str, GetBankAccountPushOptionsPushOptionPushOptionProperty]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('properties'), 'exclude': lambda f: f is None }}) @dataclasses.dataclass @@ -226,4 +270,5 @@ class GetBankAccountPushOptionsResponse: content_type: str = dataclasses.field() status_code: int = dataclasses.field() push_option: Optional[GetBankAccountPushOptionsPushOption] = dataclasses.field(default=None) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) \ No newline at end of file diff --git a/bankfeeds/src/codat/models/operations/get_bank_feeds.py b/bankfeeds/src/codat/models/operations/get_bank_feeds.py index 3cec64489..ca789c6b0 100755 --- a/bankfeeds/src/codat/models/operations/get_bank_feeds.py +++ b/bankfeeds/src/codat/models/operations/get_bank_feeds.py @@ -1,6 +1,7 @@ from __future__ import annotations import dataclasses import dateutil.parser +import requests as requests_http from codat import utils from dataclasses_json import Undefined, dataclass_json from datetime import datetime @@ -10,21 +11,10 @@ @dataclasses.dataclass -class GetBankFeedsPathParams: +class GetBankFeedsRequest: company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) - -@dataclasses.dataclass -class GetBankFeedsSecurity: - api_key: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) - - -@dataclasses.dataclass -class GetBankFeedsRequest: - path_params: GetBankFeedsPathParams = dataclasses.field() - security: GetBankFeedsSecurity = dataclasses.field() - class GetBankFeedsBankFeedBankAccountAccountTypeEnum(str, Enum): UNKNOWN = "Unknown" CREDIT = "Credit" @@ -38,16 +28,16 @@ class GetBankFeedsBankFeedBankAccount: The target bank account in a supported accounting package for ingestion into a bank feed. """ - id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('id') }}) - account_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountName'), 'exclude': lambda f: f is None }}) - account_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountNumber'), 'exclude': lambda f: f is None }}) - account_type: Optional[GetBankFeedsBankFeedBankAccountAccountTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountType'), 'exclude': lambda f: f is None }}) - balance: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('balance'), 'exclude': lambda f: f is None }}) - currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('currency'), 'exclude': lambda f: f is None }}) - feed_start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('feedStartDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - sort_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('sortCode'), 'exclude': lambda f: f is None }}) - status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('status'), 'exclude': lambda f: f is None }}) + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + account_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountName'), 'exclude': lambda f: f is None }}) + account_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountNumber'), 'exclude': lambda f: f is None }}) + account_type: Optional[GetBankFeedsBankFeedBankAccountAccountTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountType'), 'exclude': lambda f: f is None }}) + balance: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance'), 'exclude': lambda f: f is None }}) + currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency'), 'exclude': lambda f: f is None }}) + feed_start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feedStartDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + sort_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortCode'), 'exclude': lambda f: f is None }}) + status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) @dataclasses.dataclass @@ -55,4 +45,5 @@ class GetBankFeedsResponse: content_type: str = dataclasses.field() status_code: int = dataclasses.field() bank_feed_bank_accounts: Optional[list[GetBankFeedsBankFeedBankAccount]] = dataclasses.field(default=None) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) \ No newline at end of file diff --git a/bankfeeds/src/codat/models/operations/list_all_bank_transactionscount.py b/bankfeeds/src/codat/models/operations/list_all_bank_transactionscount.py deleted file mode 100755 index f22cf3eb0..000000000 --- a/bankfeeds/src/codat/models/operations/list_all_bank_transactionscount.py +++ /dev/null @@ -1,154 +0,0 @@ -from __future__ import annotations -import dataclasses -import dateutil.parser -from codat import utils -from dataclasses_json import Undefined, dataclass_json -from datetime import datetime -from enum import Enum -from marshmallow import fields -from typing import Optional - - -@dataclasses.dataclass -class ListAllBankTransactionscountPathParams: - account_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'accountId', 'style': 'simple', 'explode': False }}) - company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) - connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) - - -@dataclasses.dataclass -class ListAllBankTransactionscountQueryParams: - page: float = dataclasses.field(metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) - order_by: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'orderBy', 'style': 'form', 'explode': True }}) - page_size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) - query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }}) - - -@dataclasses.dataclass -class ListAllBankTransactionscountSecurity: - api_key: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) - - -@dataclasses.dataclass -class ListAllBankTransactionscountRequest: - path_params: ListAllBankTransactionscountPathParams = dataclasses.field() - query_params: ListAllBankTransactionscountQueryParams = dataclasses.field() - security: ListAllBankTransactionscountSecurity = dataclasses.field() - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class ListAllBankTransactionscountLinksLinksCurrent: - href: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('href') }}) - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class ListAllBankTransactionscountLinksLinksNext: - href: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('href'), 'exclude': lambda f: f is None }}) - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class ListAllBankTransactionscountLinksLinksPrevious: - href: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('href'), 'exclude': lambda f: f is None }}) - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class ListAllBankTransactionscountLinksLinksSelf: - href: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('href') }}) - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class ListAllBankTransactionscountLinksLinks: - current: ListAllBankTransactionscountLinksLinksCurrent = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('current') }}) - self: ListAllBankTransactionscountLinksLinksSelf = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('self') }}) - next: Optional[ListAllBankTransactionscountLinksLinksNext] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('next'), 'exclude': lambda f: f is None }}) - previous: Optional[ListAllBankTransactionscountLinksLinksPrevious] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('previous'), 'exclude': lambda f: f is None }}) - -class ListAllBankTransactionscountLinksResultsTransactionsTransactionTypeEnum(str, Enum): - UNKNOWN = "Unknown" - CREDIT = "Credit" - DEBIT = "Debit" - INT = "Int" - DIV = "Div" - FEE = "Fee" - SER_CHG = "SerChg" - DEP = "Dep" - ATM = "Atm" - POS = "Pos" - XFER = "Xfer" - CHECK = "Check" - PAYMENT = "Payment" - CASH = "Cash" - DIRECT_DEP = "DirectDep" - DIRECT_DEBIT = "DirectDebit" - REPEAT_PMT = "RepeatPmt" - OTHER = "Other" - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class ListAllBankTransactionscountLinksResultsTransactions: - amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('amount') }}) - balance: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('balance') }}) - date_: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }}) - reconciled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('reconciled') }}) - transaction_type: ListAllBankTransactionscountLinksResultsTransactionsTransactionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('transactionType') }}) - counterparty: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('counterparty'), 'exclude': lambda f: f is None }}) - description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('description'), 'exclude': lambda f: f is None }}) - id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('id'), 'exclude': lambda f: f is None }}) - modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - reference: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('reference'), 'exclude': lambda f: f is None }}) - source_modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('sourceModifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class ListAllBankTransactionscountLinksResults: - r"""ListAllBankTransactionscountLinksResults - > **Accessing Bank Accounts through Banking API** - > - > This datatype was originally used for accessing bank account data both in accounting integrations and open banking aggregators. - > - > To view bank account data through the Banking API, please refer to the new datatype [here](https://docs.codat.io/banking-api#/operations/list-all-banking-transactions) - - > View the coverage for bank transactions in the Data coverage explorer. - - ## Overview - - Transactional banking data for a specific company and account. - - Bank transactions include the: - * Amount of the transaction. - * Current account balance. - * Transaction type, for example, credit, debit, or transfer. - """ - - account_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountId'), 'exclude': lambda f: f is None }}) - contract_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('contractVersion'), 'exclude': lambda f: f is None }}) - transactions: Optional[list[ListAllBankTransactionscountLinksResultsTransactions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('transactions'), 'exclude': lambda f: f is None }}) - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class ListAllBankTransactionscountLinks: - r"""ListAllBankTransactionscountLinks - Codat's Paging Model - """ - - links: ListAllBankTransactionscountLinksLinks = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('_links') }}) - page_number: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('pageNumber') }}) - page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('pageSize') }}) - total_results: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('totalResults') }}) - results: Optional[list[ListAllBankTransactionscountLinksResults]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('results'), 'exclude': lambda f: f is None }}) - - -@dataclasses.dataclass -class ListAllBankTransactionscountResponse: - content_type: str = dataclasses.field() - status_code: int = dataclasses.field() - links: Optional[ListAllBankTransactionscountLinks] = dataclasses.field(default=None) - \ No newline at end of file diff --git a/bankfeeds/src/codat/models/operations/list_bank_account_transactions.py b/bankfeeds/src/codat/models/operations/list_bank_account_transactions.py new file mode 100755 index 000000000..882ad180f --- /dev/null +++ b/bankfeeds/src/codat/models/operations/list_bank_account_transactions.py @@ -0,0 +1,140 @@ +from __future__ import annotations +import dataclasses +import dateutil.parser +import requests as requests_http +from codat import utils +from dataclasses_json import Undefined, dataclass_json +from datetime import datetime +from enum import Enum +from marshmallow import fields +from typing import Optional + + +@dataclasses.dataclass +class ListBankAccountTransactionsRequest: + account_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'accountId', 'style': 'simple', 'explode': False }}) + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) + page: float = dataclasses.field(metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) + order_by: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'orderBy', 'style': 'form', 'explode': True }}) + page_size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) + query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }}) + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ListBankAccountTransactionsLinksLinksCurrent: + href: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('href') }}) + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ListBankAccountTransactionsLinksLinksNext: + href: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('href'), 'exclude': lambda f: f is None }}) + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ListBankAccountTransactionsLinksLinksPrevious: + href: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('href'), 'exclude': lambda f: f is None }}) + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ListBankAccountTransactionsLinksLinksSelf: + href: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('href') }}) + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ListBankAccountTransactionsLinksLinks: + current: ListBankAccountTransactionsLinksLinksCurrent = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('current') }}) + self: ListBankAccountTransactionsLinksLinksSelf = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('self') }}) + next: Optional[ListBankAccountTransactionsLinksLinksNext] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('next'), 'exclude': lambda f: f is None }}) + previous: Optional[ListBankAccountTransactionsLinksLinksPrevious] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('previous'), 'exclude': lambda f: f is None }}) + +class ListBankAccountTransactionsLinksResultsTransactionsTransactionTypeEnum(str, Enum): + UNKNOWN = "Unknown" + CREDIT = "Credit" + DEBIT = "Debit" + INT = "Int" + DIV = "Div" + FEE = "Fee" + SER_CHG = "SerChg" + DEP = "Dep" + ATM = "Atm" + POS = "Pos" + XFER = "Xfer" + CHECK = "Check" + PAYMENT = "Payment" + CASH = "Cash" + DIRECT_DEP = "DirectDep" + DIRECT_DEBIT = "DirectDebit" + REPEAT_PMT = "RepeatPmt" + OTHER = "Other" + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ListBankAccountTransactionsLinksResultsTransactions: + amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('amount') }}) + balance: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance') }}) + date_: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }}) + reconciled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reconciled') }}) + transaction_type: ListBankAccountTransactionsLinksResultsTransactionsTransactionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transactionType') }}) + counterparty: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('counterparty'), 'exclude': lambda f: f is None }}) + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + reference: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reference'), 'exclude': lambda f: f is None }}) + source_modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceModifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ListBankAccountTransactionsLinksResults: + r"""ListBankAccountTransactionsLinksResults + > **Accessing Bank Accounts through Banking API** + > + > This datatype was originally used for accessing bank account data both in accounting integrations and open banking aggregators. + > + > To view bank account data through the Banking API, please refer to the new datatype [here](https://docs.codat.io/banking-api#/operations/list-all-banking-transactions) + + > View the coverage for bank transactions in the Data coverage explorer. + + ## Overview + + Transactional banking data for a specific company and account. + + Bank transactions include the: + * Amount of the transaction. + * Current account balance. + * Transaction type, for example, credit, debit, or transfer. + """ + + account_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountId'), 'exclude': lambda f: f is None }}) + contract_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contractVersion'), 'exclude': lambda f: f is None }}) + transactions: Optional[list[ListBankAccountTransactionsLinksResultsTransactions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transactions'), 'exclude': lambda f: f is None }}) + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ListBankAccountTransactionsLinks: + r"""ListBankAccountTransactionsLinks + Codat's Paging Model + """ + + links: ListBankAccountTransactionsLinksLinks = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_links') }}) + page_number: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageNumber') }}) + page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageSize') }}) + total_results: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('totalResults') }}) + results: Optional[list[ListBankAccountTransactionsLinksResults]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }}) + + +@dataclasses.dataclass +class ListBankAccountTransactionsResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + links: Optional[ListBankAccountTransactionsLinks] = dataclasses.field(default=None) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + \ No newline at end of file diff --git a/bankfeeds/src/codat/models/operations/post_bank_transactions.py b/bankfeeds/src/codat/models/operations/post_bank_transactions.py index 6577ecd0f..91c1d8202 100755 --- a/bankfeeds/src/codat/models/operations/post_bank_transactions.py +++ b/bankfeeds/src/codat/models/operations/post_bank_transactions.py @@ -1,6 +1,7 @@ from __future__ import annotations import dataclasses import dateutil.parser +import requests as requests_http from codat import utils from dataclasses_json import Undefined, dataclass_json from datetime import datetime @@ -8,19 +9,6 @@ from marshmallow import fields from typing import Optional - -@dataclasses.dataclass -class PostBankTransactionsPathParams: - account_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'accountId', 'style': 'simple', 'explode': False }}) - company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) - connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) - - -@dataclasses.dataclass -class PostBankTransactionsQueryParams: - allow_sync_on_push_complete: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'allowSyncOnPushComplete', 'style': 'form', 'explode': True }}) - timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'timeoutInMinutes', 'style': 'form', 'explode': True }}) - class PostBankTransactionsRequestBodyTransactionsTransactionTypeEnum(str, Enum): UNKNOWN = "Unknown" CREDIT = "Credit" @@ -45,17 +33,17 @@ class PostBankTransactionsRequestBodyTransactionsTransactionTypeEnum(str, Enum): @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass class PostBankTransactionsRequestBodyTransactions: - amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('amount') }}) - balance: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('balance') }}) - date_: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }}) - reconciled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('reconciled') }}) - transaction_type: PostBankTransactionsRequestBodyTransactionsTransactionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('transactionType') }}) - counterparty: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('counterparty'), 'exclude': lambda f: f is None }}) - description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('description'), 'exclude': lambda f: f is None }}) - id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('id'), 'exclude': lambda f: f is None }}) - modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - reference: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('reference'), 'exclude': lambda f: f is None }}) - source_modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('sourceModifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('amount') }}) + balance: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance') }}) + date_: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }}) + reconciled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reconciled') }}) + transaction_type: PostBankTransactionsRequestBodyTransactionsTransactionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transactionType') }}) + counterparty: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('counterparty'), 'exclude': lambda f: f is None }}) + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + reference: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reference'), 'exclude': lambda f: f is None }}) + source_modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceModifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @@ -80,29 +68,26 @@ class PostBankTransactionsRequestBody: * Transaction type, for example, credit, debit, or transfer. """ - account_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountId'), 'exclude': lambda f: f is None }}) - contract_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('contractVersion'), 'exclude': lambda f: f is None }}) - transactions: Optional[list[PostBankTransactionsRequestBodyTransactions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('transactions'), 'exclude': lambda f: f is None }}) - - -@dataclasses.dataclass -class PostBankTransactionsSecurity: - api_key: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) + account_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountId'), 'exclude': lambda f: f is None }}) + contract_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contractVersion'), 'exclude': lambda f: f is None }}) + transactions: Optional[list[PostBankTransactionsRequestBodyTransactions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transactions'), 'exclude': lambda f: f is None }}) @dataclasses.dataclass class PostBankTransactionsRequest: - path_params: PostBankTransactionsPathParams = dataclasses.field() - query_params: PostBankTransactionsQueryParams = dataclasses.field() - security: PostBankTransactionsSecurity = dataclasses.field() - request: Optional[PostBankTransactionsRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + account_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'accountId', 'style': 'simple', 'explode': False }}) + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) + allow_sync_on_push_complete: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'allowSyncOnPushComplete', 'style': 'form', 'explode': True }}) + request_body: Optional[PostBankTransactionsRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'timeoutInMinutes', 'style': 'form', 'explode': True }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass class PostBankTransactions200ApplicationJSONChangesPushOperationRecordRef: - data_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('dataType'), 'exclude': lambda f: f is None }}) - id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('id'), 'exclude': lambda f: f is None }}) + data_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) class PostBankTransactions200ApplicationJSONChangesTypeEnum(str, Enum): UNKNOWN = "Unknown" @@ -115,9 +100,9 @@ class PostBankTransactions200ApplicationJSONChangesTypeEnum(str, Enum): @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass class PostBankTransactions200ApplicationJSONChanges: - attachment_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('attachmentId'), 'exclude': lambda f: f is None }}) - record_ref: Optional[PostBankTransactions200ApplicationJSONChangesPushOperationRecordRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('recordRef'), 'exclude': lambda f: f is None }}) - type: Optional[PostBankTransactions200ApplicationJSONChangesTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('type'), 'exclude': lambda f: f is None }}) + attachment_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attachmentId'), 'exclude': lambda f: f is None }}) + record_ref: Optional[PostBankTransactions200ApplicationJSONChangesPushOperationRecordRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('recordRef'), 'exclude': lambda f: f is None }}) + type: Optional[PostBankTransactions200ApplicationJSONChangesTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) class PostBankTransactions200ApplicationJSONDataTransactionsTransactionTypeEnum(str, Enum): UNKNOWN = "Unknown" @@ -143,17 +128,17 @@ class PostBankTransactions200ApplicationJSONDataTransactionsTransactionTypeEnum( @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass class PostBankTransactions200ApplicationJSONDataTransactions: - amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('amount') }}) - balance: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('balance') }}) - date_: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }}) - reconciled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('reconciled') }}) - transaction_type: PostBankTransactions200ApplicationJSONDataTransactionsTransactionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('transactionType') }}) - counterparty: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('counterparty'), 'exclude': lambda f: f is None }}) - description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('description'), 'exclude': lambda f: f is None }}) - id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('id'), 'exclude': lambda f: f is None }}) - modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - reference: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('reference'), 'exclude': lambda f: f is None }}) - source_modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('sourceModifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('amount') }}) + balance: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance') }}) + date_: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('date'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }}) + reconciled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reconciled') }}) + transaction_type: PostBankTransactions200ApplicationJSONDataTransactionsTransactionTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transactionType') }}) + counterparty: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('counterparty'), 'exclude': lambda f: f is None }}) + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + reference: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reference'), 'exclude': lambda f: f is None }}) + source_modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceModifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @@ -178,9 +163,9 @@ class PostBankTransactions200ApplicationJSONData: * Transaction type, for example, credit, debit, or transfer. """ - account_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountId'), 'exclude': lambda f: f is None }}) - contract_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('contractVersion'), 'exclude': lambda f: f is None }}) - transactions: Optional[list[PostBankTransactions200ApplicationJSONDataTransactions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('transactions'), 'exclude': lambda f: f is None }}) + account_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountId'), 'exclude': lambda f: f is None }}) + contract_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contractVersion'), 'exclude': lambda f: f is None }}) + transactions: Optional[list[PostBankTransactions200ApplicationJSONDataTransactions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transactions'), 'exclude': lambda f: f is None }}) class PostBankTransactions200ApplicationJSONStatusEnum(str, Enum): PENDING = "Pending" @@ -192,9 +177,9 @@ class PostBankTransactions200ApplicationJSONStatusEnum(str, Enum): @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass class PostBankTransactions200ApplicationJSONValidationValidationItem: - item_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('itemId'), 'exclude': lambda f: f is None }}) - message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('message'), 'exclude': lambda f: f is None }}) - validator_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('validatorName'), 'exclude': lambda f: f is None }}) + item_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('itemId'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + validator_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validatorName'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @@ -204,27 +189,27 @@ class PostBankTransactions200ApplicationJSONValidation: A human-readable object describing validation decisions Codat has made when pushing data into the platform. If a push has failed because of validation errors, they will be detailed here. """ - errors: Optional[list[PostBankTransactions200ApplicationJSONValidationValidationItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('errors'), 'exclude': lambda f: f is None }}) - warnings: Optional[list[PostBankTransactions200ApplicationJSONValidationValidationItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('warnings'), 'exclude': lambda f: f is None }}) + errors: Optional[list[PostBankTransactions200ApplicationJSONValidationValidationItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + warnings: Optional[list[PostBankTransactions200ApplicationJSONValidationValidationItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('warnings'), 'exclude': lambda f: f is None }}) @dataclass_json(undefined=Undefined.EXCLUDE) @dataclasses.dataclass class PostBankTransactions200ApplicationJSON: - company_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('companyId') }}) - data_connection_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('dataConnectionKey') }}) - push_operation_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('pushOperationKey') }}) - requested_on_utc: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('requestedOnUtc'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }}) - status: PostBankTransactions200ApplicationJSONStatusEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('status') }}) - status_code: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('statusCode') }}) - changes: Optional[list[PostBankTransactions200ApplicationJSONChanges]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('changes'), 'exclude': lambda f: f is None }}) - completed_on_utc: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('completedOnUtc'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - data: Optional[PostBankTransactions200ApplicationJSONData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('data'), 'exclude': lambda f: f is None }}) - data_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('dataType'), 'exclude': lambda f: f is None }}) - error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('errorMessage'), 'exclude': lambda f: f is None }}) - timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('timeoutInMinutes'), 'exclude': lambda f: f is None }}) - timeout_in_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('timeoutInSeconds'), 'exclude': lambda f: f is None }}) - validation: Optional[PostBankTransactions200ApplicationJSONValidation] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('validation'), 'exclude': lambda f: f is None }}) + company_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId') }}) + data_connection_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnectionKey') }}) + push_operation_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pushOperationKey') }}) + requested_on_utc: datetime = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('requestedOnUtc'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso') }}) + status: PostBankTransactions200ApplicationJSONStatusEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status') }}) + status_code: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('statusCode') }}) + changes: Optional[list[PostBankTransactions200ApplicationJSONChanges]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('changes'), 'exclude': lambda f: f is None }}) + completed_on_utc: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('completedOnUtc'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + data: Optional[PostBankTransactions200ApplicationJSONData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('data'), 'exclude': lambda f: f is None }}) + data_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataType'), 'exclude': lambda f: f is None }}) + error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorMessage'), 'exclude': lambda f: f is None }}) + timeout_in_minutes: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInMinutes'), 'exclude': lambda f: f is None }}) + timeout_in_seconds: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeoutInSeconds'), 'exclude': lambda f: f is None }}) + validation: Optional[PostBankTransactions200ApplicationJSONValidation] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validation'), 'exclude': lambda f: f is None }}) @dataclasses.dataclass @@ -232,4 +217,5 @@ class PostBankTransactionsResponse: content_type: str = dataclasses.field() status_code: int = dataclasses.field() post_bank_transactions_200_application_json_object: Optional[PostBankTransactions200ApplicationJSON] = dataclasses.field(default=None) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) \ No newline at end of file diff --git a/bankfeeds/src/codat/models/operations/put_bank_feeds.py b/bankfeeds/src/codat/models/operations/put_bank_feeds.py deleted file mode 100755 index ca7676e72..000000000 --- a/bankfeeds/src/codat/models/operations/put_bank_feeds.py +++ /dev/null @@ -1,59 +0,0 @@ -from __future__ import annotations -import dataclasses -import dateutil.parser -from codat import utils -from dataclasses_json import Undefined, dataclass_json -from datetime import datetime -from enum import Enum -from marshmallow import fields -from typing import Optional - - -@dataclasses.dataclass -class PutBankFeedsPathParams: - company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) - connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) - -class PutBankFeedsBankFeedBankAccountAccountTypeEnum(str, Enum): - UNKNOWN = "Unknown" - CREDIT = "Credit" - DEBIT = "Debit" - - -@dataclass_json(undefined=Undefined.EXCLUDE) -@dataclasses.dataclass -class PutBankFeedsBankFeedBankAccount: - r"""PutBankFeedsBankFeedBankAccount - The target bank account in a supported accounting package for ingestion into a bank feed. - """ - - id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('id') }}) - account_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountName'), 'exclude': lambda f: f is None }}) - account_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountNumber'), 'exclude': lambda f: f is None }}) - account_type: Optional[PutBankFeedsBankFeedBankAccountAccountTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountType'), 'exclude': lambda f: f is None }}) - balance: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('balance'), 'exclude': lambda f: f is None }}) - currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('currency'), 'exclude': lambda f: f is None }}) - feed_start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('feedStartDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - sort_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('sortCode'), 'exclude': lambda f: f is None }}) - status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('status'), 'exclude': lambda f: f is None }}) - - -@dataclasses.dataclass -class PutBankFeedsSecurity: - api_key: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) - - -@dataclasses.dataclass -class PutBankFeedsRequest: - path_params: PutBankFeedsPathParams = dataclasses.field() - security: PutBankFeedsSecurity = dataclasses.field() - request: Optional[list[PutBankFeedsBankFeedBankAccount]] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) - - -@dataclasses.dataclass -class PutBankFeedsResponse: - content_type: str = dataclasses.field() - status_code: int = dataclasses.field() - bank_feed_bank_accounts: Optional[list[PutBankFeedsBankFeedBankAccount]] = dataclasses.field(default=None) - \ No newline at end of file diff --git a/bankfeeds/src/codat/models/operations/update_bank_feed.py b/bankfeeds/src/codat/models/operations/update_bank_feed.py index 9e95637b0..f77509970 100755 --- a/bankfeeds/src/codat/models/operations/update_bank_feed.py +++ b/bankfeeds/src/codat/models/operations/update_bank_feed.py @@ -1,6 +1,7 @@ from __future__ import annotations import dataclasses import dateutil.parser +import requests as requests_http from codat import utils from dataclasses_json import Undefined, dataclass_json from datetime import datetime @@ -8,13 +9,6 @@ from marshmallow import fields from typing import Optional - -@dataclasses.dataclass -class UpdateBankFeedPathParams: - bank_account_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'bankAccountId', 'style': 'simple', 'explode': False }}) - company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) - connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) - class UpdateBankFeedBankFeedBankAccountAccountTypeEnum(str, Enum): UNKNOWN = "Unknown" CREDIT = "Credit" @@ -28,28 +22,24 @@ class UpdateBankFeedBankFeedBankAccount: The target bank account in a supported accounting package for ingestion into a bank feed. """ - id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.field_name('id') }}) - account_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountName'), 'exclude': lambda f: f is None }}) - account_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountNumber'), 'exclude': lambda f: f is None }}) - account_type: Optional[UpdateBankFeedBankFeedBankAccountAccountTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('accountType'), 'exclude': lambda f: f is None }}) - balance: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('balance'), 'exclude': lambda f: f is None }}) - currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('currency'), 'exclude': lambda f: f is None }}) - feed_start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('feedStartDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) - sort_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('sortCode'), 'exclude': lambda f: f is None }}) - status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.field_name('status'), 'exclude': lambda f: f is None }}) - - -@dataclasses.dataclass -class UpdateBankFeedSecurity: - api_key: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + account_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountName'), 'exclude': lambda f: f is None }}) + account_number: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountNumber'), 'exclude': lambda f: f is None }}) + account_type: Optional[UpdateBankFeedBankFeedBankAccountAccountTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountType'), 'exclude': lambda f: f is None }}) + balance: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('balance'), 'exclude': lambda f: f is None }}) + currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency'), 'exclude': lambda f: f is None }}) + feed_start_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feedStartDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + modified_date: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modifiedDate'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }}) + sort_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortCode'), 'exclude': lambda f: f is None }}) + status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) @dataclasses.dataclass class UpdateBankFeedRequest: - path_params: UpdateBankFeedPathParams = dataclasses.field() - security: UpdateBankFeedSecurity = dataclasses.field() - request: Optional[UpdateBankFeedBankFeedBankAccount] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + bank_account_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'bankAccountId', 'style': 'simple', 'explode': False }}) + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) + request_body: Optional[UpdateBankFeedBankFeedBankAccount] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) @dataclasses.dataclass @@ -57,4 +47,5 @@ class UpdateBankFeedResponse: content_type: str = dataclasses.field() status_code: int = dataclasses.field() bank_feed_bank_account: Optional[UpdateBankFeedBankFeedBankAccount] = dataclasses.field(default=None) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) \ No newline at end of file diff --git a/bankfeeds/src/codat/models/shared/__init__.py b/bankfeeds/src/codat/models/shared/__init__.py index b6972b92a..ade20fff1 100755 --- a/bankfeeds/src/codat/models/shared/__init__.py +++ b/bankfeeds/src/codat/models/shared/__init__.py @@ -1,3 +1,3 @@ from .security import * -__all__ = ["Security"] \ No newline at end of file +__all__ = ["Security"] diff --git a/bankfeeds/src/codat/models/shared/security.py b/bankfeeds/src/codat/models/shared/security.py index 7fe4a9463..72db7f899 100755 --- a/bankfeeds/src/codat/models/shared/security.py +++ b/bankfeeds/src/codat/models/shared/security.py @@ -2,8 +2,7 @@ import dataclasses - @dataclasses.dataclass class Security: - api_key: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) + auth_header: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) \ No newline at end of file diff --git a/bankfeeds/src/codat/sdk.py b/bankfeeds/src/codat/sdk.py index a71d2b7ec..3e8ea04a2 100755 --- a/bankfeeds/src/codat/sdk.py +++ b/bankfeeds/src/codat/sdk.py @@ -1,5 +1,11 @@ +__doc__ = """ SDK Documentation: Bank Feeds API enables your SMB users to set up bank feeds from accounts in your application to supported accounting platforms. -import requests +A bank feed is a connection between a source bank account—in your application—and a target bank account in a supported accounting package. + +[Read more...](https://docs.codat.io/bank-feeds-api/overview) + +[See our OpenAPI spec](https://github.com/codatio/oas) """ +import requests as requests_http from . import utils from .bank_account_transactions import BankAccountTransactions from .bank_feed_accounts import BankFeedAccounts @@ -9,51 +15,48 @@ "https://api.codat.io", ] - class Codat: + r"""SDK Documentation: Bank Feeds API enables your SMB users to set up bank feeds from accounts in your application to supported accounting platforms. + A bank feed is a connection between a source bank account—in your application—and a target bank account in a supported accounting package. + + [Read more...](https://docs.codat.io/bank-feeds-api/overview) + + [See our OpenAPI spec](https://github.com/codatio/oas) """ bank_account_transactions: BankAccountTransactions bank_feed_accounts: BankFeedAccounts - - _client: requests.Session - _security_client: requests.Session - _security: shared.Security + + _client: requests_http.Session + _security_client: requests_http.Session _server_url: str = SERVERS[0] _language: str = "python" - _sdk_version: str = "0.1.1" - _gen_version: str = "1.7.1" - - def __init__(self) -> None: - self._client = requests.Session() - self._security_client = requests.Session() - self._init_sdks() - - - def config_server_url(self, server_url: str, params: dict[str, str]): - if params is not None: - self._server_url = utils.replace_parameters(server_url, params) - else: - self._server_url = server_url - - self._init_sdks() - + _sdk_version: str = "0.4.0" + _gen_version: str = "1.11.0" - def config_client(self, client: requests.Session): - self._client = client + def __init__(self, + security: shared.Security = None, + server_url: str = None, + url_params: dict[str, str] = None, + client: requests_http.Session = None + ) -> None: + self._client = requests_http.Session() - if self._security is not None: - self._security_client = utils.configure_security_client(self._client, self._security) - self._init_sdks() - + + if server_url is not None: + if url_params is not None: + self._server_url = utils.template_url(server_url, url_params) + else: + self._server_url = server_url - def config_security(self, security: shared.Security): - self._security = security + if client is not None: + self._client = client + self._security_client = utils.configure_security_client(self._client, security) + + self._init_sdks() - def _init_sdks(self): - self.bank_account_transactions = BankAccountTransactions( self._client, self._security_client, @@ -71,5 +74,5 @@ def _init_sdks(self): self._sdk_version, self._gen_version ) - + \ No newline at end of file diff --git a/bankfeeds/src/codat/utils/retries.py b/bankfeeds/src/codat/utils/retries.py index 983d0d462..515316ba8 100755 --- a/bankfeeds/src/codat/utils/retries.py +++ b/bankfeeds/src/codat/utils/retries.py @@ -50,67 +50,67 @@ def __init__(self, inner: Exception): self.inner = inner -def retry(fn, retries: Retries): +def retry(func, retries: Retries): if retries.config.strategy == 'backoff': def do_request(): res: requests.Response try: - res = fn() + res = func() for code in retries.status_codes: if "X" in code.upper(): - codeRange = int(code[0]) + code_range = int(code[0]) - s = res.status_code / 100 + status_major = res.status_code / 100 - if s >= codeRange and s < codeRange + 1: + if status_major >= code_range and status_major < code_range + 1: raise TemporaryError(res) else: parsed_code = int(code) if res.status_code == parsed_code: raise TemporaryError(res) - except requests.exceptions.ConnectionError as e: + except requests.exceptions.ConnectionError as exception: if not retries.config.config.retry_connection_errors: raise - else: - raise PermanentError(e) - except requests.exceptions.Timeout as e: + + raise PermanentError(exception) from exception + except requests.exceptions.Timeout as exception: if not retries.config.config.retry_connection_errors: raise - else: - raise PermanentError(e) + + raise PermanentError(exception) from exception except TemporaryError: raise - except Exception as e: - raise PermanentError(e) + except Exception as exception: + raise PermanentError(exception) from exception return res return retry_with_backoff(do_request, retries.config.backoff.initial_interval, retries.config.backoff.max_interval, retries.config.backoff.exponent, retries.config.backoff.max_elapsed_time) - else: - fn() + + return func() -def retry_with_backoff(fn, initial_interval=500, max_interval=60000, exponent=1.5, max_elapsed_time=3600000): +def retry_with_backoff(func, initial_interval=500, max_interval=60000, exponent=1.5, max_elapsed_time=3600000): start = round(time.time()*1000) - x = 0 + retries = 0 while True: try: - return fn() - except PermanentError as e: - raise e.inner - except Exception as e: + return func() + except PermanentError as exception: + raise exception.inner + except Exception as exception: # pylint: disable=broad-exception-caught now = round(time.time()*1000) if now - start > max_elapsed_time: - if isinstance(e, TemporaryError): - return e.response - else: - raise + if isinstance(exception, TemporaryError): + return exception.response + + raise sleep = ((initial_interval/1000) * - exponent**x + random.uniform(0, 1)) + exponent**retries + random.uniform(0, 1)) if sleep > max_interval/1000: sleep = max_interval/1000 time.sleep(sleep) - x += 1 + retries += 1 diff --git a/bankfeeds/src/codat/utils/utils.py b/bankfeeds/src/codat/utils/utils.py index e9bf17b97..10c6d4f92 100755 --- a/bankfeeds/src/codat/utils/utils.py +++ b/bankfeeds/src/codat/utils/utils.py @@ -5,7 +5,7 @@ from datetime import date, datetime from email.message import Message from enum import Enum -from typing import Callable, Optional, Tuple, Union, get_args, get_origin +from typing import Any, Callable, Optional, Tuple, Union, get_args, get_origin from xmlrpc.client import boolean import dateutil.parser @@ -30,6 +30,9 @@ def request(self, method, url, **kwargs): def configure_security_client(client: requests.Session, security: dataclass): client = SecurityClient(client) + if security is None: + return client + sec_fields: Tuple[Field, ...] = fields(security) for sec_field in sec_fields: value = getattr(security, sec_field.name) @@ -42,7 +45,7 @@ def configure_security_client(client: requests.Session, security: dataclass): if metadata.get('option'): _parse_security_option(client, value) return client - elif metadata.get('scheme'): + if metadata.get('scheme'): # Special case for basic auth which could be a flattened struct if metadata.get("sub_type") == "basic" and not is_dataclass(value): _parse_security_scheme(client, metadata, security) @@ -136,62 +139,73 @@ def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass): client.client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}' -def generate_url(server_url: str, path: str, path_params: dataclass) -> str: - path_param_fields: Tuple[Field, ...] = fields(path_params) - for f in path_param_fields: - param_metadata = f.metadata.get('path_param') +def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> str: + path_param_fields: Tuple[Field, ...] = fields(clazz) + for field in path_param_fields: + request_metadata = field.metadata.get('request') + if request_metadata is not None: + continue + + param_metadata = field.metadata.get('path_param') if param_metadata is None: continue + if param_metadata.get('style', 'simple') == 'simple': - param = getattr(path_params, f.name) + param = getattr( + path_params, field.name) if path_params is not None else None + param = _populate_from_globals( + field.name, param, 'pathParam', gbls) + if param is None: continue - if type(param) is list: + if isinstance(param, list): pp_vals: list[str] = [] for pp_val in param: if pp_val is None: continue - pp_vals.append(val_to_string(pp_val)) + pp_vals.append(_val_to_string(pp_val)) path = path.replace( - '{' + param_metadata.get('field_name', f.name) + '}', ",".join(pp_vals), 1) - elif type(param) is dict: + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + elif isinstance(param, dict): pp_vals: list[str] = [] for pp_key in param: if param[pp_key] is None: continue if param_metadata.get('explode'): pp_vals.append( - f"{pp_key}={val_to_string(param[pp_key])}") + f"{pp_key}={_val_to_string(param[pp_key])}") else: pp_vals.append( - f"{pp_key},{val_to_string(param[pp_key])}") + f"{pp_key},{_val_to_string(param[pp_key])}") path = path.replace( - '{' + param_metadata.get('field_name', f.name) + '}', ",".join(pp_vals), 1) + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) elif not isinstance(param, (str, int, float, complex, bool)): pp_vals: list[str] = [] param_fields: Tuple[Field, ...] = fields(param) - for field in param_fields: - param_value_metadata = field.metadata.get('path_param') + for param_field in param_fields: + param_value_metadata = param_field.metadata.get( + 'path_param') if not param_value_metadata: continue - parm_name = param_value_metadata.get('field_name', f.name) + parm_name = param_value_metadata.get( + 'field_name', field.name) - param_field_val = getattr(param, field.name) + param_field_val = getattr(param, param_field.name) if param_field_val is None: continue - elif param_metadata.get('explode'): + if param_metadata.get('explode'): pp_vals.append( - f"{parm_name}={val_to_string(param_field_val)}") + f"{parm_name}={_val_to_string(param_field_val)}") else: pp_vals.append( - f"{parm_name},{val_to_string(param_field_val)}") + f"{parm_name},{_val_to_string(param_field_val)}") path = path.replace( - '{' + param_metadata.get('field_name', f.name) + '}', ",".join(pp_vals), 1) + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) else: path = path.replace( - '{' + param_metadata.get('field_name', f.name) + '}', val_to_string(param), 1) + '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1) return server_url.removesuffix("/") + path @@ -200,40 +214,46 @@ def is_optional(field): return get_origin(field) is Union and type(None) in get_args(field) -def replace_parameters(string_with_params: str, params: dict[str, str]) -> str: +def template_url(url_with_params: str, params: dict[str, str]) -> str: for key, value in params.items(): - string_with_params = string_with_params.replace( + url_with_params = url_with_params.replace( '{' + key + '}', value) - return string_with_params + return url_with_params -def get_query_params(query_params: dataclass) -> dict[str, list[str]]: - if query_params is None: - return {} - +def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> dict[str, list[str]]: params: dict[str, list[str]] = {} - param_fields: Tuple[Field, ...] = fields(query_params) - for f in param_fields: - metadata = f.metadata.get('query_param') + param_fields: Tuple[Field, ...] = fields(clazz) + for field in param_fields: + request_metadata = field.metadata.get('request') + if request_metadata is not None: + continue + + metadata = field.metadata.get('query_param') if not metadata: continue - param_name = f.name + param_name = field.name + value = getattr( + query_params, param_name) if query_params is not None else None + + value = _populate_from_globals(param_name, value, 'queryParam', gbls) + f_name = metadata.get("field_name") serialization = metadata.get('serialization', '') if serialization != '': params = params | _get_serialized_query_params( - metadata, f_name, getattr(query_params, param_name)) + metadata, f_name, value) else: style = metadata.get('style', 'form') if style == 'deepObject': params = params | _get_deep_object_query_params( - metadata, f_name, getattr(query_params, param_name)) + metadata, f_name, value) elif style == 'form': params = params | _get_form_query_params( - metadata, f_name, getattr(query_params, param_name)) + metadata, f_name, value) else: raise Exception('not yet implemented') return params @@ -246,16 +266,16 @@ def get_headers(headers_params: dataclass) -> dict[str, str]: headers: dict[str, str] = {} param_fields: Tuple[Field, ...] = fields(headers_params) - for f in param_fields: - metadata = f.metadata.get('header') + for field in param_fields: + metadata = field.metadata.get('header') if not metadata: continue value = _serialize_header(metadata.get( - 'explode', False), getattr(headers_params, f.name)) + 'explode', False), getattr(headers_params, field.name)) if value != '': - headers[metadata.get('field_name', f.name)] = value + headers[metadata.get('field_name', field.name)] = value return headers @@ -283,13 +303,13 @@ def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) -> if not obj_param_metadata: continue - val = getattr(obj, obj_field.name) - if val is None: + obj_val = getattr(obj, obj_field.name) + if obj_val is None: continue - if isinstance(val, list): - for v in val: - if v is None: + if isinstance(obj_val, list): + for val in obj_val: + if val is None: continue if params.get(f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None: @@ -297,11 +317,11 @@ def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) -> ] params[ - f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(val_to_string(v)) + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(_val_to_string(val)) else: params[ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ - val_to_string(val)] + _val_to_string(obj_val)] elif isinstance(obj, dict): for key, value in obj.items(): if value is None: @@ -317,10 +337,10 @@ def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) -> ] params[ - f'{metadata.get("field_name", field_name)}[{key}]'].append(val_to_string(val)) + f'{metadata.get("field_name", field_name)}[{key}]'].append(_val_to_string(val)) else: params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ - val_to_string(value)] + _val_to_string(value)] return params @@ -337,46 +357,44 @@ def _get_form_query_params(metadata: dict, field_name: str, obj: any) -> dict[st return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name) -def serialize_request_body(request: dataclass) -> Tuple[str, any, any]: +SERIALIZATION_METHOD_TO_CONTENT_TYPE = { + 'json': 'application/json', + 'form': 'application/x-www-form-urlencoded', + 'multipart': 'multipart/form-data', + 'raw': 'application/octet-stream', + 'string': 'text/plain', +} + + +def serialize_request_body(request: dataclass, request_field_name: str, serialization_method: str) -> Tuple[str, any, any]: if request is None: return None, None, None, None - request_val = getattr(request, "request") - if request_val is None: - raise Exception("request body not found") + if not is_dataclass(request) or not hasattr(request, request_field_name): + return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request) + + request_val = getattr(request, request_field_name) request_fields: Tuple[Field, ...] = fields(request) request_metadata = None - for f in request_fields: - if f.name == "request": - request_metadata = f.metadata.get('request') + for field in request_fields: + if field.name == request_field_name: + request_metadata = field.metadata.get('request') break - if request_metadata is not None: - # single request - return serialize_content_type('request', request_metadata.get('media_type', 'application/octet-stream'), request_val) - - request_fields: Tuple[Field, ...] = fields(request_val) - for f in request_fields: - req = getattr(request_val, f.name) - if req is None: - continue - - request_metadata = f.metadata.get('request') - if request_metadata is None: - raise Exception( - f'missing request tag on request body field {f.name}') + if request_metadata is None: + raise Exception('invalid request type') - return serialize_content_type(f.name, request_metadata.get('media_type', 'application/octet-stream'), req) + return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'), request_val) def serialize_content_type(field_name: str, media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]: - if re.match(r'(application|text)\/.*?\+*json.*', media_type) != None: + if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None: return media_type, marshal_json(request), None - if re.match(r'multipart\/.*', media_type) != None: + if re.match(r'multipart\/.*', media_type) is not None: return serialize_multipart_form(media_type, request) - if re.match(r'application\/x-www-form-urlencoded.*', media_type) != None: + if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None: return media_type, serialize_form_data(field_name, request), None if isinstance(request, (bytes, bytearray)): return media_type, request, None @@ -434,9 +452,9 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, if value is None: continue form.append( - [field_name + "[]", [None, val_to_string(value)]]) + [field_name + "[]", [None, _val_to_string(value)]]) else: - form.append([field_name, [None, val_to_string(val)]]) + form.append([field_name, [None, _val_to_string(val)]]) return media_type, None, form @@ -446,15 +464,15 @@ def serialize_dict(original: dict, explode: bool, field_name, existing: Optional existing = [] if explode is True: - for k, v in original.items(): - if k not in existing: - existing[k] = [] - existing[k].append(v) + for key, val in original.items(): + if key not in existing: + existing[key] = [] + existing[key].append(val) else: temp = [] - for k, v in original.items(): - temp.append(str(k)) - temp.append(str(v)) + for key, val in original.items(): + temp.append(str(key)) + temp.append(str(val)) if field_name not in existing: existing[field_name] = [] existing[field_name].append(",".join(temp)) @@ -487,7 +505,7 @@ def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]: f'Invalid form style for field {field.name}') elif isinstance(data, dict): for key, value in data.items(): - form[key] = [val_to_string(value)] + form[key] = [_val_to_string(value)] else: raise Exception(f'Invalid request body type for field {field_name}') @@ -504,7 +522,7 @@ def _get_form_field_name(obj_field: Field) -> str: def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable) -> dict[str, list[str]]: - params: dict[str, str | list[str]] = {} + params: dict[str, list[str]] = {} if obj is None: return params @@ -523,10 +541,10 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f continue if explode: - params[obj_field_name] = [val_to_string(val)] + params[obj_field_name] = [_val_to_string(val)] else: items.append( - f'{obj_field_name},{val_to_string(val)}') + f'{obj_field_name},{_val_to_string(val)}') if len(items) > 0: params[field_name] = [','.join(items)] @@ -537,9 +555,9 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f continue if explode: - params[key] = val_to_string(value) + params[key] = _val_to_string(value) else: - items.append(f'{key},{val_to_string(value)}') + items.append(f'{key},{_val_to_string(value)}') if len(items) > 0: params[field_name] = [','.join(items)] @@ -553,19 +571,19 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f if explode: if not field_name in params: params[field_name] = [] - params[field_name].append(val_to_string(value)) + params[field_name].append(_val_to_string(value)) else: - items.append(val_to_string(value)) + items.append(_val_to_string(value)) if len(items) > 0: params[field_name] = [','.join([str(item) for item in items])] else: - params[field_name] = val_to_string(obj) + params[field_name] = [_val_to_string(obj)] return params -def _serialize_header(explode: boolean, obj: any) -> str: +def _serialize_header(explode: bool, obj: any) -> str: if obj is None: return '' @@ -589,10 +607,10 @@ def _serialize_header(explode: boolean, obj: any) -> str: if explode: items.append( - f'{obj_field_name}={val_to_string(val)}') + f'{obj_field_name}={_val_to_string(val)}') else: items.append(obj_field_name) - items.append(val_to_string(val)) + items.append(_val_to_string(val)) if len(items) > 0: return ','.join(items) @@ -604,10 +622,10 @@ def _serialize_header(explode: boolean, obj: any) -> str: continue if explode: - items.append(f'{key}={val_to_string(value)}') + items.append(f'{key}={_val_to_string(value)}') else: items.append(key) - items.append(val_to_string(value)) + items.append(_val_to_string(value)) if len(items) > 0: return ','.join([str(item) for item in items]) @@ -618,83 +636,98 @@ def _serialize_header(explode: boolean, obj: any) -> str: if value is None: continue - items.append(val_to_string(value)) + items.append(_val_to_string(value)) - return ','.join(items) + if len(items) > 0: + return ','.join(items) else: - return f'{val_to_string(obj)}' + return f'{_val_to_string(obj)}' + + return '' -def unmarshal_json(data, t): - Unmarhsal = make_dataclass('Unmarhsal', [('res', t)], +def unmarshal_json(data, typ): + unmarhsal = make_dataclass('Unmarhsal', [('res', typ)], bases=(DataClassJsonMixin,)) - d = json.loads(data) - out = Unmarhsal.from_dict({"res": d}) + json_dict = json.loads(data) + out = unmarhsal.from_dict({"res": json_dict}) return out.res -def marshal_json(c): - Marshal = make_dataclass('Marshal', [('res', type(c))], +def marshal_json(val): + marshal = make_dataclass('Marshal', [('res', type(val))], bases=(DataClassJsonMixin,)) - m = Marshal(res=c) - d = m.to_dict() - return json.dumps(d["res"]) + marshaller = marshal(res=val) + json_dict = marshaller.to_dict() + return json.dumps(json_dict["res"]) def match_content_type(content_type: str, pattern: str) -> boolean: - if content_type == pattern or pattern == "*" or pattern == "*/*": + if pattern in (content_type, "*", "*/*"): return True - m = Message() - m['content-type'] = content_type - media_type = m.get_content_type() + msg = Message() + msg['content-type'] = content_type + media_type = msg.get_content_type() if media_type == pattern: return True parts = media_type.split("/") if len(parts) == 2: - if f'{parts[0]}/*' == pattern or f'*/{parts[1]}' == pattern: + if pattern in (f'{parts[0]}/*', f'*/{parts[1]}'): return True return False def datetimeisoformat(optional: bool): - def isoformatoptional(v): - if optional and v is None: + def isoformatoptional(val): + if optional and val is None: return None - return val_to_string(v) + return _val_to_string(val) return isoformatoptional def dateisoformat(optional: bool): - def isoformatoptional(v): - if optional and v is None: + def isoformatoptional(val): + if optional and val is None: return None - return date.isoformat(v) + return date.isoformat(val) return isoformatoptional -def datefromisoformat(date: str): - return dateutil.parser.parse(date).date() +def datefromisoformat(date_str: str): + return dateutil.parser.parse(date_str).date() -def field_name(name): +def get_field_name(name): def override(_, _field_name=name): return _field_name return override -def val_to_string(val): +def _val_to_string(val): if isinstance(val, bool): return str(val).lower() - elif isinstance(val, datetime): + if isinstance(val, datetime): return val.isoformat().replace('+00:00', 'Z') - elif isinstance(val, Enum): + if isinstance(val, Enum): return val.value return str(val) + + +def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: dict[str, dict[str, dict[str, Any]]]): + if value is None and gbls is not None: + if 'parameters' in gbls: + if param_type in gbls['parameters']: + if param_name in gbls['parameters'][param_type]: + global_value = gbls['parameters'][param_type][param_name] + if global_value is not None: + value = global_value + + return value