Chore
* chore(__init__.py): Version bump ([`3c8cd46`](https://github.com/Rizhiy/pycs/commit/3c8cd467672805ac3cd7d3fb9100d233f5f7fb39))
* chore(__init__.py): Version bump ([`bb64570`](https://github.com/Rizhiy/pycs/commit/bb64570b5d2f07e470406d2bdfc973b508a3a64c))
* chore: add leaf path to error ([`7638a2b`](https://github.com/Rizhiy/pycs/commit/7638a2b8fb8c04428dac6064593aba05f08e2c80))
Feature
* feat: write specific type in error ([`5677999`](https://github.com/Rizhiy/pycs/commit/567799904825b12fc75dbf65b52263f4c1e00bb8))
* feat: make meaningful errors for subclass ([`cd57231`](https://github.com/Rizhiy/pycs/commit/cd572314397e7496ab595841053fbcfb2c045e56))
* feat(description): nesting inheritance ([`ade781f`](https://github.com/Rizhiy/pycs/commit/ade781f99e755fa8185833a8f8385d714fb8baf8))
* feat: add description field ([`0f4a9e7`](https://github.com/Rizhiy/pycs/commit/0f4a9e71da2a9e7690e936d4ebcb99c34f2ceada))
* feat(ci): automate semantic release ([`d1e35a6`](https://github.com/Rizhiy/pycs/commit/d1e35a6beeab758a69c66a136a68c9448973e864))
* feat: Add pickle functionality ([`dd0f71e`](https://github.com/Rizhiy/pycs/commit/dd0f71ecba22a798175dee9bac1045f6bf0887d1))
* feat: helpful errors ([`1f601eb`](https://github.com/Rizhiy/pycs/commit/1f601eb4529357f7f2d8d7369143bfdef441d75b))
* feat: remove type set on assignment ([`d3ed0d7`](https://github.com/Rizhiy/pycs/commit/d3ed0d73ba1015feaa553beb1bc077886b4f9f76))
* feat: ntu format command ([`92df972`](https://github.com/Rizhiy/pycs/commit/92df9729b74adf8a89caca873a730b8eee130bf6))
* feat: organise tests ([`adae61f`](https://github.com/Rizhiy/pycs/commit/adae61f33caa9306365b07e8d54c03849a0fad9b))
* feat: add docs ([`1e1e805`](https://github.com/Rizhiy/pycs/commit/1e1e805f6317d3263b698b9085503d184d6b2f1f))
* feat: Add tests and remove unused code ([`9237242`](https://github.com/Rizhiy/pycs/commit/923724270caaead4d73de8a599ceebd708657ba4))
* feat: validators, transformers ([`233edc3`](https://github.com/Rizhiy/pycs/commit/233edc3d6b322894b0e614ab6441d72140544a74))
* feat: load file ([`51677c6`](https://github.com/Rizhiy/pycs/commit/51677c6940247bd40dd977a5f68f2904c2dfa002))
* feat: clone method ([`93782c4`](https://github.com/Rizhiy/pycs/commit/93782c454b3e138b900cfa7e860c4f8e6b576390))
* feat: required config leaf ([`a3ecea0`](https://github.com/Rizhiy/pycs/commit/a3ecea088df5d7decd685c9665a8bead5809b7ca))
* feat: add str magic ([`9b3c406`](https://github.com/Rizhiy/pycs/commit/9b3c406a23488891d38d1c754bd89113afe9a7bc))
Fix
* fix(test_bad.py): Fix bad leaf name ([`280db94`](https://github.com/Rizhiy/pycs/commit/280db941b8f1b9fdf62ec0b634fda79c5a5e1c2b))
* fix(node.py): Fix CN(new_allowed=True) ([`9fe1c70`](https://github.com/Rizhiy/pycs/commit/9fe1c702dd114d3a048cd644bf42cbe24dd35f26))
* fix: format ([`bedf2f1`](https://github.com/Rizhiy/pycs/commit/bedf2f1c2022a14392ded4e7328c1cd9dc9e6d49))
Refactor
* refactor: decompose set_new method ([`99fffa5`](https://github.com/Rizhiy/pycs/commit/99fffa5870fae5c87593cbc7b9dd4794108439d2))
Style
* style(leaf.py): Adjust error message ([`0eade03`](https://github.com/Rizhiy/pycs/commit/0eade03153fc0b8e765d97a8a221dd3e32931443))
Test
* test: add missing files ([`5186920`](https://github.com/Rizhiy/pycs/commit/5186920ab672e1cdfa16999deaa2c2b2130fa325))
* test(description): change configs structure ([`acd60c3`](https://github.com/Rizhiy/pycs/commit/acd60c3a4f7cdd327582dd157be36f6dbb2c9476))
* test(good): multiple inheritance loads ([`13298ef`](https://github.com/Rizhiy/pycs/commit/13298efb56445c4a8ee4f9874a7688cca7272c01))
Unknown
* Merge branch &39;feat/specific-class-in-errors&39; into &39;master&39;
feat: write specific type in error
See merge request utilities/ntc!20 ([`0bb18dc`](https://github.com/Rizhiy/pycs/commit/0bb18dc7837941164ff56ff16ae3edde5ec79af3))
* Merge branch &39;feat/improve-errors-text&39; into &39;master&39;
feat: make meaningful errors for subclass
See merge request utilities/ntc!19 ([`0a9d9cf`](https://github.com/Rizhiy/pycs/commit/0a9d9cf9bb90f0cee4c0037e4ecebc4b4018524e))
* Merge branch &39;feat/leaf-description&39; into &39;master&39;
feat: add description field
See merge request utilities/ntc!18 ([`b843a63`](https://github.com/Rizhiy/pycs/commit/b843a63aea5f4fe491a8019384f3182ac771ad33))
* Merge branch &39;test/multiple-loadings&39; into &39;master&39;
test(good): multiple inheritance loads
See merge request utilities/ntc!17 ([`2db7166`](https://github.com/Rizhiy/pycs/commit/2db7166d5555aeb9242fd63963d9d22849df8011))
* Revert &34;feat(ci): automate semantic release&34;
This reverts commit d1e35a6beeab758a69c66a136a68c9448973e864. ([`4861a8f`](https://github.com/Rizhiy/pycs/commit/4861a8fba3c7cb6d942d56901353dcb713849376))
* fix[node.py]: Fix partial in node leaf_spec ([`9f74abd`](https://github.com/Rizhiy/pycs/commit/9f74abd6fd6121d00d07bdd1a3f23275bf4fc733))
* feat[leaf.py]: Added checks to work with functools.partial ([`4b950ed`](https://github.com/Rizhiy/pycs/commit/4b950edc8c4319f453e1c03c575309287f1c1c51))
* 0.11.0
Feature
* Automate semantic release (d1e35a6) ([`291d8fa`](https://github.com/Rizhiy/pycs/commit/291d8faee5eb3bf8a5ce1a8b5da4ae2045bed4e4))
* Merge branch &39;feat/semantic-release&39; into &39;master&39;
feat(ci): automate semantic release
See merge request utilities/ntc!16 ([`1d81a8c`](https://github.com/Rizhiy/pycs/commit/1d81a8c5ab67def0d606c795568d9ae42a57a4f2))
* 0.10.0 ([`481fe6a`](https://github.com/Rizhiy/pycs/commit/481fe6ad7619459164fc3543e666ce6d7723c535))
* refactor[node.py]: Change clone() to inherit(), clone() now just clones ([`6bd74ed`](https://github.com/Rizhiy/pycs/commit/6bd74ed2bcdcb3616540c2007f8462681710b308))
* chore[__init__.py]: Version bump ([`889fd30`](https://github.com/Rizhiy/pycs/commit/889fd30b362a9ced28fd6530f9557533bd6df6a7))
* Merge branch &39;master&39; of 192.168.135.11:utilities/ntc ([`e9e58aa`](https://github.com/Rizhiy/pycs/commit/e9e58aa12d71c435a6aec25c68614379071b350a))
* Merge branch &39;feat/assert-to-val-error&39; into &39;master&39;
feat[node]: validation error instead of assertion
See merge request utilities/ntc!15 ([`d3ecbcc`](https://github.com/Rizhiy/pycs/commit/d3ecbcc426836a358fc691f517871adab78bf704))
* feat[node]: validation error instead of assertion ([`4237d62`](https://github.com/Rizhiy/pycs/commit/4237d62c46badad9957aee8def5a80005b19178b))
* Merge branch &39;feat/ntu-setup-utils&39; into &39;master&39;
feat[setup]: use ntu setup utils
See merge request utilities/ntc!14 ([`1e9c606`](https://github.com/Rizhiy/pycs/commit/1e9c606232d7c46bb77d23e37e5992ec53986533))
* feat[setup]: use ntu setup utils ([`37e38e6`](https://github.com/Rizhiy/pycs/commit/37e38e6cf8d05856cde0e6c629f71de370f622f5))
* Merge branch &39;feat/helpful-errors&39; into &39;master&39;
feat: helpful errors
See merge request utilities/ntc!13 ([`30a1e7c`](https://github.com/Rizhiy/pycs/commit/30a1e7c5007b9edb36c0a25183fe33dca7cc4c66))
* Merge branch &39;master&39; into &39;feat/helpful-errors&39;
Conflicts:
ntc/__init__.py
ntc/leaf.py ([`8910b13`](https://github.com/Rizhiy/pycs/commit/8910b13b9e4c23bb147ca5f94322e21d8a5b2510))
* chore[node.py]: Change full_key to start with &39;cfg&39; ([`9eabdf7`](https://github.com/Rizhiy/pycs/commit/9eabdf7f33fe570d8f68875bf2bdd14272c0a935))
* feat[leaf.py]: Add more flexible specification and fix clone ([`b7c17d5`](https://github.com/Rizhiy/pycs/commit/b7c17d5698a680bdd78e096f58b4ebf9f968f446))
* func return type ([`591eaf9`](https://github.com/Rizhiy/pycs/commit/591eaf9526f95f1c9d8c7b74f6b1aa548a831da0))
* child_full_key; f-string; version ([`f6fb8bc`](https://github.com/Rizhiy/pycs/commit/f6fb8bcf4b8f52bb23211218f46c5f67d4d23fe3))
* change error text ([`8cb9ccd`](https://github.com/Rizhiy/pycs/commit/8cb9ccd0a5f3d011bba982f24bdcbce387bafd22))
* store full_key ([`6b5d134`](https://github.com/Rizhiy/pycs/commit/6b5d1348cb61ab5822bf071fdde7b165f9ab0ccd))
* Merge branch &39;feat/dont-convert-types&39; into &39;master&39;
feat: remove type set on assignment
See merge request utilities/config!12 ([`978ddd0`](https://github.com/Rizhiy/pycs/commit/978ddd01f56eb2b3a005273f1c5fe629ae22f34d))
* Merge branch &39;feat/ntu-format-command&39; into &39;master&39;
feat: ntu format command
See merge request utilities/config!11 ([`bd4c66d`](https://github.com/Rizhiy/pycs/commit/bd4c66d748bbac6f9805ee4cb7130160eb943cbf))
* refactor[node.py]: Make plain value to be set as required ([`fdfd9b2`](https://github.com/Rizhiy/pycs/commit/fdfd9b298eb4f3176da6d4b7540376514624449c))
* Merge branch &39;feat/use-ntu&39; into &39;master&39;
feat[ci]: use ntu
See merge request utilities/config!9 ([`0e6e1fc`](https://github.com/Rizhiy/pycs/commit/0e6e1fc171545317f9abce124af49b7a47ead93c))
* feat[ci]: use ntu ([`1b012dc`](https://github.com/Rizhiy/pycs/commit/1b012dc10a7b0bd7dbebd05ad96fdf2b7902dfd1))
* fix[config.py]: Fix handling of required subclass leaf_spec and add tests ([`150def7`](https://github.com/Rizhiy/pycs/commit/150def7ce42f3a23cf2985591becb71de93f1154))
* feat[config.py]: Make SchemaErrors messages more descriptive ([`0b3eb7f`](https://github.com/Rizhiy/pycs/commit/0b3eb7f93f239321de5679153cc09d0c1c6fce52))
* chore[tests]: Rename test_config.py to test_node.py ([`520ec85`](https://github.com/Rizhiy/pycs/commit/520ec853ffadebd9a92769ccf3dabffdd7947868))
* fix[config.py]: Fix leaf creation for required spec ([`e0e8eb7`](https://github.com/Rizhiy/pycs/commit/e0e8eb741055572a236d4e2a1f55d1d807b13ee0))
* refactor[config.py]: Change how config is loaded and import rules ([`4075acf`](https://github.com/Rizhiy/pycs/commit/4075acf7bd1f724cdd63441f16bd15bc829c4756))
* Merge branch &39;feat/organise-tests&39; into &39;master&39;
feat: organise tests
See merge request utilities/config!8 ([`80b6c88`](https://github.com/Rizhiy/pycs/commit/80b6c8848c3f2e53f3e612132c24f500b41ee3b5))
* docs[README.md]: Improve instructions ([`913e50a`](https://github.com/Rizhiy/pycs/commit/913e50a936983c050c8cecb7ad5bb2ce2a05b1ba))
* feat[config.py]: Add hooks ([`992e9be`](https://github.com/Rizhiy/pycs/commit/992e9be117ae9a0a9253da0bc908c168c807f0b5))
* Merge branch &39;feat/readme&39; into &39;master&39;
feat: add docs
See merge request utilities/config!7 ([`58f1226`](https://github.com/Rizhiy/pycs/commit/58f12262c213c565a12a17f9424426c1c6b48117))
* feat[config.py]: Allow passing leaf type directly to CfgNode ([`51f9bfe`](https://github.com/Rizhiy/pycs/commit/51f9bfe1ecbffa18987d1bc01cf0a06202054c0d))
* chore[config.py]: Remove impossible case ([`c261bda`](https://github.com/Rizhiy/pycs/commit/c261bdaeb5156d7f1c444217690e620e9e5623e9))
* chore[tests]: Make bad tests more uniform ([`010ec74`](https://github.com/Rizhiy/pycs/commit/010ec74eaaa48f3c111a901e7b21b1cdea02eb45))
* refactor[config.py]: Change how transoforms and validators are added ([`01ffe64`](https://github.com/Rizhiy/pycs/commit/01ffe6409431a6b31f8bb9d49a2e87f339266c8e))
* chore[__init__.py]: Version bump ([`d4f4d1c`](https://github.com/Rizhiy/pycs/commit/d4f4d1c8bf16937db4510338ebc434617819e7a6))
* chore[config.py]: Rename transformers to transforms ([`d2f91c4`](https://github.com/Rizhiy/pycs/commit/d2f91c46392295e3c31ac6b098e63e51c46328d4))
* feat[config.py]: Adjust transform and validate ([`88c6108`](https://github.com/Rizhiy/pycs/commit/88c61080ac1137e0e8e8af7487cd529fd6d92ac8))
* chore[.gitingore]: Add test config ([`4539b9d`](https://github.com/Rizhiy/pycs/commit/4539b9d65f8c667276f50dbee100ea89e2a1d5d8))
* Merge branch &39;feat/validators-transformers&39; into &39;master&39;
feat: validators, transformers
See merge request utilities/config!6 ([`d475495`](https://github.com/Rizhiy/pycs/commit/d4754950f56444ac8d3042df958f10af52ed2925))
* chore[test_files.py]: Add test for transform and validate ([`9fb912a`](https://github.com/Rizhiy/pycs/commit/9fb912adfd9a972f437a28701ec07d6cc7dc28fc))
* feat[config.py]: Add subclass option to CfgLeaf ([`aa1ce34`](https://github.com/Rizhiy/pycs/commit/aa1ce342890af5484736ff93a25701989c0d6714))
* feat[config.py]: Add initialisation from dict ([`e83cec3`](https://github.com/Rizhiy/pycs/commit/e83cec3f937d35f96e08401d43d77a05d5e9337d))
* feat[config.py]: Add dict functionality ([`8ee8ea9`](https://github.com/Rizhiy/pycs/commit/8ee8ea99e2cecd9621c93a9dc3310d43a153dfa9))
* change author&39;s info ([`73bcb6e`](https://github.com/Rizhiy/pycs/commit/73bcb6e4910c485689ced1d66dcf249fd13ef128))
* Merge branch &39;feat/load-file&39; into &39;master&39;
feat: load file
See merge request utilities/config!5 ([`5ddda21`](https://github.com/Rizhiy/pycs/commit/5ddda2110489945c1fe764f37400e9af5ada3221))
* freeze in test_save_unfrozen ([`d1ef56e`](https://github.com/Rizhiy/pycs/commit/d1ef56e31282f0a15c0174edd1df6dbd5e2dacb9))
* new_allowed key ([`974b6d4`](https://github.com/Rizhiy/pycs/commit/974b6d4019afde31f7a301a76f22cb02935cf8ef))
* some renaming ([`f2305b2`](https://github.com/Rizhiy/pycs/commit/f2305b23fd8d481d103c5c4aded60c76df3886ea))
* check was_unfrozen; separate errors module; import resolve ([`cb885d4`](https://github.com/Rizhiy/pycs/commit/cb885d4b07b475d1d72699899448a48bb7f61f35))
* some ([`e74a36e`](https://github.com/Rizhiy/pycs/commit/e74a36eb38b2dc452c122bbcaeb75b175ab7c8ea))
* base config and save ([`2c94298`](https://github.com/Rizhiy/pycs/commit/2c9429888333e123b9a02b79442f3d636c307441))
* fix ([`d21e149`](https://github.com/Rizhiy/pycs/commit/d21e14993ee9d35f733beac16b2e1e7153de95ed))
* fix ([`ded42e8`](https://github.com/Rizhiy/pycs/commit/ded42e889333ed83247366ed2309c59f41e1212e))
* chore[tests]: Update ([`d5c04bb`](https://github.com/Rizhiy/pycs/commit/d5c04bb12c4f82798f39496e40cb4416c98bb3d3))
* refactor[base_cfg.py]: Change to to function ([`52ff270`](https://github.com/Rizhiy/pycs/commit/52ff270fb6520350310147d298ffd716e98e1160))
* fix[test_files.py]: Fix test_node ([`7c38917`](https://github.com/Rizhiy/pycs/commit/7c389173b2af2ca8f1a2a496830ba198159445af))
* feat[tests]: Add test for node restriction ([`657efff`](https://github.com/Rizhiy/pycs/commit/657efff673445c2fb591b9029a44e7a857d1fa56))
* chore[tests]: Add test for bad attribute ([`0755130`](https://github.com/Rizhiy/pycs/commit/0755130306b43b4cdddeaa5fed40a00f01032331))
* Merge branch &39;master&39; of 192.168.135.11:utilities/config ([`6fdedce`](https://github.com/Rizhiy/pycs/commit/6fdedce275e02696b6b1e59dab8a46a2c3ac9775))
* feat[tests]: Add file tests ([`f7971d8`](https://github.com/Rizhiy/pycs/commit/f7971d8c0a535e257957ef8cd1def3284953ccdf))
* Merge branch &39;feat/deep-clone&39; into &39;master&39;
feat: clone method
See merge request utilities/config!4 ([`6c478b1`](https://github.com/Rizhiy/pycs/commit/6c478b1b29bbe23dbc6bae51af63ff2360e51595))
* Merge branch &39;feat/required-field&39; into &39;master&39;
feat: required config leaf
See merge request utilities/config!3 ([`0dd2d1b`](https://github.com/Rizhiy/pycs/commit/0dd2d1b2cc00e0be16603b1c6e0b4f0c90ffe00d))
* Merge branch &39;feat/print-beauty&39; into &39;master&39;
feat: add str magic
See merge request utilities/config!2 ([`aba0784`](https://github.com/Rizhiy/pycs/commit/aba0784f563806cbedbd5c463f33c55b07da893e))
* Merge branch &39;feat/config-framework&39; into &39;master&39;
feat config: rough first version
See merge request utilities/config!1 ([`901f8ae`](https://github.com/Rizhiy/pycs/commit/901f8ae2bec096171faa8a5c4bef9860ea1dc640))
* feat config: rough first version ([`a2933f6`](https://github.com/Rizhiy/pycs/commit/a2933f683724d2bfc8af16f8ec35e94db8c2f033))
* init ([`216e40a`](https://github.com/Rizhiy/pycs/commit/216e40af2fcaeda0284c288e493c755c9d681382))