Index: LICENSE
==================================================================
--- LICENSE
+++ LICENSE
@@ -1,1 +1,149 @@
-Publid Domain
+Public Domain / CC0
+
+No Copyright
+------------
+
+The person who associated a work with this deed has dedicated the work to
+the public domain by waiving all of his or her rights to the work worldwide
+under copyright law, including all related and neighboring rights, to the
+extent allowed by law.
+
+You can copy, modify, distribute and perform the work, even for commercial
+purposes, all without asking permission.  See Other Information below.
+
+Other Information
+-----------------
+
+In no way are the patent or trademark rights of any person affected by CC0,
+nor are the rights that other persons may have in the work or in how the
+work is used, such as publicity or privacy rights.
+
+Unless expressly stated otherwise, the person who associated a work with
+this deed makes no warranties about the work, and disclaims liability for
+all uses of the work, to the fullest extent permitted by applicable law.
+
+When using or citing the work, you should not imply endorsement by the
+author or the affirmer.
+
+In Longwinded Legalese
+----------------------
+
+CC0 1.0 Universal
+
+    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+    LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+    INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+    REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+    PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+    THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+    HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+  i. the right to reproduce, adapt, distribute, perform, display,
+     communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+     likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+     subject to the limitations in paragraph 4(a), below;
+  v. rights protecting the extraction, dissemination, use and reuse of data
+     in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+     European Parliament and of the Council of 11 March 1996 on the legal
+     protection of databases, and under any national implementation
+     thereof, including any amended or successor version of such
+     directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+     world based on applicable law or treaty, and any national
+     implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+    surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+    warranties of any kind concerning the Work, express, implied,
+    statutory or otherwise, including without limitation warranties of
+    title, merchantability, fitness for a particular purpose, non
+    infringement, or the absence of latent or other defects, accuracy, or
+    the present or absence of errors, whether or not discoverable, all to
+    the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+    that may apply to the Work or any use thereof, including without
+    limitation any person's Copyright and Related Rights in the Work.
+    Further, Affirmer disclaims responsibility for obtaining any necessary
+    consents, permissions or other rights required for any use of the
+    Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+    party to this document and has no duty or obligation with respect to
+    this CC0 or use of the Work.

ADDED   test/add_plugin_defaults.py
Index: test/add_plugin_defaults.py
==================================================================
--- test/add_plugin_defaults.py
+++ test/add_plugin_defaults.py
@@ -0,0 +1,24 @@
+# type: test
+# title: init checks
+# description: collect defaults from plugins
+# config:
+#    { name: setme, value: 2, type: int }
+# version: 0.2
+# priority: standard
+# 
+# add_plugin_defaults() doesn't collect from all files,
+# it's for individual extraction.
+
+import pytest
+import pluginconf
+
+@pytest.fixture
+def pmd():
+    return pluginconf.plugin_meta(fn=__file__)
+
+def add_plugin_defaults(pmd):
+    conf = {}
+    state = {}
+    pluginconf.add_plugin_defaults(conf, state, pmd, "add_plugin_defaults")
+    assert conf == {'setme': 2}
+    assert state == {'add_plugin_defaults': True}

ADDED   test/all_plugin_meta.py
Index: test/all_plugin_meta.py
==================================================================
--- test/all_plugin_meta.py
+++ test/all_plugin_meta.py
@@ -0,0 +1,36 @@
+# type: test
+# title: scan all plugins
+# description: scan module_list for meta infos
+# config:
+#    { name: scan, value: 1, type: bool }
+# version: 0.5
+# 
+# 
+import os
+import sys
+import pytest
+import pluginconf
+import pkgutil
+import test.all_plugin_meta
+
+# fix oourselves, cause pytest tampers with it too
+@pytest.fixture
+def init():
+    pluginconf.plugin_base = ["test", os.path.dirname(__file__), "."]
+    pluginconf.module_base = "all_plugin_meta"
+    #print(os.getcwd())
+
+def pktutil():
+    # for comparison
+    assert len(list(pkgutil.iter_modules(["."]))) >= 5
+
+def ls(init):
+    assert len(pluginconf.module_list()) >= 5
+
+def scan_test():
+    infos = pluginconf.all_plugin_meta()
+    #print(infos)
+    assert set(infos.keys()) & {
+        'all_plugin_meta', 'basic', 'config', 'pyz', 'sources'
+    }
+    assert infos["all_plugin_meta"]["version"] == "0.5"

ADDED   test/config_args.py
Index: test/config_args.py
==================================================================
--- test/config_args.py
+++ test/config_args.py
@@ -0,0 +1,30 @@
+# type: test
+# title: argparser
+# description: use arg:--param values
+# config:
+#   { arg: --help, name: help, value: 0, type: bool, description: flag }
+#   { arg: -D,     type: boolean,  name: debug,     description: Enable debug messages on console }
+#   { arg: action, type: str *,    name: action[],  description: CLI interface commands. }
+# version: 0.1
+# 
+# Do all the settings!
+
+import pytest
+import pluginconf
+
+@pytest.fixture
+def args():
+    return [
+        pluginconf.argparse_map(opt)
+        for opt in
+        pluginconf.plugin_meta(fn=__file__)["config"]
+    ]
+
+def all(args):
+    assert args == [
+        {'args': ['--help'], 'dest': 'help', 'action': 'store_false', 'default': '0', 'help': 'flag'},
+        {'args': ['-D'], 'dest': 'debug', 'action': 'store_true', 'help': 'Enable debug messages on console'},
+        {'args': ['action'], 'action': 'store', 'nargs': '*', 'type': str, 'help': 'CLI interface commands.'},
+    ]
+
+

Index: test/config_complex.py
==================================================================
--- test/config_complex.py
+++ test/config_complex.py
@@ -1,11 +1,12 @@
 # type: test
 # title: config edge cases
 # description: some less stable options
 # config:
-#   { name: nested, value: "{var}", description: "should be able to understand {enclosed} braces" }
-# version: 0.1
+#   { name: nested, value: "{var}", description: "should now be able to understand {enclosed} braces" }
+#   { name: 'single_quoted', value: 'sq' }
+# version: 0.7.8
 # 
 # Do all the settings!
 
 import pytest
 import pluginconf
@@ -13,8 +14,10 @@
 @pytest.fixture
 def config():
     return pluginconf.plugin_meta(fn=__file__)["config"]
 
 def name(config):
-    print(config)
     assert config[0]["value"] == "{var}"
 
+def single_quotes(config):
+    assert config[1]["value"] == "sq"
+

ADDED   test/config_old.py
Index: test/config_old.py
==================================================================
--- test/config_old.py
+++ test/config_old.py
@@ -0,0 +1,20 @@
+# type: test
+# title: old-style format
+# description: still supported
+# config:
+#   <var name=html, value="str", type="text", description="similar to HTML input tags" >
+# version: 0.1
+# 
+# Shouldn't be used anymore.
+
+import pytest
+import pluginconf
+
+@pytest.fixture
+def config():
+    return pluginconf.plugin_meta(fn=__file__)["config"]
+
+def name(config):
+    assert config[0] == {'type': 'text', 'name': 'html', 'description': 'similar to HTML input tags', 'value': 'str'}
+    #print(config)
+

Index: test/pyz.py
==================================================================
--- test/pyz.py
+++ test/pyz.py
@@ -13,25 +13,27 @@
 import pluginconf
 
 sys.path.insert(0, f"{os.path.dirname(__file__)}/.pyz.pyz")
 os.chdir(os.path.dirname(__file__))
 
-pluginconf.module_base = ["config"]    # must be one of the .pyz-contained modules (should be a dir/submodule for real uses)
-pluginconf.plugin_base = ["inner"]     # relative, must declare __path__, can't be __main__.py
+@pytest.fixture
+def init():
+    pluginconf.module_base = ["config"]    # must be one of the .pyz-contained modules (should be a dir/submodule for real uses)
+    pluginconf.plugin_base = ["inner"]     # relative, must declare __path__, can't be __main__.py
 
 @pytest.fixture
 def pmd():
     return pluginconf.plugin_meta(module="inner")
 
-def importy():
+def importy(init):
     import inner as pyz_inner
     #print(pyz_inner.__file__)
 
-def module_list():
+def module_list(init):
     assert set(pluginconf.module_list()) & {'__main__', 'config', 'inner'}
 
 def inner_props(pmd):
     assert pmd["type"] == "pyz"
     assert pmd["category"] == "complex"
     assert pmd["title"] == "pyz module"
     assert pmd["config"][0]["name"] == "relation"
     assert pmd["state"] == "alpha"

ADDED   test/workarounds.py
Index: test/workarounds.py
==================================================================
--- test/workarounds.py
+++ test/workarounds.py
@@ -0,0 +1,18 @@
+# encoding: utf-8
+##type: test
+# title: workarounds
+# description: pylint hates #type:
+# version: 0.7.7
+#
+# Use double ## hash for type:
+
+import pytest
+import pluginconf
+
+@pytest.fixture
+def pmd():
+    return pluginconf.plugin_meta(fn=__file__)
+
+def type_(pmd):
+    assert pmd["type"] == "test"
+    assert pmd["encoding"] == "utf-8"