Python 3+ compatible port of the configobj library

Overview

configobj

Build Status Coverage Status PyPI version License

Python 3+ compatible port of the configobj library.

Documentation

You can find a full manual on how to use ConfigObj at readthedocs. If you want to work on the project, please see the Contributing section below.

Status

This project is now maintained by Eli Courtwright and Rob Dennis with the blessing of original creator Michael Foord.

For long time ConfigObj users, the biggest change is in the officially supported Python versions (it was 2.3 … 2.6):

  • 2.7
  • 3.4 … 3.7

Other Python3 versions may work, but this is what Travis and tox use to run the tests on commit.

Roadmap

  • Fixing any issues introduced as a result of the added Python 3 support
  • Moving tests away from doctests in favor of pytest (reasonable now that versions older than 2.6 are dropped)
  • Considering new features that work in a backwards-compatible way (feel free to open an issue with your suggestion)
  • Also see the milestones

Contributing

Contributing to this project is easy, and reporting an issue or adding to the documentation also improves things for every user. You don’t need to be a developer to contribute. See CONTRIBUTING for more.

As a documentation author or developer, to create a working directory for this project, call these commands:

git clone "https://github.com/DiffSK/configobj.git"
cd "configobj"
command . .env --yes --develop  # add '--virtualenv /usr/bin/virtualenv' for Python2
invoke build --docs test doctest check

For this to work, you might also need to follow some setup procedures to make the necessary basic commands available on Linux, Mac OS X, and Windows.

Running the test suite can be done several ways, just call invoke test for a quick check. Run invoke test.tox for testing with all supported Python versions (if you have them available), or be more selective by e.g. calling invoke test.tox -e py27,py34.

Use invoke check to run a code-quality scan.

To start a watchdog that auto-rebuilds documentation and reloads the opened browser tab on any change, call invoke docs -w -b (stop the watchdog using the -k option).

Comments
  • utf8 encoded symbols not cast as unicode strings in python v2.7

    utf8 encoded symbols not cast as unicode strings in python v2.7

    Hi! I've been using configobj a for while in my project. Due to other dependencies (twisted mainly), the stable release still depends on python v2.7. Recently, an issue was opened regarding utf8 encoded symbols in the config file: https://github.com/pazz/alot/issues/693 It turns out that this is due to configobj v5.0.x not behaving as previous versions when it comes to utf8 encoded symbols: Previously, those were always passed on as unicode strings, e.g. 🐜 became u'\U0001f41c'. Now, the same symbol is read as '\xf0\x9f\x90\x9c'. Obvously this makes trouble. Of course i can patch around this, but still, i think configobj should behave exactly the same as prevous versions here. Thanks!

    opened by pazz 17
  • Make configobj a package, moving towards incorporating validate

    Make configobj a package, moving towards incorporating validate

    I'm opening this PR early for review and commenting, this is intended to handle #32 and associated tickets. Will comment when things are ready for a merge.

    opened by jhermann 13
  • update README.md to point to the original documentation, as well as explain the current project status

    update README.md to point to the original documentation, as well as explain the current project status

    When 5.0.0 is put on pypi, it's reasonable to expect that people would like to start using the github repo as a reference, and if that's the case, the README file should have the appropriate information to support that.

    opened by robdennis 13
  • Added on_change parameter to ConfigObj and Section to have data change trigger a callback

    Added on_change parameter to ConfigObj and Section to have data change trigger a callback

    For your consideration...

    If ConfigObj is instantiated with the on_change parameter set to a callable, on_change is called when changed data is detected in the root Section or any subsection. This is helpful for those cases where you may want a configuration change to trigger some other action.

    Here is an example of how to use on_change:

    >>> def my_on_change_handler(name, key, old_value, value):
    >>>     print("Detected change in [{0}]:{1} from {2} to {3}".format(name, key, old_value, value)
    >>> my_configobj = ConfigObj(on_change=my_on_change_handler)
    >>> my_configobj["section"] = {}
    Detected change in [section]:None from None to {}
    >>> my_configobj["section"]["parameter"] = 1
    Detected change in [section]:parameter from None to 1
    

    *** I looked at the tests but couldn't get them to run, and I'm not sure which files are acutally used for the tests. Because of this, I didn't add in a test for on_change. If you could point me in the right direction, I'd happily write the tests as well.

    Thanks! -Kris

    opened by krishardy 11
  • Comments assigned to wrong sections

    Comments assigned to wrong sections

    This is an over-simplified version of zypper.conf:

    ## Configuration file for Zypper.
    
    [main]
    
    ## Show repository alias instead of name.
    # showAlias = false
    
    ## Columns to show in repository list printed by repos (lr) command by default.
    # repoListColumns = Anr
    
    [solver]
    
    ## Do not install soft dependencies (recommended packages)
    # installRecommends = yes
    
    [color]
    
    ## Whether to use colors
    # useColors = never
    

    When read with configobj, comments are assigned to sections in an awkward fashion:

    >>> config = configobj.ConfigObj('zypper.conf')
    >>> config.comments
    {'color': ['',
      '## Do not install soft dependencies (recommended packages)',
      '# installRecommends = yes',
      ''],
     'main': [],
     'solver': ['',
      '## Show repository alias instead of name.',
      '# showAlias = false',
      '',
      '## Columns to show in repository list printed by repos (lr) command by default.',
      '# repoListColumns = Anr',
      '']}
    

    As a consequence, if I run del config['solver'] I am deleting comments of main and preserving comments of solver, leading to a very confusing configuration file:

    --- zypper.before.conf   2014-04-06 00:20:16.432652464 +0200
    +++ zypper.after.conf    2014-04-06 00:26:16.569526812 +0200
    @@ -2,14 +2,6 @@
    
     [main]
    
    -## Show repository alias instead of name.
    -# showAlias = false
    -
    -## Columns to show in repository list printed by repos (lr) command by default.
    -# repoListColumns = Anr
    -
    -[solver]
    -
     ## Do not install soft dependencies (recommended packages)
     # installRecommends = yes
    
    documentation 
    opened by ntrrgc 10
  • DeprecationWarning: BaseException.message has been deprecated as of Python 2.6

    DeprecationWarning: BaseException.message has been deprecated as of Python 2.6

    Using configobj (5.0.6), I tried the following and got a DeprecationWarning:

    Python 2.7.5 (default, Aug 18 2016, 15:58:25)
    Type "copyright", "credits" or "license" for more information.
    
    IPython 5.0.0 -- An enhanced Interactive Python.
    ?         -> Introduction and overview of IPython's features.
    %quickref -> Quick reference.
    help      -> Python's own help system.
    object?   -> Details about 'object', use 'object??' for extra details.
    
    In [1]: from configobj import ConfigObj
       ...: from configobj import ConfigObjError
       ...:
       ...:     cfg = [str('thing  {"a": 1}')]
       ...:     c = ConfigObj(cfg)
       ...: except ConfigObjError as ex:
       ...:     print(ex.errors)
       ...:     for error in ex.errors:
       ...:         print(error.message)
       ...:
    [ParseError('Invalid line (\'thing  {"a": 1}\') (matched as neither section nor keyword) at line 1.',)]
    /home/yann/.virtualenvs/rprs_bootstrap/bin/ipython:7: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
      from IPython import start_ipython
    Invalid line ('thing  {"a": 1}') (matched as neither section nor keyword) at line 1.
    

    Same with plain Python:

    Python 2.7.5 (default, Aug 18 2016, 15:58:25)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from configobj import ConfigObj
    >>> from configobj import ConfigObjError
    >>>
    >>> try:
    ...     cfg = [str('thing  {"a": 1}')]
    ...     c = ConfigObj(cfg)
    ... except ConfigObjError as ex:
    ...     print(ex.errors)
    ...     for error in ex.errors:
    ...         print(error.message)
    ...
    [ParseError('Invalid line (\'thing  {"a": 1}\') (matched as neither section nor
    keyword) at line 1.',)]
    Invalid line ('thing  {"a": 1}') (matched as neither section nor keyword) at line 1.
    

    Am I doing the catching wrong somehow?

    question documentation 
    opened by kierun 9
  • encoding issue writing

    encoding issue writing

    I am not sure if this is a bug or just my not understanding. This is under Python 2.7, using v5.0.4 from pip. I can't seem to write out a CfgObj that has unicode strings. Here's a simple scenario:

    File: 'in.ini'

    folder="Arbeitsfläche"
    

    code:

    from  configobj import ConfigObj
    cfg = ConfigObj("in.ini", encoding="UTF8")
    
    print u"folder string[{0}] and repr [{1}]".format(cfg['folder'], repr(cfg['folder']))
    
    cfg.filename = "out.ini"
    cfg.write()
    

    produces this:

    folder string[Arbeitsfläche] and repr [u'Arbeitsfl\xe4che']
    Traceback (most recent call last):
      File "stackoverflow.py", line 7, in <module>
        cfg.write()
      File "/usr/local/lib/python2.7/site-packages/configobj.py", line 2124, in write
        'ascii'))
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 18: ordinal not in range(128)
    

    There doesn't seem to be any problem reading the file in. Also, if I change the input file to have the value "Desktop" instead of "Arbeitsfläche", no problem.

    What I can't understand is why it wants to use the ascii codec, when I've explicitly set the UTF8 encoder.

    Any help would be appreciated!

    bug 
    opened by beville 8
  • No unicode values when an encoding is given.

    No unicode values when an encoding is given.

    Version 5.0.0.

    If one open a utf-8 encoded file ( with filename in variable fn below ), add an encoding parameter when opening the ConfigObj, the returned object does not convert the keys and values to unicode. The version 4.7.2 did..

    In [6]: o = ConfigObj( infile = fn , encoding = "utf8" )

    In [7]: t = o["root"]["title"]

    In [8]: t Out[8]: 'Planl\xc3\xa6gning og data'

    In [9]: isinstance( t , str ) Out[9]: True

    In [10]: isinstance( t , unicode ) Out[10]: False

    bug 
    opened by brianbirke 8
  • Unclear error message using very simple example

    Unclear error message using very simple example

    []
    a = b
    []
    c = d
    
    In [1]: from configobj import ConfigObj
    
    In [2]: c = ConfigObj('./test.ini')
      File "<string>", line unknown
    ConfigObjError: Parsing failed with several errors.
    First error at line 1.
    

    If I modify the first section name to be non-empty, the message is ok:

    [s]
    a = b
    []
    c = d
    
    In [1]: from configobj import ConfigObj
    
    In [2]: c = ConfigObj('./test.ini')
      File "<string>", line unknown
    ParseError: Invalid line ('[]') (matched as neither section nor keyword) at line 4.
    
    defect 
    opened by malinoff 7
  • Check Python version during installation

    Check Python version during installation

    Trac uses still supports Python 2.5 on the current stable release. easy_install ConfigObj in a Python 2.5 environment results in an installation of ConfigObj 5.0.1 with errors. I expect we'll start seeing this issue raised on our mailing list in the near future, as we've seen for a similar circumstance of one of our other dependencies, Babel.

    In Trac we do some error-checking like was is shown here, so that an attempted installation in an unsupported Python environment will abort with a nice error message. Additionally, I don't see ConfigObj 4.7.2 being available on PyPI anymore. Is there anything additional we can do to make a Python 2.5 or earlier environment locate ConfigObj 4.7.2 and install that version?

    $ easy_install ConfigObj
    Searching for ConfigObj
    Reading http://pypi.python.org/simple/ConfigObj/
    Best match: configobj 5.0.1
    Downloading https://pypi.python.org/packages/source/c/configobj/configobj-5.0.1.tar.gz#md5=c8a41fb55689e2d0e1ae53b6f1ab5e2e
    Processing configobj-5.0.1.tar.gz
    Writing /tmp/easy_install-3WzMHi/configobj-5.0.1/setup.cfg
    Running configobj-5.0.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-3WzMHi/configobj-5.0.1/egg-dist-tmp-eeST9v
    build/bdist.linux-x86_64/egg/configobj.py:1235: Warning: 'with' will become a reserved keyword in Python 2.6
      File "build/bdist.linux-x86_64/egg/configobj.py", line 1235
        with open(infile, 'rb') as h:
                ^
    SyntaxError: invalid syntax
    
    build/bdist.linux-x86_64/egg/validate.py:770: Warning: 'as' will become a reserved keyword in Python 2.6
      File "build/bdist.linux-x86_64/egg/validate.py", line 770
        except ValueError as e:
                           ^
    SyntaxError: invalid syntax
    
    zip_safe flag not set; analyzing archive contents...
    /home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg/configobj.py:1235: Warning: 'with' will become a reserved keyword in Python 2.6
      File "/home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg/configobj.py", line 1235
        with open(infile, 'rb') as h:
                ^
    SyntaxError: invalid syntax
    
    /home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg/validate.py:770: Warning: 'as' will become a reserved keyword in Python 2.6
      File "/home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg/validate.py", line 770
        except ValueError as e:
                           ^
    SyntaxError: invalid syntax
    
    Adding configobj 5.0.1 to easy-install.pth file
    
    Installed /home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/configobj-5.0.1-py2.5.egg
    Processing dependencies for ConfigObj
    Searching for six==1.5.2
    Reading http://pypi.python.org/simple/six/
    Best match: six 1.5.2
    Downloading https://pypi.python.org/packages/source/s/six/six-1.5.2.tar.gz#md5=322b86d0c50a7d165c05600154cecc0a
    Processing six-1.5.2.tar.gz
    Writing /tmp/easy_install-StPhwj/six-1.5.2/setup.cfg
    Running six-1.5.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-StPhwj/six-1.5.2/egg-dist-tmp-XyUsUa
    no previously-included directories found matching 'documentation/_build'
    zip_safe flag not set; analyzing archive contents...
    six: module references __file__
    Adding six 1.5.2 to easy-install.pth file
    
    Installed /home/user/Workspace/t11500/teo-rjollos.git/py2.5/lib/python2.5/site-packages/six-1.5.2-py2.5.egg
    Finished processing dependencies for ConfigObj
    
    enhancement 
    opened by rjollos 7
  • Add support for Python 3.7 and fix deprecation warnings

    Add support for Python 3.7 and fix deprecation warnings

    • Includes #173 so the CI can pass and to avoid merge conflicts.

    • A little workaround is needed for 3.7 on Travis, see https://github.com/travis-ci/travis-ci/issues/9815.

    • Also fixes this deprecation warning on Python 3.7 (with pytest):

    ================================================= warnings summary =================================================
    /usr/local/lib/python3.7/site-packages/_pytest/config/findpaths.py:42: RemovedInPytest4Warning: [pytest] section in setup.cfg files is deprecated, use [tool:pytest] instead.
      config=config,
    
    /private/tmp/configobj/src/configobj/__init__.py:546: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
      elif isinstance(value, collections.Mapping) and not unrepr:
    
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
    
    • And fixes this deprecation warning in pytest (with Python 2.7 and 3.7):
    ================================================= warnings summary =================================================
    /usr/local/lib/python3.7/site-packages/_pytest/config/findpaths.py:42: RemovedInPytest4Warning: [pytest] section in setup.cfg files is deprecated, use [tool:pytest] instead.
      config=config,
    
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
    
    opened by hugovk 6
  • Bump wheel from 0.29.0 to 0.38.1

    Bump wheel from 0.29.0 to 0.38.1

    Bumps wheel from 0.29.0 to 0.38.1.

    Changelog

    Sourced from wheel's changelog.

    Release Notes

    UNRELEASED

    • Updated vendored packaging to 22.0

    0.38.4 (2022-11-09)

    • Fixed PKG-INFO conversion in bdist_wheel mangling UTF-8 header values in METADATA (PR by Anderson Bravalheri)

    0.38.3 (2022-11-08)

    • Fixed install failure when used with --no-binary, reported on Ubuntu 20.04, by removing setup_requires from setup.cfg

    0.38.2 (2022-11-05)

    • Fixed regression introduced in v0.38.1 which broke parsing of wheel file names with multiple platform tags

    0.38.1 (2022-11-04)

    • Removed install dependency on setuptools
    • The future-proof fix in 0.36.0 for converting PyPy's SOABI into a abi tag was faulty. Fixed so that future changes in the SOABI will not change the tag.

    0.38.0 (2022-10-21)

    • Dropped support for Python < 3.7
    • Updated vendored packaging to 21.3
    • Replaced all uses of distutils with setuptools
    • The handling of license_files (including glob patterns and default values) is now delegated to setuptools>=57.0.0 (#466). The package dependencies were updated to reflect this change.
    • Fixed potential DoS attack via the WHEEL_INFO_RE regular expression
    • Fixed ValueError: ZIP does not support timestamps before 1980 when using SOURCE_DATE_EPOCH=0 or when on-disk timestamps are earlier than 1980-01-01. Such timestamps are now changed to the minimum value before packaging.

    0.37.1 (2021-12-22)

    • Fixed wheel pack duplicating the WHEEL contents when the build number has changed (#415)
    • Fixed parsing of file names containing commas in RECORD (PR by Hood Chatham)

    0.37.0 (2021-08-09)

    • Added official Python 3.10 support
    • Updated vendored packaging library to v20.9

    ... (truncated)

    Commits
    • 6f1608d Created a new release
    • cf8f5ef Moved news item from PR #484 to its proper place
    • 9ec2016 Removed install dependency on setuptools (#483)
    • 747e1f6 Fixed PyPy SOABI parsing (#484)
    • 7627548 [pre-commit.ci] pre-commit autoupdate (#480)
    • 7b9e8e1 Test on Python 3.11 final
    • a04dfef Updated the pypi-publish action
    • 94bb62c Fixed docs not building due to code style changes
    • d635664 Updated the codecov action to the latest version
    • fcb94cd Updated version to match the release
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Members with min and or max values should not be allowed to be None

    Members with min and or max values should not be allowed to be None

    Currently, a member specification like the following:

    keyword = float(min=0, max=1, default=0.5)
    

    will pass validation when setting keyword = None.

    I have therefore to check this afterwards in my code.

    I was wondering, whether this could be implemented within ConfigObj.

    More generally, there could be an option for allowing/disallowing None values, e.g.,

    keyword = float(allow_none=False)
    
    opened by claudiodsf 0
  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • docs/configobj.rst
    • src/configobj/init.py

    Fixes:

    • Should read occurred rather than occured.
    • Should read likelihood rather than likelyhood.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 0
  • 5.0.6: pytest warnings

    5.0.6: pytest warnings

    Looks like latest pytest shows some warnings

    ============================================================================= warnings summary =============================================================================
    tests/test_configobj.py:41
      /home/tkloczko/rpmbuild/BUILD/configobj-5.0.6/tests/test_configobj.py:41: DeprecationWarning: invalid escape sequence \s
        ws_chars = len(re.search('^(\s*)', first_content).group(1))
    
    tests/test_configobj.py:51
      /home/tkloczko/rpmbuild/BUILD/configobj-5.0.6/tests/test_configobj.py:51: DeprecationWarning: invalid escape sequence \s
        return [re.sub('^\s{0,%s}' % ws_chars, '', line).encode('utf-8')
    
    -- Docs: https://docs.pytest.org/en/stable/warnings.html
    ====================================================================== 71 passed, 2 warnings in 0.38s ======================================================================
    
    opened by kloczek 0
Releases(v5.0.6)
Owner
Differently Sized Kittens
Differently Sized Kittens
environs is a Python library for parsing environment variables.

environs: simplified environment variable parsing environs is a Python library for parsing environment variables. It allows you to store configuration

Steven Loria 920 Jan 4, 2023
A Python library to parse PARI/GP configuration and header files

pari-utils A Python library to parse PARI/GP configuration and header files. This is mainly used in the code generation of https://github.com/sagemath

Sage Mathematical Software System 3 Sep 18, 2022
A compact library for Python 3.10x that allows users to configure their SimPads real-time

SimpadLib v1.0.6 What is this? This is a python library programmed by Ashe Muller that allows users to interface directly with their SimPad devices, a

Ashe Muller 2 Jan 8, 2022
Python YAML Environment (ymlenv) by Problem Fighter Library

In the name of God, the Most Gracious, the Most Merciful. PF-PY-YMLEnv Documentation Install and update using pip: pip install -U PF-PY-YMLEnv Please

Problem Fighter 2 Jan 20, 2022
Configuration Management for Python ⚙

dynaconf - Configuration Management for Python. Features Inspired by the 12-factor application guide Settings management (default values, validation,

Bruno Rocha 2.8k Jan 6, 2023
Flexible Python configuration system. The last one you will ever need.

OmegaConf Description Project Code quality Docs and support OmegaConf is a hierarchical configuration system, with support for merging configurations

Omry Yadan 1.4k Jan 2, 2023
🤫 Easily manage configs and secrets in your Python projects (with CLI support)

Installation pip install confidential How does it work? Confidential manages secrets for your project, using AWS Secrets Manager. First, store a secr

Candid™️ 63 Oct 30, 2022
Python Marlin Configurator to make valid configuration files to be used to compile Marlin with.

marlin-configurator Concept originally imagined by The-EG using PowerShell Build Script for Marlin Configurations The purpose of this project is to pa

DevPeeps 2 Oct 9, 2021
Read configuration settings from python configuration files.

Maison Read configuration settings from python configuration files. Motivation When developing a python application, e.g a command-line tool, it can b

null 9 Jan 4, 2023
Simple dataclasses configuration management for Python with hocon/json/yaml/properties/env-vars/dict support.

Simple dataclasses configuration management for Python with hocon/json/yaml/properties/env-vars/dict support, based on awesome and lightweight pyhocon parsing library.

Teo Stocco 62 Dec 23, 2022
Scooch Configures Object Oriented Class Hierarchies for python

Scooch Scooch Configures Object Oriented Class Hierarchies for python. A good place to start with Scooch is at the documentation found here. Scooch is

Pandora Media, Inc. 6 Dec 20, 2022
A set of Python scripts and notebooks to help administer and configure Workforce projects.

Workforce Scripts A set of Python scripts and notebooks to help administer and configure Workforce projects. Notebooks Several example Jupyter noteboo

Esri 75 Sep 9, 2022
Apt2sbom python package generates SPDX or YAML files

Welcome to apt2sbom This package contains a library and a CLI tool to convert a Ubuntu software package inventory to a software bill of materials. You

Eliot Lear 15 Nov 13, 2022
A small example project for efficiently configuring a Python application with YAMLs and the CLI

Hydra Example Project for Python A small example project for efficiently configuring a Python application with YAMLs and the CLI. Why should I care? A

Florian Wilhelm 4 Dec 31, 2022
A simple port scanner for Web/ip scanning Port 0/500 editable inside the .py file

Simple-Port-Scanner a simple port scanner for Web/ip scanning Port 0/500 editable inside the .py file Open Cmd/Terminal Cmd Downloads Run Command: pip

YABOI 1 Nov 22, 2021
Python library for Minitel communication through serial port

Python library for Minitel communication through serial port

Noël 3 Aug 14, 2022
A Python port and library-fication of the midicsv tool by John Walker.

A Python port and library-fication of the midicsv tool by John Walker. If you need to convert MIDI files to human-readable text files and back, this is the library for you.

Tim Wedde 52 Dec 29, 2022
This is a Python 3.10 port of mock, a library for manipulating human-readable message strings.

This is a Python 3.10 port of mock, a library for manipulating human-readable message strings.

Alexander Bartolomey 1 Dec 31, 2021
Pydapper - A pure python port of the NuGet library dapper

pydapper A pure python library inspired by the NuGet library dapper. pydapper is

Zach Schumacher 38 Jan 2, 2023
Tomli is a Python library for parsing TOML. Tomli is fully compatible with TOML v1.0.0.

Tomli A lil' TOML parser Table of Contents generated with mdformat-toc Intro Installation Usage Parse a TOML string Parse a TOML file Handle invalid T

Taneli Hukkinen 313 Dec 26, 2022