[v4,1/9] dts: add project tools config

Message ID 20220729105550.1382664-2-juraj.linkes@pantheon.tech (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series dts: ssh connection to a node |

Checks

Context Check Description
ci/checkpatch warning coding style issues

Commit Message

Juraj Linkeš July 29, 2022, 10:55 a.m. UTC
  .gitignore contains standard Python-related files.

Apart from that, add configuration for Python tools used in DTS:
Poetry, dependency and package manager
Black, formatter
Pylama, static analysis
Isort, import sorting

.editorconfig modifies the line length to 88, which is the default Black
uses. It seems to be the best of all worlds. [0]

[0] https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length

Signed-off-by: Owen Hilyard <ohilyard@iol.unh.edu>
Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
 dts/.editorconfig  |   7 +
 dts/.gitignore     |  14 ++
 dts/README.md      |  15 ++
 dts/poetry.lock    | 474 +++++++++++++++++++++++++++++++++++++++++++++
 dts/pylama.ini     |   8 +
 dts/pyproject.toml |  43 ++++
 6 files changed, 561 insertions(+)
 create mode 100644 dts/.editorconfig
 create mode 100644 dts/.gitignore
 create mode 100644 dts/README.md
 create mode 100644 dts/poetry.lock
 create mode 100644 dts/pylama.ini
 create mode 100644 dts/pyproject.toml
  

Comments

Tu, Lijuan Aug. 10, 2022, 6:30 a.m. UTC | #1
> -----Original Message-----
> From: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Sent: Friday, July 29, 2022 6:56 PM
> To: thomas@monjalon.net; david.marchand@redhat.com; Randles, Ronan
> <ronan.randles@intel.com>; Honnappa.Nagarahalli@arm.com;
> ohilyard@iol.unh.edu; Tu, Lijuan <lijuan.tu@intel.com>
> Cc: dev@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech>
> Subject: [PATCH v4 1/9] dts: add project tools config
> 
> .gitignore contains standard Python-related files.
> 
> Apart from that, add configuration for Python tools used in DTS:
> Poetry, dependency and package manager
> Black, formatter
> Pylama, static analysis
> Isort, import sorting
> 
> .editorconfig modifies the line length to 88, which is the default Black uses. It
> seems to be the best of all worlds. [0]
> 
> [0]
> https://black.readthedocs.io/en/stable/the_black_code_style/current_style.htm
> l#line-length
> 
> Signed-off-by: Owen Hilyard <ohilyard@iol.unh.edu>
> Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> ---
>  dts/.editorconfig  |   7 +
>  dts/.gitignore     |  14 ++
>  dts/README.md      |  15 ++
>  dts/poetry.lock    | 474 +++++++++++++++++++++++++++++++++++++++++++++
>  dts/pylama.ini     |   8 +
>  dts/pyproject.toml |  43 ++++
>  6 files changed, 561 insertions(+)
>  create mode 100644 dts/.editorconfig
>  create mode 100644 dts/.gitignore
>  create mode 100644 dts/README.md
>  create mode 100644 dts/poetry.lock
>  create mode 100644 dts/pylama.ini
>  create mode 100644 dts/pyproject.toml
>

Reviewed-by: Lijuan Tu <lijuan.tu@intel.com>

Thanks,
Lijuan
  
Bruce Richardson Sept. 7, 2022, 4:16 p.m. UTC | #2
On Fri, Jul 29, 2022 at 10:55:42AM +0000, Juraj Linkeš wrote:
> .gitignore contains standard Python-related files.
> 
> Apart from that, add configuration for Python tools used in DTS:
> Poetry, dependency and package manager
> Black, formatter
> Pylama, static analysis
> Isort, import sorting
> 
> .editorconfig modifies the line length to 88, which is the default Black
> uses. It seems to be the best of all worlds. [0]
> 
> [0] https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length
> 
> Signed-off-by: Owen Hilyard <ohilyard@iol.unh.edu>
> Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>

Thanks for the work on this. Some review comments inline below.

/Bruce

> ---
>  dts/.editorconfig  |   7 +
>  dts/.gitignore     |  14 ++
>  dts/README.md      |  15 ++
>  dts/poetry.lock    | 474 +++++++++++++++++++++++++++++++++++++++++++++
>  dts/pylama.ini     |   8 +
>  dts/pyproject.toml |  43 ++++
>  6 files changed, 561 insertions(+)
>  create mode 100644 dts/.editorconfig
>  create mode 100644 dts/.gitignore
>  create mode 100644 dts/README.md
>  create mode 100644 dts/poetry.lock
>  create mode 100644 dts/pylama.ini
>  create mode 100644 dts/pyproject.toml
> 
> diff --git a/dts/.editorconfig b/dts/.editorconfig
> new file mode 100644
> index 0000000000..657f959030
> --- /dev/null
> +++ b/dts/.editorconfig
> @@ -0,0 +1,7 @@
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2022 PANTHEON.tech s.r.o.
> +# See https://editorconfig.org/ for syntax reference.
> +#
> +
> +[*.py]
> +max_line_length = 88

It seems strange to have two different editorconfig settings in DPDK. Is
there a reason that:
a) we can't use 79, the current DPDK default and recommended length by
   pycodestyle? Or alternatively:
b) change all of DPDK to use the 88 setting?

Also, 88 seems an unusual number. How was it chosen/arrived at?

> diff --git a/dts/.gitignore b/dts/.gitignore
> new file mode 100644
> index 0000000000..9c49935b6f
> --- /dev/null
> +++ b/dts/.gitignore
> @@ -0,0 +1,14 @@
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2022 PANTHEON.tech s.r.o.
> +#
> +
> +# Byte-compiled / optimized / DLL files
> +__pycache__/
> +*.py[cod]
> +*$py.class
> +
> +# IDE files
> +.idea
> +
> +# DTS results
> +output

I think this should be ok to merge into the main DPDK .gitignore file.

> diff --git a/dts/README.md b/dts/README.md
> new file mode 100644
> index 0000000000..d8f88f97fe
> --- /dev/null
<snip>
> diff --git a/dts/pylama.ini b/dts/pylama.ini
> new file mode 100644
> index 0000000000..23fc709b5a
> --- /dev/null
> +++ b/dts/pylama.ini
> @@ -0,0 +1,8 @@
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2022 University of New Hampshire
> +#
> +
> +[pylama]
> +format = pylint
> +linters = pep8,pycodestyle,pylint
> +ignore = F0401,C0111,E731,E266,E501,E203

I think it would be good to comment on what these ignored values are, so we
can look to remove them in future, or minimise the list.
From checking the docs, is the below correct?

E203 - whitespace before ‘,’, ‘;’, or ‘:’
E266 - too many leading ‘#’ for block comment
E501 - line too long
E731 - do not assign a lambda expression, use a def
C0111 - Missing %s docstring
F0401 - Unable to import %s

Some of these - particularly the first 2 above - look like they should be
relatively easy to fix and remove the need for ignoring the errors. Are the
standards violations in our DTS code or in some dependencies we import or
code taken from elsewhere?

> diff --git a/dts/pyproject.toml b/dts/pyproject.toml

<Snip for brevity>
  
Juraj Linkeš Sept. 9, 2022, 1:38 p.m. UTC | #3
> -----Original Message-----
> From: Bruce Richardson <bruce.richardson@intel.com>
> Sent: Wednesday, September 7, 2022 6:17 PM
> To: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Cc: thomas@monjalon.net; david.marchand@redhat.com;
> ronan.randles@intel.com; Honnappa.Nagarahalli@arm.com;
> ohilyard@iol.unh.edu; lijuan.tu@intel.com; dev@dpdk.org
> Subject: Re: [PATCH v4 1/9] dts: add project tools config
> 
> On Fri, Jul 29, 2022 at 10:55:42AM +0000, Juraj Linkeš wrote:
> > .gitignore contains standard Python-related files.
> >
> > Apart from that, add configuration for Python tools used in DTS:
> > Poetry, dependency and package manager Black, formatter Pylama, static
> > analysis Isort, import sorting
> >
> > .editorconfig modifies the line length to 88, which is the default
> > Black uses. It seems to be the best of all worlds. [0]
> >
> > [0]
> > https://black.readthedocs.io/en/stable/the_black_code_style/current_st
> > yle.html#line-length
> >
> > Signed-off-by: Owen Hilyard <ohilyard@iol.unh.edu>
> > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> 
> Thanks for the work on this. Some review comments inline below.
> 
> /Bruce
> 
> > ---
> >  dts/.editorconfig  |   7 +
> >  dts/.gitignore     |  14 ++
> >  dts/README.md      |  15 ++
> >  dts/poetry.lock    | 474
> +++++++++++++++++++++++++++++++++++++++++++++
> >  dts/pylama.ini     |   8 +
> >  dts/pyproject.toml |  43 ++++
> >  6 files changed, 561 insertions(+)
> >  create mode 100644 dts/.editorconfig
> >  create mode 100644 dts/.gitignore
> >  create mode 100644 dts/README.md
> >  create mode 100644 dts/poetry.lock
> >  create mode 100644 dts/pylama.ini
> >  create mode 100644 dts/pyproject.toml
> >
> > diff --git a/dts/.editorconfig b/dts/.editorconfig new file mode
> > 100644 index 0000000000..657f959030
> > --- /dev/null
> > +++ b/dts/.editorconfig
> > @@ -0,0 +1,7 @@
> > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > +PANTHEON.tech s.r.o.
> > +# See https://editorconfig.org/ for syntax reference.
> > +#
> > +
> > +[*.py]
> > +max_line_length = 88
> 
> It seems strange to have two different editorconfig settings in DPDK. Is there a
> reason that:
> a) we can't use 79, the current DPDK default and recommended length by
>    pycodestyle? Or alternatively:
> b) change all of DPDK to use the 88 setting?
> 
> Also, 88 seems an unusual number. How was it chosen/arrived at?
> 

The commit message contains a link to Black's documentation where they explain it:
https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length

Let me know what you think about it. I think it's reasonable. I'll move the config to the top level .editorconfig file.

> > diff --git a/dts/.gitignore b/dts/.gitignore new file mode 100644
> > index 0000000000..9c49935b6f
> > --- /dev/null
> > +++ b/dts/.gitignore
> > @@ -0,0 +1,14 @@
> > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > +PANTHEON.tech s.r.o.
> > +#
> > +
> > +# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod]
> > +*$py.class
> > +
> > +# IDE files
> > +.idea
> > +
> > +# DTS results
> > +output
> 
> I think this should be ok to merge into the main DPDK .gitignore file.
> 

Ok, I'll move it there.
A sidenote - should I add Pantheon to the licence header?

> > diff --git a/dts/README.md b/dts/README.md new file mode 100644 index
> > 0000000000..d8f88f97fe
> > --- /dev/null
> <snip>
> > diff --git a/dts/pylama.ini b/dts/pylama.ini new file mode 100644
> > index 0000000000..23fc709b5a
> > --- /dev/null
> > +++ b/dts/pylama.ini
> > @@ -0,0 +1,8 @@
> > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > +University of New Hampshire #
> > +
> > +[pylama]
> > +format = pylint
> > +linters = pep8,pycodestyle,pylint
> > +ignore = F0401,C0111,E731,E266,E501,E203
> 
> I think it would be good to comment on what these ignored values are, so we
> can look to remove them in future, or minimise the list.
> From checking the docs, is the below correct?
> 
> E203 - whitespace before ‘,’, ‘;’, or ‘:’
> E266 - too many leading ‘#’ for block comment
> E501 - line too long
> E731 - do not assign a lambda expression, use a def
> C0111 - Missing %s docstring
> F0401 - Unable to import %s
> 
> Some of these - particularly the first 2 above - look like they should be relatively
> easy to fix and remove the need for ignoring the errors. Are the standards
> violations in our DTS code or in some dependencies we import or code taken
> from elsewhere?
> 

I'll let Owen comment on this, he devised the ignorelist. I know that these were chosen when were working with the original DTS code, but now that we're submitting smaller chunks and making bigger changes, we should be able to remove some of these. I think we should leave C0111 and we could easily address the rest (which would require more work on this and future patches), but Owen has a better understanding of this.

> > diff --git a/dts/pyproject.toml b/dts/pyproject.toml
> 
> <Snip for brevity>
>
  
Bruce Richardson Sept. 9, 2022, 1:52 p.m. UTC | #4
On Fri, Sep 09, 2022 at 01:38:33PM +0000, Juraj Linkeš wrote:
> 
> 
> > -----Original Message-----
> > From: Bruce Richardson <bruce.richardson@intel.com>
> > Sent: Wednesday, September 7, 2022 6:17 PM
> > To: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > Cc: thomas@monjalon.net; david.marchand@redhat.com;
> > ronan.randles@intel.com; Honnappa.Nagarahalli@arm.com;
> > ohilyard@iol.unh.edu; lijuan.tu@intel.com; dev@dpdk.org
> > Subject: Re: [PATCH v4 1/9] dts: add project tools config
> > 
> > On Fri, Jul 29, 2022 at 10:55:42AM +0000, Juraj Linkeš wrote:
> > > .gitignore contains standard Python-related files.
> > >
> > > Apart from that, add configuration for Python tools used in DTS:
> > > Poetry, dependency and package manager Black, formatter Pylama, static
> > > analysis Isort, import sorting
> > >
> > > .editorconfig modifies the line length to 88, which is the default
> > > Black uses. It seems to be the best of all worlds. [0]
> > >
> > > [0]
> > > https://black.readthedocs.io/en/stable/the_black_code_style/current_st
> > > yle.html#line-length
> > >
> > > Signed-off-by: Owen Hilyard <ohilyard@iol.unh.edu>
> > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > 
> > Thanks for the work on this. Some review comments inline below.
> > 
> > /Bruce
> > 
> > > ---
> > >  dts/.editorconfig  |   7 +
> > >  dts/.gitignore     |  14 ++
> > >  dts/README.md      |  15 ++
> > >  dts/poetry.lock    | 474
> > +++++++++++++++++++++++++++++++++++++++++++++
> > >  dts/pylama.ini     |   8 +
> > >  dts/pyproject.toml |  43 ++++
> > >  6 files changed, 561 insertions(+)
> > >  create mode 100644 dts/.editorconfig
> > >  create mode 100644 dts/.gitignore
> > >  create mode 100644 dts/README.md
> > >  create mode 100644 dts/poetry.lock
> > >  create mode 100644 dts/pylama.ini
> > >  create mode 100644 dts/pyproject.toml
> > >
> > > diff --git a/dts/.editorconfig b/dts/.editorconfig new file mode
> > > 100644 index 0000000000..657f959030
> > > --- /dev/null
> > > +++ b/dts/.editorconfig
> > > @@ -0,0 +1,7 @@
> > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > +PANTHEON.tech s.r.o.
> > > +# See https://editorconfig.org/ for syntax reference.
> > > +#
> > > +
> > > +[*.py]
> > > +max_line_length = 88
> > 
> > It seems strange to have two different editorconfig settings in DPDK. Is there a
> > reason that:
> > a) we can't use 79, the current DPDK default and recommended length by
> >    pycodestyle? Or alternatively:
> > b) change all of DPDK to use the 88 setting?
> > 
> > Also, 88 seems an unusual number. How was it chosen/arrived at?
> > 
> 
> The commit message contains a link to Black's documentation where they explain it:
> https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length
> 
> Let me know what you think about it. I think it's reasonable. I'll move the config to the top level .editorconfig file.
> 

I have no objection to moving this to the top level, but others may like to
keep our python style as standard. Realistically I see three choices here:

1. Force DTS to conform to existing DPDK python style of 79 characters
2. Allow DTS to use 88 chars but the rest of DPDK to keep with 79 chars
3. Allow all of DPDK to use 88 chars.

Of the 3, I like relaxing the 79/80 char limit so #3 seems best to me as
you suggest. However, I'd wait a few days for a desenting opinion before
I'd do a new patchset revision. :-)

/Bruce
  
Juraj Linkeš Sept. 9, 2022, 2:13 p.m. UTC | #5
> -----Original Message-----
> From: Bruce Richardson <bruce.richardson@intel.com>
> Sent: Friday, September 9, 2022 3:53 PM
> To: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Cc: thomas@monjalon.net; david.marchand@redhat.com;
> ronan.randles@intel.com; Honnappa.Nagarahalli@arm.com;
> ohilyard@iol.unh.edu; lijuan.tu@intel.com; dev@dpdk.org
> Subject: Re: [PATCH v4 1/9] dts: add project tools config
> 
> On Fri, Sep 09, 2022 at 01:38:33PM +0000, Juraj Linkeš wrote:
> >
> >
> > > -----Original Message-----
> > > From: Bruce Richardson <bruce.richardson@intel.com>
> > > Sent: Wednesday, September 7, 2022 6:17 PM
> > > To: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > > Cc: thomas@monjalon.net; david.marchand@redhat.com;
> > > ronan.randles@intel.com; Honnappa.Nagarahalli@arm.com;
> > > ohilyard@iol.unh.edu; lijuan.tu@intel.com; dev@dpdk.org
> > > Subject: Re: [PATCH v4 1/9] dts: add project tools config
> > >
> > > On Fri, Jul 29, 2022 at 10:55:42AM +0000, Juraj Linkeš wrote:
> > > > .gitignore contains standard Python-related files.
> > > >
> > > > Apart from that, add configuration for Python tools used in DTS:
> > > > Poetry, dependency and package manager Black, formatter Pylama,
> > > > static analysis Isort, import sorting
> > > >
> > > > .editorconfig modifies the line length to 88, which is the default
> > > > Black uses. It seems to be the best of all worlds. [0]
> > > >
> > > > [0]
> > > > https://black.readthedocs.io/en/stable/the_black_code_style/curren
> > > > t_st
> > > > yle.html#line-length
> > > >
> > > > Signed-off-by: Owen Hilyard <ohilyard@iol.unh.edu>
> > > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > >
> > > Thanks for the work on this. Some review comments inline below.
> > >
> > > /Bruce
> > >
> > > > ---
> > > >  dts/.editorconfig  |   7 +
> > > >  dts/.gitignore     |  14 ++
> > > >  dts/README.md      |  15 ++
> > > >  dts/poetry.lock    | 474
> > > +++++++++++++++++++++++++++++++++++++++++++++
> > > >  dts/pylama.ini     |   8 +
> > > >  dts/pyproject.toml |  43 ++++
> > > >  6 files changed, 561 insertions(+)  create mode 100644
> > > > dts/.editorconfig  create mode 100644 dts/.gitignore  create mode
> > > > 100644 dts/README.md  create mode 100644 dts/poetry.lock  create
> > > > mode 100644 dts/pylama.ini  create mode 100644 dts/pyproject.toml
> > > >
> > > > diff --git a/dts/.editorconfig b/dts/.editorconfig new file mode
> > > > 100644 index 0000000000..657f959030
> > > > --- /dev/null
> > > > +++ b/dts/.editorconfig
> > > > @@ -0,0 +1,7 @@
> > > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > > +PANTHEON.tech s.r.o.
> > > > +# See https://editorconfig.org/ for syntax reference.
> > > > +#
> > > > +
> > > > +[*.py]
> > > > +max_line_length = 88
> > >
> > > It seems strange to have two different editorconfig settings in
> > > DPDK. Is there a reason that:
> > > a) we can't use 79, the current DPDK default and recommended length by
> > >    pycodestyle? Or alternatively:
> > > b) change all of DPDK to use the 88 setting?
> > >
> > > Also, 88 seems an unusual number. How was it chosen/arrived at?
> > >
> >
> > The commit message contains a link to Black's documentation where they
> explain it:
> > https://black.readthedocs.io/en/stable/the_black_code_style/current_st
> > yle.html#line-length
> >
> > Let me know what you think about it. I think it's reasonable. I'll move the
> config to the top level .editorconfig file.
> >
> 
> I have no objection to moving this to the top level, but others may like to keep
> our python style as standard. Realistically I see three choices here:
> 
> 1. Force DTS to conform to existing DPDK python style of 79 characters 2. Allow
> DTS to use 88 chars but the rest of DPDK to keep with 79 chars 3. Allow all of
> DPDK to use 88 chars.
> 
> Of the 3, I like relaxing the 79/80 char limit so #3 seems best to me as you
> suggest. However, I'd wait a few days for a desenting opinion before I'd do a
> new patchset revision. :-)
> 

Ok, I'll wait.

> /Bruce
  
Owen Hilyard Sept. 12, 2022, 2:06 p.m. UTC | #6
> E203 - whitespace before ‘,’, ‘;’, or ‘:’
> E266 - too many leading ‘#’ for block comment
> E501 - line too long
> E731 - do not assign a lambda expression, use a def
> C0111 - Missing %s docstring
> F0401 - Unable to import %s

E203, E266 and E501 were disabled due to pylama fighting with the
autoformatters, so I decided to let the autoformatters win. I think
that C0111 was suppressed because this set of suppressions was from
mainline DTS and that has a lot of functions without documentation. F0401
is disabled due to dependencies on TRex vendored python libraries,
since those will not be possible to import inside of the container. I don't
remember why E731 is set, but it may be due to the rte flow rule generator
I wrote for mainline DTS, which makes use of lambdas extensively to enable
lazy evaluation, so that DTS doesn't need to keep ~2 billion rules in
memory.



On Fri, Sep 9, 2022 at 10:13 AM Juraj Linkeš <juraj.linkes@pantheon.tech>
wrote:

>
>
> > -----Original Message-----
> > From: Bruce Richardson <bruce.richardson@intel.com>
> > Sent: Friday, September 9, 2022 3:53 PM
> > To: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > Cc: thomas@monjalon.net; david.marchand@redhat.com;
> > ronan.randles@intel.com; Honnappa.Nagarahalli@arm.com;
> > ohilyard@iol.unh.edu; lijuan.tu@intel.com; dev@dpdk.org
> > Subject: Re: [PATCH v4 1/9] dts: add project tools config
> >
> > On Fri, Sep 09, 2022 at 01:38:33PM +0000, Juraj Linkeš wrote:
> > >
> > >
> > > > -----Original Message-----
> > > > From: Bruce Richardson <bruce.richardson@intel.com>
> > > > Sent: Wednesday, September 7, 2022 6:17 PM
> > > > To: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > > > Cc: thomas@monjalon.net; david.marchand@redhat.com;
> > > > ronan.randles@intel.com; Honnappa.Nagarahalli@arm.com;
> > > > ohilyard@iol.unh.edu; lijuan.tu@intel.com; dev@dpdk.org
> > > > Subject: Re: [PATCH v4 1/9] dts: add project tools config
> > > >
> > > > On Fri, Jul 29, 2022 at 10:55:42AM +0000, Juraj Linkeš wrote:
> > > > > .gitignore contains standard Python-related files.
> > > > >
> > > > > Apart from that, add configuration for Python tools used in DTS:
> > > > > Poetry, dependency and package manager Black, formatter Pylama,
> > > > > static analysis Isort, import sorting
> > > > >
> > > > > .editorconfig modifies the line length to 88, which is the default
> > > > > Black uses. It seems to be the best of all worlds. [0]
> > > > >
> > > > > [0]
> > > > > https://black.readthedocs.io/en/stable/the_black_code_style/curren
> > > > > t_st
> > > > > yle.html#line-length
> > > > >
> > > > > Signed-off-by: Owen Hilyard <ohilyard@iol.unh.edu>
> > > > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > > >
> > > > Thanks for the work on this. Some review comments inline below.
> > > >
> > > > /Bruce
> > > >
> > > > > ---
> > > > >  dts/.editorconfig  |   7 +
> > > > >  dts/.gitignore     |  14 ++
> > > > >  dts/README.md      |  15 ++
> > > > >  dts/poetry.lock    | 474
> > > > +++++++++++++++++++++++++++++++++++++++++++++
> > > > >  dts/pylama.ini     |   8 +
> > > > >  dts/pyproject.toml |  43 ++++
> > > > >  6 files changed, 561 insertions(+)  create mode 100644
> > > > > dts/.editorconfig  create mode 100644 dts/.gitignore  create mode
> > > > > 100644 dts/README.md  create mode 100644 dts/poetry.lock  create
> > > > > mode 100644 dts/pylama.ini  create mode 100644 dts/pyproject.toml
> > > > >
> > > > > diff --git a/dts/.editorconfig b/dts/.editorconfig new file mode
> > > > > 100644 index 0000000000..657f959030
> > > > > --- /dev/null
> > > > > +++ b/dts/.editorconfig
> > > > > @@ -0,0 +1,7 @@
> > > > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > > > +PANTHEON.tech s.r.o.
> > > > > +# See https://editorconfig.org/ for syntax reference.
> > > > > +#
> > > > > +
> > > > > +[*.py]
> > > > > +max_line_length = 88
> > > >
> > > > It seems strange to have two different editorconfig settings in
> > > > DPDK. Is there a reason that:
> > > > a) we can't use 79, the current DPDK default and recommended length
> by
> > > >    pycodestyle? Or alternatively:
> > > > b) change all of DPDK to use the 88 setting?
> > > >
> > > > Also, 88 seems an unusual number. How was it chosen/arrived at?
> > > >
> > >
> > > The commit message contains a link to Black's documentation where they
> > explain it:
> > > https://black.readthedocs.io/en/stable/the_black_code_style/current_st
> > > yle.html#line-length
> > >
> > > Let me know what you think about it. I think it's reasonable. I'll
> move the
> > config to the top level .editorconfig file.
> > >
> >
> > I have no objection to moving this to the top level, but others may like
> to keep
> > our python style as standard. Realistically I see three choices here:
> >
> > 1. Force DTS to conform to existing DPDK python style of 79 characters
> 2. Allow
> > DTS to use 88 chars but the rest of DPDK to keep with 79 chars 3. Allow
> all of
> > DPDK to use 88 chars.
> >
> > Of the 3, I like relaxing the 79/80 char limit so #3 seems best to me as
> you
> > suggest. However, I'd wait a few days for a desenting opinion before I'd
> do a
> > new patchset revision. :-)
> >
>
> Ok, I'll wait.
>
> > /Bruce
>
>
  
Bruce Richardson Sept. 12, 2022, 3:15 p.m. UTC | #7
On Mon, Sep 12, 2022 at 10:06:03AM -0400, Owen Hilyard wrote:
>    > E203 - whitespace before ‘,’, ‘;’, or ‘:’
>    > E266 - too many leading ‘#’ for block comment
>    > E501 - line too long
>    > E731 - do not assign a lambda expression, use a def
>    > C0111 - Missing %s docstring
>    > F0401 - Unable to import %s
>    E203, E266 and E501 were disabled due to pylama fighting with the
>    autoformatters, so I decided to let the autoformatters win.

That sounds strange. Is there no way to configure the auto-formatters to
avoid these issues? E203 I think we definitely should look to re-enable in
DTS.

> I think
>    that C0111 was suppressed because this set of suppressions was from
>    mainline DTS and that has a lot of functions without
>    documentation.

Is this something we can fix as we go, migrating to DPDK main tree?

>  F0401 is disabled due to dependencies on TRex vendored
>    python libraries, since those will not be possible to import inside of
>    the container.

That seems fair enough to keep disabled.

> I don't remember why E731 is set, but it may be due to
>    the rte flow rule generator I wrote for mainline DTS, which makes use
>    of lambdas extensively to enable lazy evaluation, so that DTS doesn't
>    need to keep ~2 billion rules in memory.

That sounds reasonable too.

Can we perhaps target getting from 6 disabled warnings to 2 or 3 at most?

Other opinions?

/Bruce
  
Juraj Linkeš Sept. 13, 2022, 12:08 p.m. UTC | #8
> -----Original Message-----
> From: Bruce Richardson <bruce.richardson@intel.com>
> Sent: Monday, September 12, 2022 5:15 PM
> To: Owen Hilyard <ohilyard@iol.unh.edu>
> Cc: Juraj Linkeš <juraj.linkes@pantheon.tech>; thomas@monjalon.net;
> david.marchand@redhat.com; ronan.randles@intel.com;
> Honnappa.Nagarahalli@arm.com; lijuan.tu@intel.com; dev@dpdk.org
> Subject: Re: [PATCH v4 1/9] dts: add project tools config
> 
> On Mon, Sep 12, 2022 at 10:06:03AM -0400, Owen Hilyard wrote:
> >    > E203 - whitespace before ‘,’, ‘;’, or ‘:’
> >    > E266 - too many leading ‘#’ for block comment
> >    > E501 - line too long
> >    > E731 - do not assign a lambda expression, use a def
> >    > C0111 - Missing %s docstring
> >    > F0401 - Unable to import %s
> >    E203, E266 and E501 were disabled due to pylama fighting with the
> >    autoformatters, so I decided to let the autoformatters win.
> 
> That sounds strange. Is there no way to configure the auto-formatters to avoid
> these issues? E203 I think we definitely should look to re-enable in DTS.
> 
> > I think
> >    that C0111 was suppressed because this set of suppressions was from
> >    mainline DTS and that has a lot of functions without
> >    documentation.
> 
> Is this something we can fix as we go, migrating to DPDK main tree?
> 
> >  F0401 is disabled due to dependencies on TRex vendored
> >    python libraries, since those will not be possible to import inside of
> >    the container.
> 
> That seems fair enough to keep disabled.
> 
> > I don't remember why E731 is set, but it may be due to
> >    the rte flow rule generator I wrote for mainline DTS, which makes use
> >    of lambdas extensively to enable lazy evaluation, so that DTS doesn't
> >    need to keep ~2 billion rules in memory.
> 
> That sounds reasonable too.
> 
> Can we perhaps target getting from 6 disabled warnings to 2 or 3 at most?
> 
> Other opinions?
> 

We don't actually need the ignorelist at this point - I've removed the ignorelist, fixed a few issues and the tools don't report any problems. I'd like to start here and disable checks (either globally or in code where it's needed) when we actually need them (in a future patch).

> /Bruce
>
  
Bruce Richardson Sept. 13, 2022, 2:18 p.m. UTC | #9
On Tue, Sep 13, 2022 at 12:08:48PM +0000, Juraj Linkeš wrote:
> 
> 
> > -----Original Message-----
> > From: Bruce Richardson <bruce.richardson@intel.com>
> > Sent: Monday, September 12, 2022 5:15 PM
> > To: Owen Hilyard <ohilyard@iol.unh.edu>
> > Cc: Juraj Linkeš <juraj.linkes@pantheon.tech>; thomas@monjalon.net;
> > david.marchand@redhat.com; ronan.randles@intel.com;
> > Honnappa.Nagarahalli@arm.com; lijuan.tu@intel.com; dev@dpdk.org
> > Subject: Re: [PATCH v4 1/9] dts: add project tools config
> > 
> > On Mon, Sep 12, 2022 at 10:06:03AM -0400, Owen Hilyard wrote:
> > >    > E203 - whitespace before ‘,’, ‘;’, or ‘:’
> > >    > E266 - too many leading ‘#’ for block comment
> > >    > E501 - line too long
> > >    > E731 - do not assign a lambda expression, use a def
> > >    > C0111 - Missing %s docstring
> > >    > F0401 - Unable to import %s
> > >    E203, E266 and E501 were disabled due to pylama fighting with the
> > >    autoformatters, so I decided to let the autoformatters win.
> > 
> > That sounds strange. Is there no way to configure the auto-formatters to avoid
> > these issues? E203 I think we definitely should look to re-enable in DTS.
> > 
> > > I think
> > >    that C0111 was suppressed because this set of suppressions was from
> > >    mainline DTS and that has a lot of functions without
> > >    documentation.
> > 
> > Is this something we can fix as we go, migrating to DPDK main tree?
> > 
> > >  F0401 is disabled due to dependencies on TRex vendored
> > >    python libraries, since those will not be possible to import inside of
> > >    the container.
> > 
> > That seems fair enough to keep disabled.
> > 
> > > I don't remember why E731 is set, but it may be due to
> > >    the rte flow rule generator I wrote for mainline DTS, which makes use
> > >    of lambdas extensively to enable lazy evaluation, so that DTS doesn't
> > >    need to keep ~2 billion rules in memory.
> > 
> > That sounds reasonable too.
> > 
> > Can we perhaps target getting from 6 disabled warnings to 2 or 3 at most?
> > 
> > Other opinions?
> > 
> 
> We don't actually need the ignorelist at this point - I've removed the ignorelist, fixed a few issues and the tools don't report any problems. I'd like to start here and disable checks (either globally or in code where it's needed) when we actually need them (in a future patch).
> 
Great idea. Thanks.
  
Honnappa Nagarahalli Sept. 13, 2022, 7:03 p.m. UTC | #10
<snip>

> 
> On Mon, Sep 12, 2022 at 10:06:03AM -0400, Owen Hilyard wrote:
> >    > E203 - whitespace before ‘,’, ‘;’, or ‘:’
> >    > E266 - too many leading ‘#’ for block comment
> >    > E501 - line too long
> >    > E731 - do not assign a lambda expression, use a def
> >    > C0111 - Missing %s docstring
> >    > F0401 - Unable to import %s
> >    E203, E266 and E501 were disabled due to pylama fighting with the
> >    autoformatters, so I decided to let the autoformatters win.
> 
> That sounds strange. Is there no way to configure the auto-formatters to avoid
> these issues? E203 I think we definitely should look to re-enable in DTS.
> 
> > I think
> >    that C0111 was suppressed because this set of suppressions was from
> >    mainline DTS and that has a lot of functions without
> >    documentation.
> 
> Is this something we can fix as we go, migrating to DPDK main tree?
Is C0111 useful from auto-generated documentation perspective? If yes, should not be ignored?
Existing code can be fixed as we bring it into DPDK repo.

> 
> >  F0401 is disabled due to dependencies on TRex vendored
> >    python libraries, since those will not be possible to import inside of
> >    the container.
> 
> That seems fair enough to keep disabled.
> 
> > I don't remember why E731 is set, but it may be due to
> >    the rte flow rule generator I wrote for mainline DTS, which makes use
> >    of lambdas extensively to enable lazy evaluation, so that DTS doesn't
> >    need to keep ~2 billion rules in memory.
> 
> That sounds reasonable too.
> 
> Can we perhaps target getting from 6 disabled warnings to 2 or 3 at most?
> 
> Other opinions?
> 
> /Bruce
  
Honnappa Nagarahalli Sept. 13, 2022, 7:11 p.m. UTC | #11
<snip>

> >
> > On Fri, Jul 29, 2022 at 10:55:42AM +0000, Juraj Linkeš wrote:
> > > .gitignore contains standard Python-related files.
> > >
> > > Apart from that, add configuration for Python tools used in DTS:
> > > Poetry, dependency and package manager Black, formatter Pylama,
> > > static analysis Isort, import sorting
> > >
> > > .editorconfig modifies the line length to 88, which is the default
> > > Black uses. It seems to be the best of all worlds. [0]
> > >
> > > [0]
> > > https://black.readthedocs.io/en/stable/the_black_code_style/current_
> > > st
> > > yle.html#line-length
> > >
> > > Signed-off-by: Owen Hilyard <ohilyard@iol.unh.edu>
> > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> >
> > Thanks for the work on this. Some review comments inline below.
> >
> > /Bruce
> >
> > > ---
> > >  dts/.editorconfig  |   7 +
> > >  dts/.gitignore     |  14 ++
> > >  dts/README.md      |  15 ++
> > >  dts/poetry.lock    | 474
> > +++++++++++++++++++++++++++++++++++++++++++++
> > >  dts/pylama.ini     |   8 +
> > >  dts/pyproject.toml |  43 ++++
> > >  6 files changed, 561 insertions(+)
> > >  create mode 100644 dts/.editorconfig  create mode 100644
> > > dts/.gitignore  create mode 100644 dts/README.md  create mode 100644
> > > dts/poetry.lock  create mode 100644 dts/pylama.ini  create mode
> > > 100644 dts/pyproject.toml
> > >
> > > diff --git a/dts/.editorconfig b/dts/.editorconfig new file mode
> > > 100644 index 0000000000..657f959030
> > > --- /dev/null
> > > +++ b/dts/.editorconfig
> > > @@ -0,0 +1,7 @@
> > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > +PANTHEON.tech s.r.o.
> > > +# See https://editorconfig.org/ for syntax reference.
> > > +#
> > > +
> > > +[*.py]
> > > +max_line_length = 88
> >
> > It seems strange to have two different editorconfig settings in DPDK.
> > Is there a reason that:
> > a) we can't use 79, the current DPDK default and recommended length by
> >    pycodestyle? Or alternatively:
> > b) change all of DPDK to use the 88 setting?
> >
> > Also, 88 seems an unusual number. How was it chosen/arrived at?
> >
> 
> The commit message contains a link to Black's documentation where they
> explain it:
> https://black.readthedocs.io/en/stable/the_black_code_style/current_style.ht
> ml#line-length
> 
> Let me know what you think about it. I think it's reasonable. I'll move the config
> to the top level .editorconfig file.
> 
> > > diff --git a/dts/.gitignore b/dts/.gitignore new file mode 100644
> > > index 0000000000..9c49935b6f
> > > --- /dev/null
> > > +++ b/dts/.gitignore
> > > @@ -0,0 +1,14 @@
> > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > +PANTHEON.tech s.r.o.
> > > +#
> > > +
> > > +# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod]
> > > +*$py.class
> > > +
> > > +# IDE files
> > > +.idea
> > > +
> > > +# DTS results
> > > +output
> >
> > I think this should be ok to merge into the main DPDK .gitignore file.
> >
> 
> Ok, I'll move it there.
> A sidenote - should I add Pantheon to the licence header?
I typically add the copyright if the change is significant (in anyway).

<snip>
  
Honnappa Nagarahalli Sept. 13, 2022, 7:19 p.m. UTC | #12
<snip>

> > > > >
> > > > > diff --git a/dts/.editorconfig b/dts/.editorconfig new file mode
> > > > > 100644 index 0000000000..657f959030
> > > > > --- /dev/null
> > > > > +++ b/dts/.editorconfig
> > > > > @@ -0,0 +1,7 @@
> > > > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > > > +PANTHEON.tech s.r.o.
> > > > > +# See https://editorconfig.org/ for syntax reference.
> > > > > +#
> > > > > +
> > > > > +[*.py]
> > > > > +max_line_length = 88
> > > >
> > > > It seems strange to have two different editorconfig settings in
> > > > DPDK. Is there a reason that:
> > > > a) we can't use 79, the current DPDK default and recommended length by
> > > >    pycodestyle? Or alternatively:
> > > > b) change all of DPDK to use the 88 setting?
> > > >
> > > > Also, 88 seems an unusual number. How was it chosen/arrived at?
> > > >
> > >
> > > The commit message contains a link to Black's documentation where
> > > they
> > explain it:
> > > https://black.readthedocs.io/en/stable/the_black_code_style/current_
> > > st
> > > yle.html#line-length
> > >
> > > Let me know what you think about it. I think it's reasonable. I'll
> > > move the
> > config to the top level .editorconfig file.
> > >
> >
> > I have no objection to moving this to the top level, but others may
> > like to keep our python style as standard. Realistically I see three choices here:
> >
> > 1. Force DTS to conform to existing DPDK python style of 79 characters
> > 2. Allow DTS to use 88 chars but the rest of DPDK to keep with 79
> > chars 3. Allow all of DPDK to use 88 chars.
> >
> > Of the 3, I like relaxing the 79/80 char limit so #3 seems best to me
> > as you suggest. However, I'd wait a few days for a desenting opinion
> > before I'd do a new patchset revision. :-)
+1 for option #3, it seems reasonable

> >
> 
> Ok, I'll wait.
> 
> > /Bruce
  
Thomas Monjalon Sept. 14, 2022, 9:37 a.m. UTC | #13
13/09/2022 21:19, Honnappa Nagarahalli:
> > > > > > --- /dev/null
> > > > > > +++ b/dts/.editorconfig
> > > > > > @@ -0,0 +1,7 @@
> > > > > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > > > > +PANTHEON.tech s.r.o.
> > > > > > +# See https://editorconfig.org/ for syntax reference.
> > > > > > +#
> > > > > > +
> > > > > > +[*.py]
> > > > > > +max_line_length = 88
> > > > >
> > > > > It seems strange to have two different editorconfig settings in
> > > > > DPDK. Is there a reason that:
> > > > > a) we can't use 79, the current DPDK default and recommended length by
> > > > >    pycodestyle? Or alternatively:
> > > > > b) change all of DPDK to use the 88 setting?
> > > > >
> > > > > Also, 88 seems an unusual number. How was it chosen/arrived at?
> > > > >
> > > >
> > > > The commit message contains a link to Black's documentation where
> > > > they
> > > explain it:
> > > > https://black.readthedocs.io/en/stable/the_black_code_style/current_
> > > > st
> > > > yle.html#line-length
> > > >
> > > > Let me know what you think about it. I think it's reasonable. I'll
> > > > move the
> > > config to the top level .editorconfig file.
> > > >
> > >
> > > I have no objection to moving this to the top level, but others may
> > > like to keep our python style as standard. Realistically I see three choices here:
> > >
> > > 1. Force DTS to conform to existing DPDK python style of 79 characters
> > > 2. Allow DTS to use 88 chars but the rest of DPDK to keep with 79
> > > chars 3. Allow all of DPDK to use 88 chars.
> > >
> > > Of the 3, I like relaxing the 79/80 char limit so #3 seems best to me
> > > as you suggest. However, I'd wait a few days for a desenting opinion
> > > before I'd do a new patchset revision. :-)
> +1 for option #3, it seems reasonable

In .editorconfig, we have this default:
	max_line_length = 100
It is also documented in our guide.

For Python we have this exception:
	[*.py]
	indent_style = space
	indent_size = 4
	max_line_length = 79

I'm OK to increase it to 88 as it does not exceed the default.
In any case, it should be documented in the style guide.
  
Juraj Linkeš Sept. 14, 2022, 12:55 p.m. UTC | #14
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Wednesday, September 14, 2022 11:37 AM
> To: Juraj Linkeš <juraj.linkes@pantheon.tech>; Bruce Richardson
> <bruce.richardson@intel.com>; Honnappa Nagarahalli
> <Honnappa.Nagarahalli@arm.com>
> Cc: david.marchand@redhat.com; ronan.randles@intel.com;
> ohilyard@iol.unh.edu; lijuan.tu@intel.com; dev@dpdk.org
> Subject: Re: [PATCH v4 1/9] dts: add project tools config
> 
> 13/09/2022 21:19, Honnappa Nagarahalli:
> > > > > > > --- /dev/null
> > > > > > > +++ b/dts/.editorconfig
> > > > > > > @@ -0,0 +1,7 @@
> > > > > > > +# SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > > > > > +PANTHEON.tech s.r.o.
> > > > > > > +# See https://editorconfig.org/ for syntax reference.
> > > > > > > +#
> > > > > > > +
> > > > > > > +[*.py]
> > > > > > > +max_line_length = 88
> > > > > >
> > > > > > It seems strange to have two different editorconfig settings
> > > > > > in DPDK. Is there a reason that:
> > > > > > a) we can't use 79, the current DPDK default and recommended length
> by
> > > > > >    pycodestyle? Or alternatively:
> > > > > > b) change all of DPDK to use the 88 setting?
> > > > > >
> > > > > > Also, 88 seems an unusual number. How was it chosen/arrived at?
> > > > > >
> > > > >
> > > > > The commit message contains a link to Black's documentation
> > > > > where they
> > > > explain it:
> > > > > https://black.readthedocs.io/en/stable/the_black_code_style/curr
> > > > > ent_
> > > > > st
> > > > > yle.html#line-length
> > > > >
> > > > > Let me know what you think about it. I think it's reasonable.
> > > > > I'll move the
> > > > config to the top level .editorconfig file.
> > > > >
> > > >
> > > > I have no objection to moving this to the top level, but others
> > > > may like to keep our python style as standard. Realistically I see three
> choices here:
> > > >
> > > > 1. Force DTS to conform to existing DPDK python style of 79
> > > > characters 2. Allow DTS to use 88 chars but the rest of DPDK to
> > > > keep with 79 chars 3. Allow all of DPDK to use 88 chars.
> > > >
> > > > Of the 3, I like relaxing the 79/80 char limit so #3 seems best to
> > > > me as you suggest. However, I'd wait a few days for a desenting
> > > > opinion before I'd do a new patchset revision. :-)
> > +1 for option #3, it seems reasonable
> 
> In .editorconfig, we have this default:
> 	max_line_length = 100
> It is also documented in our guide.
> 
> For Python we have this exception:
> 	[*.py]
> 	indent_style = space
> 	indent_size = 4
> 	max_line_length = 79
> 
> I'm OK to increase it to 88 as it does not exceed the default.
> In any case, it should be documented in the style guide.
> 

Where is the best place to document it? I'm thinking of adding a DTS Coding Style into contributor's guidelines, right after DPDK Coding Style. Or do we want to have separate DTS docs?

> 
>
  
Bruce Richardson Sept. 14, 2022, 1:11 p.m. UTC | #15
On Wed, Sep 14, 2022 at 12:55:21PM +0000, Juraj Linkeš wrote:
> 
> 
> > -----Original Message----- From: Thomas Monjalon <thomas@monjalon.net>
> > Sent: Wednesday, September 14, 2022 11:37 AM To: Juraj Linkeš
> > <juraj.linkes@pantheon.tech>; Bruce Richardson
> > <bruce.richardson@intel.com>; Honnappa Nagarahalli
> > <Honnappa.Nagarahalli@arm.com> Cc: david.marchand@redhat.com;
> > ronan.randles@intel.com; ohilyard@iol.unh.edu; lijuan.tu@intel.com;
> > dev@dpdk.org Subject: Re: [PATCH v4 1/9] dts: add project tools config
> > 
> > 13/09/2022 21:19, Honnappa Nagarahalli:
> > > > > > > > --- /dev/null +++ b/dts/.editorconfig @@ -0,0 +1,7 @@ +#
> > > > > > > > SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > > > > > > +PANTHEON.tech s.r.o.  +# See https://editorconfig.org/ for
> > > > > > > > syntax reference.  +# + +[*.py] +max_line_length = 88
> > > > > > >
> > > > > > > It seems strange to have two different editorconfig settings
> > > > > > > in DPDK. Is there a reason that: a) we can't use 79, the
> > > > > > > current DPDK default and recommended length
> > by
> > > > > > >    pycodestyle? Or alternatively: b) change all of DPDK to
> > > > > > >    use the 88 setting?
> > > > > > >
> > > > > > > Also, 88 seems an unusual number. How was it chosen/arrived
> > > > > > > at?
> > > > > > >
> > > > > >
> > > > > > The commit message contains a link to Black's documentation
> > > > > > where they
> > > > > explain it:
> > > > > > https://black.readthedocs.io/en/stable/the_black_code_style/curr
> > > > > > ent_ st yle.html#line-length
> > > > > >
> > > > > > Let me know what you think about it. I think it's reasonable.
> > > > > > I'll move the
> > > > > config to the top level .editorconfig file.
> > > > > >
> > > > >
> > > > > I have no objection to moving this to the top level, but others
> > > > > may like to keep our python style as standard. Realistically I
> > > > > see three
> > choices here:
> > > > >
> > > > > 1. Force DTS to conform to existing DPDK python style of 79
> > > > > characters 2. Allow DTS to use 88 chars but the rest of DPDK to
> > > > > keep with 79 chars 3. Allow all of DPDK to use 88 chars.
> > > > >
> > > > > Of the 3, I like relaxing the 79/80 char limit so #3 seems best
> > > > > to me as you suggest. However, I'd wait a few days for a
> > > > > desenting opinion before I'd do a new patchset revision. :-)
> > > +1 for option #3, it seems reasonable
> > 
> > In .editorconfig, we have this default: max_line_length = 100 It is
> > also documented in our guide.
> > 
> > For Python we have this exception: [*.py] indent_style = space
> > indent_size = 4 max_line_length = 79
> > 
> > I'm OK to increase it to 88 as it does not exceed the default.  In any
> > case, it should be documented in the style guide.
> > 
> 
> Where is the best place to document it? I'm thinking of adding a DTS
> Coding Style into contributor's guidelines, right after DPDK Coding
> Style. Or do we want to have separate DTS docs?

+1 for having it in the existing contributors doc. We want people to submit
code + DTS tests at the same time, so having the contribution docs combined
will help with this. It also should help us to try and align the two coding
styles for python. In future, we should perhaps update DPDK python code to
align to DTS coding style rather than having two styles in the one repo.

/Bruce
  
Thomas Monjalon Sept. 14, 2022, 2:28 p.m. UTC | #16
14/09/2022 15:11, Bruce Richardson:
> On Wed, Sep 14, 2022 at 12:55:21PM +0000, Juraj Linkeš wrote:
> > From: Thomas Monjalon <thomas@monjalon.net>
> > > 13/09/2022 21:19, Honnappa Nagarahalli:
> > > > > > > > > --- /dev/null +++ b/dts/.editorconfig @@ -0,0 +1,7 @@ +#
> > > > > > > > > SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2022
> > > > > > > > > +PANTHEON.tech s.r.o.  +# See https://editorconfig.org/ for
> > > > > > > > > syntax reference.  +# + +[*.py] +max_line_length = 88
> > > > > > > >
> > > > > > > > It seems strange to have two different editorconfig settings
> > > > > > > > in DPDK. Is there a reason that: a) we can't use 79, the
> > > > > > > > current DPDK default and recommended length
> > > by
> > > > > > > >    pycodestyle? Or alternatively: b) change all of DPDK to
> > > > > > > >    use the 88 setting?
> > > > > > > >
> > > > > > > > Also, 88 seems an unusual number. How was it chosen/arrived
> > > > > > > > at?
> > > > > > > >
> > > > > > >
> > > > > > > The commit message contains a link to Black's documentation
> > > > > > > where they
> > > > > > explain it:
> > > > > > > https://black.readthedocs.io/en/stable/the_black_code_style/curr
> > > > > > > ent_ st yle.html#line-length
> > > > > > >
> > > > > > > Let me know what you think about it. I think it's reasonable.
> > > > > > > I'll move the
> > > > > > config to the top level .editorconfig file.
> > > > > > >
> > > > > >
> > > > > > I have no objection to moving this to the top level, but others
> > > > > > may like to keep our python style as standard. Realistically I
> > > > > > see three
> > > choices here:
> > > > > >
> > > > > > 1. Force DTS to conform to existing DPDK python style of 79
> > > > > > characters 2. Allow DTS to use 88 chars but the rest of DPDK to
> > > > > > keep with 79 chars 3. Allow all of DPDK to use 88 chars.
> > > > > >
> > > > > > Of the 3, I like relaxing the 79/80 char limit so #3 seems best
> > > > > > to me as you suggest. However, I'd wait a few days for a
> > > > > > desenting opinion before I'd do a new patchset revision. :-)
> > > > +1 for option #3, it seems reasonable
> > > 
> > > In .editorconfig, we have this default: max_line_length = 100 It is
> > > also documented in our guide.
> > > 
> > > For Python we have this exception: [*.py] indent_style = space
> > > indent_size = 4 max_line_length = 79
> > > 
> > > I'm OK to increase it to 88 as it does not exceed the default.  In any
> > > case, it should be documented in the style guide.
> > > 
> > 
> > Where is the best place to document it? I'm thinking of adding a DTS
> > Coding Style into contributor's guidelines, right after DPDK Coding
> > Style. Or do we want to have separate DTS docs?
> 
> +1 for having it in the existing contributors doc. We want people to submit
> code + DTS tests at the same time, so having the contribution docs combined
> will help with this. It also should help us to try and align the two coding
> styles for python. In future, we should perhaps update DPDK python code to
> align to DTS coding style rather than having two styles in the one repo.

+1 for targetting unified coding style
  
Juraj Linkeš Sept. 21, 2022, 10:49 a.m. UTC | #17
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Wednesday, September 14, 2022 4:29 PM
> To: Juraj Linkeš <juraj.linkes@pantheon.tech>; Bruce Richardson
> <bruce.richardson@intel.com>
> Cc: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>;
> david.marchand@redhat.com; ronan.randles@intel.com; ohilyard@iol.unh.edu;
> lijuan.tu@intel.com; dev@dpdk.org
> Subject: Re: [PATCH v4 1/9] dts: add project tools config
> 
> 14/09/2022 15:11, Bruce Richardson:
> > On Wed, Sep 14, 2022 at 12:55:21PM +0000, Juraj Linkeš wrote:
> > > From: Thomas Monjalon <thomas@monjalon.net>
> > > > 13/09/2022 21:19, Honnappa Nagarahalli:
> > > > > > > > > > --- /dev/null +++ b/dts/.editorconfig @@ -0,0 +1,7 @@
> > > > > > > > > > +#
> > > > > > > > > > SPDX-License-Identifier: BSD-3-Clause # Copyright(c)
> > > > > > > > > > 2022
> > > > > > > > > > +PANTHEON.tech s.r.o.  +# See
> > > > > > > > > > +https://editorconfig.org/ for
> > > > > > > > > > syntax reference.  +# + +[*.py] +max_line_length = 88
> > > > > > > > >
> > > > > > > > > It seems strange to have two different editorconfig
> > > > > > > > > settings in DPDK. Is there a reason that: a) we can't
> > > > > > > > > use 79, the current DPDK default and recommended length
> > > > by
> > > > > > > > >    pycodestyle? Or alternatively: b) change all of DPDK to
> > > > > > > > >    use the 88 setting?
> > > > > > > > >
> > > > > > > > > Also, 88 seems an unusual number. How was it
> > > > > > > > > chosen/arrived at?
> > > > > > > > >
> > > > > > > >
> > > > > > > > The commit message contains a link to Black's
> > > > > > > > documentation where they
> > > > > > > explain it:
> > > > > > > > https://black.readthedocs.io/en/stable/the_black_code_styl
> > > > > > > > e/curr ent_ st yle.html#line-length
> > > > > > > >
> > > > > > > > Let me know what you think about it. I think it's reasonable.
> > > > > > > > I'll move the
> > > > > > > config to the top level .editorconfig file.
> > > > > > > >
> > > > > > >
> > > > > > > I have no objection to moving this to the top level, but
> > > > > > > others may like to keep our python style as standard.
> > > > > > > Realistically I see three
> > > > choices here:
> > > > > > >
> > > > > > > 1. Force DTS to conform to existing DPDK python style of 79
> > > > > > > characters 2. Allow DTS to use 88 chars but the rest of DPDK
> > > > > > > to keep with 79 chars 3. Allow all of DPDK to use 88 chars.
> > > > > > >
> > > > > > > Of the 3, I like relaxing the 79/80 char limit so #3 seems
> > > > > > > best to me as you suggest. However, I'd wait a few days for
> > > > > > > a desenting opinion before I'd do a new patchset revision.
> > > > > > > :-)
> > > > > +1 for option #3, it seems reasonable
> > > >
> > > > In .editorconfig, we have this default: max_line_length = 100 It
> > > > is also documented in our guide.
> > > >
> > > > For Python we have this exception: [*.py] indent_style = space
> > > > indent_size = 4 max_line_length = 79
> > > >
> > > > I'm OK to increase it to 88 as it does not exceed the default.  In
> > > > any case, it should be documented in the style guide.
> > > >
> > >
> > > Where is the best place to document it? I'm thinking of adding a DTS
> > > Coding Style into contributor's guidelines, right after DPDK Coding
> > > Style. Or do we want to have separate DTS docs?
> >
> > +1 for having it in the existing contributors doc. We want people to
> > +submit
> > code + DTS tests at the same time, so having the contribution docs
> > combined will help with this. It also should help us to try and align
> > the two coding styles for python. In future, we should perhaps update
> > DPDK python code to align to DTS coding style rather than having two styles in
> the one repo.
> 
> +1 for targetting unified coding style
> 

Should I now just add the note about max line length and move the rest of DTS Python coding style when we unify the code? We have more we wanted to add [0], but that is really of the scope of this change.

[0] https://docs.google.com/document/d/1G7_AEA-4MAd88bxjfP-IOcIy_6mnrMz3HCsUI8e-NN4/edit?pli=1#heading=h.fkq21x8krlp1
  

Patch

diff --git a/dts/.editorconfig b/dts/.editorconfig
new file mode 100644
index 0000000000..657f959030
--- /dev/null
+++ b/dts/.editorconfig
@@ -0,0 +1,7 @@ 
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2022 PANTHEON.tech s.r.o.
+# See https://editorconfig.org/ for syntax reference.
+#
+
+[*.py]
+max_line_length = 88
diff --git a/dts/.gitignore b/dts/.gitignore
new file mode 100644
index 0000000000..9c49935b6f
--- /dev/null
+++ b/dts/.gitignore
@@ -0,0 +1,14 @@ 
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2022 PANTHEON.tech s.r.o.
+#
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# IDE files
+.idea
+
+# DTS results
+output
diff --git a/dts/README.md b/dts/README.md
new file mode 100644
index 0000000000..d8f88f97fe
--- /dev/null
+++ b/dts/README.md
@@ -0,0 +1,15 @@ 
+# Poetry
+
+The typical style of python dependency management, requirements.txt, has a few
+issues. The advantages of Poetry include specifying what python version is required and
+forcing you to specify versions, enforced by a lockfile, both of which help prevent
+broken dependencies. Another benefit is the use of pyproject.toml, which has become the
+standard config file for python projects, improving project organization.
+
+# Python Version
+
+The Python Version required by DTS is specified in
+[DTS python config file](./pyproject.toml) in the **[tool.poetry.dependencies]**
+section. Poetry doesn't install Python, so you may need to satisfy this requirement if
+your Python is not up to date. A tool such as [Pyenv](https://github.com/pyenv/pyenv)
+is a good way to get Python, though not the only one.
diff --git a/dts/poetry.lock b/dts/poetry.lock
new file mode 100644
index 0000000000..c76913f141
--- /dev/null
+++ b/dts/poetry.lock
@@ -0,0 +1,474 @@ 
+[[package]]
+name = "attrs"
+version = "21.4.0"
+description = "Classes Without Boilerplate"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
+docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"]
+
+[[package]]
+name = "black"
+version = "22.6.0"
+description = "The uncompromising code formatter."
+category = "dev"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+click = ">=8.0.0"
+mypy-extensions = ">=0.4.3"
+pathspec = ">=0.9.0"
+platformdirs = ">=2"
+tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.7.4)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+uvloop = ["uvloop (>=0.15.2)"]
+
+[[package]]
+name = "click"
+version = "8.1.3"
+description = "Composable command line interface toolkit"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.5"
+description = "Cross-platform colored terminal text."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "isort"
+version = "5.10.1"
+description = "A Python utility / library to sort Python imports."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1,<4.0"
+
+[package.extras]
+pipfile_deprecated_finder = ["pipreqs", "requirementslib"]
+requirements_deprecated_finder = ["pipreqs", "pip-api"]
+colors = ["colorama (>=0.4.3,<0.5.0)"]
+plugins = ["setuptools"]
+
+[[package]]
+name = "jsonpatch"
+version = "1.32"
+description = "Apply JSON-Patches (RFC 6902)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+jsonpointer = ">=1.9"
+
+[[package]]
+name = "jsonpointer"
+version = "2.3"
+description = "Identify specific nodes in a JSON document (RFC 6901)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "jsonschema"
+version = "4.7.2"
+description = "An implementation of JSON Schema validation for Python"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+attrs = ">=17.4.0"
+pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+
+[package.extras]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
+
+[[package]]
+name = "mccabe"
+version = "0.7.0"
+description = "McCabe checker, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "mypy"
+version = "0.961"
+description = "Optional static typing for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+mypy-extensions = ">=0.4.3"
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
+typing-extensions = ">=3.10"
+
+[package.extras]
+dmypy = ["psutil (>=4.0)"]
+python2 = ["typed-ast (>=1.4.0,<2)"]
+reports = ["lxml"]
+
+[[package]]
+name = "mypy-extensions"
+version = "0.4.3"
+description = "Experimental type system extensions for programs checked with the mypy typechecker."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pathspec"
+version = "0.9.0"
+description = "Utility library for gitignore style pattern matching of file paths."
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[[package]]
+name = "pexpect"
+version = "4.8.0"
+description = "Pexpect allows easy control of interactive console applications."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+ptyprocess = ">=0.5"
+
+[[package]]
+name = "platformdirs"
+version = "2.5.2"
+description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"]
+test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"]
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+description = "Run a subprocess in a pseudo terminal"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pycodestyle"
+version = "2.8.0"
+description = "Python style guide checker"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "pydocstyle"
+version = "6.1.1"
+description = "Python docstring style checker"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+snowballstemmer = "*"
+
+[package.extras]
+toml = ["toml"]
+
+[[package]]
+name = "pyflakes"
+version = "2.4.0"
+description = "passive checker of Python programs"
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pylama"
+version = "8.3.8"
+description = "Code audit tool for python"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+mccabe = ">=0.6.1"
+pycodestyle = ">=2.8.0"
+pydocstyle = ">=6.1.1"
+pyflakes = ">=2.4.0"
+
+[package.extras]
+all = ["pylint", "eradicate", "radon", "mypy", "vulture"]
+eradicate = ["eradicate"]
+mypy = ["mypy"]
+pylint = ["pylint"]
+radon = ["radon"]
+tests = ["pytest", "pytest-mypy", "eradicate (>=2.0.0)", "radon (>=5.1.0)", "mypy", "pylint (>=2.11.1)", "pylama-quotes", "vulture", "types-setuptools"]
+vulture = ["vulture"]
+
+[[package]]
+name = "pyrsistent"
+version = "0.18.1"
+description = "Persistent/Functional/Immutable data structures"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "pyyaml"
+version = "6.0"
+description = "YAML parser and emitter for Python"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "scapy"
+version = "2.4.5"
+description = "Scapy: interactive packet manipulation tool"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4"
+
+[package.extras]
+basic = ["ipython"]
+complete = ["ipython", "pyx", "cryptography (>=2.0)", "matplotlib"]
+docs = ["sphinx (>=3.0.0)", "sphinx_rtd_theme (>=0.4.3)", "tox (>=3.0.0)"]
+
+[[package]]
+name = "snowballstemmer"
+version = "2.2.0"
+description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "tomli"
+version = "2.0.1"
+description = "A lil' TOML parser"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "types-pyyaml"
+version = "6.0.10"
+description = "Typing stubs for PyYAML"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "typing-extensions"
+version = "4.3.0"
+description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "warlock"
+version = "2.0.1"
+description = "Python object model built on JSON schema and JSON patch."
+category = "main"
+optional = false
+python-versions = ">=3.7,<4.0"
+
+[package.dependencies]
+jsonpatch = ">=1,<2"
+jsonschema = ">=4,<5"
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.10"
+content-hash = "91d2a7dca306da3c93ce79f27c43bebd4b951ece5ef9ca6f256568286ef48f4b"
+
+[metadata.files]
+attrs = [
+    {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
+    {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"},
+]
+black = []
+click = [
+    {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
+    {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
+]
+colorama = [
+    {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
+    {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
+]
+isort = [
+    {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
+    {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
+]
+jsonpatch = [
+    {file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"},
+    {file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"},
+]
+jsonpointer = [
+    {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
+    {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
+]
+jsonschema = []
+mccabe = [
+    {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
+    {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
+]
+mypy = [
+    {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"},
+    {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"},
+    {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"},
+    {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"},
+    {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"},
+    {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"},
+    {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"},
+    {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"},
+    {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"},
+    {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"},
+    {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"},
+    {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"},
+    {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"},
+    {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"},
+    {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"},
+    {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"},
+    {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"},
+    {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"},
+    {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"},
+    {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"},
+    {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"},
+    {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"},
+    {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"},
+]
+mypy-extensions = [
+    {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
+    {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
+]
+pathspec = [
+    {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"},
+    {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
+]
+pexpect = [
+    {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"},
+    {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"},
+]
+platformdirs = [
+    {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
+    {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
+]
+ptyprocess = [
+    {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
+    {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
+]
+pycodestyle = [
+    {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
+    {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
+]
+pydocstyle = [
+    {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"},
+    {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"},
+]
+pyflakes = [
+    {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
+    {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
+]
+pylama = [
+    {file = "pylama-8.3.8-py3-none-any.whl", hash = "sha256:aff89423f7de118713f638c7f937fa83a5873e3bdf06d413661d9cb8dc5f3a7b"},
+    {file = "pylama-8.3.8.tar.gz", hash = "sha256:2dd852fe9312ea6012466cf17ff179668fc3d2716856fcfaaee8ce7876d83620"},
+]
+pyrsistent = [
+    {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"},
+    {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"},
+    {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"},
+    {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"},
+    {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"},
+    {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"},
+    {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"},
+    {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"},
+    {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"},
+    {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"},
+    {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"},
+    {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"},
+    {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"},
+    {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"},
+    {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"},
+    {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"},
+    {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"},
+    {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"},
+    {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"},
+    {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"},
+    {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"},
+]
+pyyaml = [
+    {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
+    {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
+    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
+    {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
+    {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
+    {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
+    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
+    {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
+    {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
+    {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
+    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
+    {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
+    {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
+    {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
+    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
+    {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
+    {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
+    {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
+    {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
+    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
+    {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
+    {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
+    {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+]
+scapy = [
+    {file = "scapy-2.4.5.tar.gz", hash = "sha256:bc707e3604784496b6665a9e5b2a69c36cc9fb032af4864b29051531b24c8593"},
+]
+snowballstemmer = [
+    {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
+    {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"},
+]
+tomli = [
+    {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+    {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+]
+types-pyyaml = []
+typing-extensions = []
+warlock = [
+    {file = "warlock-2.0.1-py3-none-any.whl", hash = "sha256:448df959cec31904f686ac8c6b1dfab80f0cdabce3d303be517dd433eeebf012"},
+    {file = "warlock-2.0.1.tar.gz", hash = "sha256:99abbf9525b2a77f2cde896d3a9f18a5b4590db063db65e08207694d2e0137fc"},
+]
diff --git a/dts/pylama.ini b/dts/pylama.ini
new file mode 100644
index 0000000000..23fc709b5a
--- /dev/null
+++ b/dts/pylama.ini
@@ -0,0 +1,8 @@ 
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2022 University of New Hampshire
+#
+
+[pylama]
+format = pylint
+linters = pep8,pycodestyle,pylint
+ignore = F0401,C0111,E731,E266,E501,E203
diff --git a/dts/pyproject.toml b/dts/pyproject.toml
new file mode 100644
index 0000000000..710c247b97
--- /dev/null
+++ b/dts/pyproject.toml
@@ -0,0 +1,43 @@ 
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2022 University of New Hampshire
+#
+
+[tool.poetry]
+name = "dts"
+version = "0.1.0"
+description = ""
+authors = ["Owen Hilyard <ohilyard@iol.unh.edu>", "dts@dpdk.org"]
+
+[tool.poetry.dependencies]
+python = "^3.10"
+pexpect = "^4.8.0"
+warlock = "^2.0.1"
+PyYAML = "^6.0"
+types-PyYAML = "^6.0.8"
+scapy = "^2.4.5"
+
+[tool.poetry.dev-dependencies]
+mypy = "^0.961"
+black = "^22.6.0"
+isort = "^5.10.1"
+pylama = "^8.3.8"
+
+[tool.poetry.scripts]
+dts = "main:main"
+
+[build-system]
+requires = ["poetry-core>=1.0.0"]
+build-backend = "poetry.core.masonry.api"
+
+[tool.isort]
+profile = "black"
+
+[tool.mypy]
+ignore_missing_imports = true
+disallow_untyped_defs = true
+disallow_untyped_calls = true
+python_version = "3.10"
+disallow_any_unimported = true
+check_untyped_defs = true
+strict_optional = true
+strict_equality = true