<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to moddiutils</title><link>https://sourceforge.net/p/patchmaster/wiki/moddiutils/</link><description>Recent changes to moddiutils</description><atom:link href="https://sourceforge.net/p/patchmaster/wiki/moddiutils/feed" rel="self"/><language>en</language><lastBuildDate>Tue, 19 Dec 2017 18:16:34 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/patchmaster/wiki/moddiutils/feed" rel="self" type="application/rss+xml"/><item><title>moddiutils modified by Stefan Meinlschmidt</title><link>https://sourceforge.net/p/patchmaster/wiki/moddiutils/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v6
+++ v7
@@ -56,4 +56,4 @@

 moddiutils are meant to be *part of* some bigger project ([patchmaster](Home) and [ewi4000s-editor](/projects/ewi4000s-editor) in my case), so you should simply copy the whole subdirectory into your project’s root so it acts as a package. If your own project uses GIT for version control, you might consider using [git-subrepo](https://github.com/ingydotnet/git-subrepo) to clone it directly into your project from git://git.code.sf.net/p/patchmaster/moddiutils.

-In any case you should *not* happily update to the newest version all the time – I do *not* guarantee to keep versions conpatible in any way, i.e. any new version will probably break something in your project. If you need or really want to update, be prepared for that extra effort and frustration. If you don’t need or really want, don’t do it.
+In any case you should *not* happily update to the newest version all the time – I do *not* guarantee to keep versions compatible in any way, i.e. any new version will probably break something in your project. If you need or really want to update, be prepared for that extra effort and frustration. If you don’t need or really want, don’t do it.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Meinlschmidt</dc:creator><pubDate>Tue, 19 Dec 2017 18:16:34 -0000</pubDate><guid>https://sourceforge.netdcb0773f5e09565c3bbd87d9fa08526e91dca50d</guid></item><item><title>moddiutils modified by Stefan Meinlschmidt</title><link>https://sourceforge.net/p/patchmaster/wiki/moddiutils/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v5
+++ v6
@@ -54,6 +54,6 @@

 ## Use ##

-moddiutils are meant to be *part of* some bigger project [patchmaster](Home) and [ewi4000s-editor](/projects/ewi4000s-editor) in my case), so you should simply copy the whole subdirectory into your project’s root so it acts as a package. If your own project uses GIT for version control, you might consider using [git-subrepo](https://github.com/ingydotnet/git-subrepo) to clone it directly into your project from git://git.code.sf.net/p/patchmaster/moddiutils.
+moddiutils are meant to be *part of* some bigger project ([patchmaster](Home) and [ewi4000s-editor](/projects/ewi4000s-editor) in my case), so you should simply copy the whole subdirectory into your project’s root so it acts as a package. If your own project uses GIT for version control, you might consider using [git-subrepo](https://github.com/ingydotnet/git-subrepo) to clone it directly into your project from git://git.code.sf.net/p/patchmaster/moddiutils.

 In any case you should *not* happily update to the newest version all the time – I do *not* guarantee to keep versions conpatible in any way, i.e. any new version will probably break something in your project. If you need or really want to update, be prepared for that extra effort and frustration. If you don’t need or really want, don’t do it.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Meinlschmidt</dc:creator><pubDate>Sat, 16 Dec 2017 13:02:51 -0000</pubDate><guid>https://sourceforge.netbbd83df5d4cce904eff7f8193deea2262c3536c0</guid></item><item><title>moddiutils modified by Stefan Meinlschmidt</title><link>https://sourceforge.net/p/patchmaster/wiki/moddiutils/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -20,7 +20,7 @@
 moddiutils.LogContext | Context manager calling some log function upon \_\_enter\_\_ and \_\_exit\_\_
 moddiutils.MroMap | Dictinary (-lookalike) with classes as key where you can retrieve by most-derived base class
 moddiutils.async | Subpackage implementing an asyncronous execution model, described on [its own page](moddiutils.async)
-moddiutils.config.Stack | Common interface to configuration data from environment and config file(s) (.init format for now)
+moddiutils.config.Stack | Common interface to configuration data from environment and config file(s) (.ini format for now)
 moddiutils.inspect.Genfunc | Turn both normal and generator functions into something that can be uniformly used as a generator function
 moddiutils.inspect.Plainfunc | Turn both normal and generator functions into something that can be uniformly called as a normal function
 moddiutils.plugin | Subpackage for finding, loading and unloading Python files and registering and enumerating the contained things (docu pending)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Meinlschmidt</dc:creator><pubDate>Sat, 16 Dec 2017 12:54:54 -0000</pubDate><guid>https://sourceforge.net345d83048921112fedba1a37664449aea1aa32f8</guid></item><item><title>moddiutils modified by Stefan Meinlschmidt</title><link>https://sourceforge.net/p/patchmaster/wiki/moddiutils/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -38,6 +38,7 @@
 moddiutils.tk | Stuff to make tkinter more bearable
 moddiutils.tk.TkCallback | Wrapper around some callable swallowing (event) arguments and returning 'break'
 moddiutils.tk.ScrollWrap | Wrapper around some tkinter widget adding scrollbars
+moddiutils.tk.tooltip | Add tooltip to widget
 moddiutils.tk.app.App | Base for a proper, non-blocking, tkinter application, maintaining a worker thread, means to inject calls back into the GUI thread and an exception dialog
 moddiutils.tk.help.HelpBrowser | Window displaying HTML help (in *limited* HTML)
 moddiutils.tk.html | Sort of an HTML browser widget, described on [its own page](moddiutils.tk.html)
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Meinlschmidt</dc:creator><pubDate>Fri, 15 Dec 2017 16:44:41 -0000</pubDate><guid>https://sourceforge.net63392df6c13d86235a6a47927ece756234f1b9cd</guid></item><item><title>moddiutils modified by Stefan Meinlschmidt</title><link>https://sourceforge.net/p/patchmaster/wiki/moddiutils/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -40,7 +40,7 @@
 moddiutils.tk.ScrollWrap | Wrapper around some tkinter widget adding scrollbars
 moddiutils.tk.app.App | Base for a proper, non-blocking, tkinter application, maintaining a worker thread, means to inject calls back into the GUI thread and an exception dialog
 moddiutils.tk.help.HelpBrowser | Window displaying HTML help (in *limited* HTML)
-moddiutils.tk.html | Sort of an HTML browser widget, described on [its own page](moddiutils.html)
+moddiutils.tk.html | Sort of an HTML browser widget, described on [its own page](moddiutils.tk.html)
 moddiutils.tk.modal | Subsystem for modal dialogs
 moddiutils.tk.modal.modal_active | check whether something modal is open
 moddiutils.tk.modal.Modal | Base class for modal dialogs
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Meinlschmidt</dc:creator><pubDate>Fri, 15 Dec 2017 14:24:42 -0000</pubDate><guid>https://sourceforge.nete51c59e0aae15da837fbe3e6632e24b8217a7fe9</guid></item><item><title>moddiutils modified by Stefan Meinlschmidt</title><link>https://sourceforge.net/p/patchmaster/wiki/moddiutils/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -1,5 +1,7 @@
 # moddiutils #
 moddiutils are a more or less random collection of Python3 code from the [patchmaster](Home) project but not specific to it.
+
+moddiutils are open source, they are available under the terms of the [MIT license](https://opensource.org/licenses/MIT).

 ## Content ##

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Meinlschmidt</dc:creator><pubDate>Fri, 15 Dec 2017 13:56:32 -0000</pubDate><guid>https://sourceforge.netbf54507777d68b5a02c5cff6f6720a51cb53b114</guid></item><item><title>moddiutils modified by Stefan Meinlschmidt</title><link>https://sourceforge.net/p/patchmaster/wiki/moddiutils/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="moddiutils"&gt;moddiutils&lt;/h1&gt;
&lt;p&gt;moddiutils are a more or less random collection of Python3 code from the &lt;a class="" href="/p/patchmaster/wiki/Home/"&gt;patchmaster&lt;/a&gt; project but not specific to it.&lt;/p&gt;
&lt;h2 id="content"&gt;Content&lt;/h2&gt;
&lt;p&gt;As of 2017-12-15 moddiutils contain:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;identifier&lt;/th&gt;
&lt;th&gt;what it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.EXPORT&lt;/td&gt;
&lt;td&gt;Decorator maintaining __all__&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.Struct&lt;/td&gt;
&lt;td&gt;Simple object with members set from the constructor (alternative to collections.namedtuple)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.format_args&lt;/td&gt;
&lt;td&gt;Prettyprinting args and kwargs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.Overlay, moddiutils.OverlayStruct&lt;/td&gt;
&lt;td&gt;Wrap an object to add methods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.methodify&lt;/td&gt;
&lt;td&gt;Decorator turning a member class into something aware of (the parent’s) self&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.neuter&lt;/td&gt;
&lt;td&gt;Decorator swallowing a function’s return value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.Immortal&lt;/td&gt;
&lt;td&gt;Base class for objects immune to garbage collection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tobytes&lt;/td&gt;
&lt;td&gt;Convert about everything into bytes, possibly turning it into a string first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.LogContext&lt;/td&gt;
&lt;td&gt;Context manager calling some log function upon __enter__ and __exit__&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.MroMap&lt;/td&gt;
&lt;td&gt;Dictinary (-lookalike) with classes as key where you can retrieve by most-derived base class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.async&lt;/td&gt;
&lt;td&gt;Subpackage implementing an asyncronous execution model, described on &lt;a class="" href="../moddiutils.async"&gt;its own page&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.config.Stack&lt;/td&gt;
&lt;td&gt;Common interface to configuration data from environment and config file(s) (.init format for now)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.inspect.Genfunc&lt;/td&gt;
&lt;td&gt;Turn both normal and generator functions into something that can be uniformly used as a generator function&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.inspect.Plainfunc&lt;/td&gt;
&lt;td&gt;Turn both normal and generator functions into something that can be uniformly called as a normal function&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.plugin&lt;/td&gt;
&lt;td&gt;Subpackage for finding, loading and unloading Python files and registering and enumerating the contained things (docu pending)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.resources.mkfuncs&lt;/td&gt;
&lt;td&gt;Tool to access non-Python-files within some package&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.threading&lt;/td&gt;
&lt;td&gt;“Wrapper” around Python’s threading, i.e. import instead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.threading.Threadlocal&lt;/td&gt;
&lt;td&gt;Similar to moddiutils.Struct, but each thread has its own copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.threading.Gate&lt;/td&gt;
&lt;td&gt;Simple proceed-or-not signalling between threads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.threading.ExceptionForwarder&lt;/td&gt;
&lt;td&gt;Forwards exceptions to some callback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.threading.Thread&lt;/td&gt;
&lt;td&gt;threading.Thread augmented with exception forwarding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.threading.ExceptionEvent&lt;/td&gt;
&lt;td&gt;threading.Event lookalike able to forward exceptions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.timer.Timer&lt;/td&gt;
&lt;td&gt;Thread you can post callbacks to to be called after some delay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.timer.Alarm&lt;/td&gt;
&lt;td&gt;Callback that can post itself to an internal moddiutils.timer.Timer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.timer.Recoverer&lt;/td&gt;
&lt;td&gt;Delay calls as needed to limit call frequency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.timer.Swallower&lt;/td&gt;
&lt;td&gt;Delay and drop calls as needed to limit call frequency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk&lt;/td&gt;
&lt;td&gt;Stuff to make tkinter more bearable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.TkCallback&lt;/td&gt;
&lt;td&gt;Wrapper around some callable swallowing (event) arguments and returning 'break'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.ScrollWrap&lt;/td&gt;
&lt;td&gt;Wrapper around some tkinter widget adding scrollbars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.app.App&lt;/td&gt;
&lt;td&gt;Base for a proper, non-blocking, tkinter application, maintaining a worker thread, means to inject calls back into the GUI thread and an exception dialog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.help.HelpBrowser&lt;/td&gt;
&lt;td&gt;Window displaying HTML help (in &lt;em&gt;limited&lt;/em&gt; HTML)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.html&lt;/td&gt;
&lt;td&gt;Sort of an HTML browser widget, described on &lt;a class="" href="../moddiutils.html"&gt;its own page&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.modal&lt;/td&gt;
&lt;td&gt;Subsystem for modal dialogs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.modal.modal_active&lt;/td&gt;
&lt;td&gt;check whether something modal is open&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.modal.Modal&lt;/td&gt;
&lt;td&gt;Base class for modal dialogs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.modal.ErrorBox&lt;/td&gt;
&lt;td&gt;Display  longish error information (e.g. some exception)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.tk.modal.YnBox, moddiutils.tk.modal.yndialog, moddiutils.tk.modal.YnaBox, moddiutils.tk.modal.ynadialog&lt;/td&gt;
&lt;td&gt;Humble replacement for tkinter.tkMessageBox.askyesno, honouring the modal system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.xml.Handler&lt;/td&gt;
&lt;td&gt;Abstract interface for building an XML tree&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.xml.Root&lt;/td&gt;
&lt;td&gt;Mixin for building your own Handler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.xml.Document&lt;/td&gt;
&lt;td&gt;XML tree capable of turning into events or a byte stream again, i.e. you can use it to create XML files from Python in a structured way&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moddiutils.xml.parse, moddiutils.xml.source, moddiutils.xml.parse_file&lt;/td&gt;
&lt;td&gt;Very much unfinished means to parse a file or URL containing proper XML or some HTMLish tag soup into some moddiutils.xml.Handler, possibly a moddiutils.xml.Document&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="use"&gt;Use&lt;/h2&gt;
&lt;p&gt;moddiutils are meant to be &lt;em&gt;part of&lt;/em&gt; some bigger project &lt;a class="" href="/p/patchmaster/wiki/Home/"&gt;patchmaster&lt;/a&gt; and &lt;a class="" href="/projects/ewi4000s-editor"&gt;ewi4000s-editor&lt;/a&gt; in my case), so you should simply copy the whole subdirectory into your project’s root so it acts as a package. If your own project uses GIT for version control, you might consider using &lt;a class="" href="https://github.com/ingydotnet/git-subrepo" rel="nofollow"&gt;git-subrepo&lt;/a&gt; to clone it directly into your project from git://git.code.sf.net/p/patchmaster/moddiutils.&lt;/p&gt;
&lt;p&gt;In any case you should &lt;em&gt;not&lt;/em&gt; happily update to the newest version all the time – I do &lt;em&gt;not&lt;/em&gt; guarantee to keep versions conpatible in any way, i.e. any new version will probably break something in your project. If you need or really want to update, be prepared for that extra effort and frustration. If you don’t need or really want, don’t do it.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Meinlschmidt</dc:creator><pubDate>Fri, 15 Dec 2017 13:29:31 -0000</pubDate><guid>https://sourceforge.net88e547b2ebc40ba27d970d4841e509539a5eae79</guid></item></channel></rss>