{"action":"closed","issue":{"url":"https://api.github.com/repos/schmie/test/issues/117","labels_url":"https://api.github.com/repos/schmie/test/issues/117/labels{/name}","comments_url":"https://api.github.com/repos/schmie/test/issues/117/comments","events_url":"https://api.github.com/repos/schmie/test/issues/117/events","html_url":"https://github.com/schmie/test/issues/117","id":90951207,"number":117,"title":"Refactor Scripts/CfgParser into a hemeTools module","user":{"login":"schmie","id":6473158,"avatar_url":"https://avatars.githubusercontent.com/u/6473158?v=3","gravatar_id":"","url":"https://api.github.com/users/schmie","html_url":"https://github.com/schmie","followers_url":"https://api.github.com/users/schmie/followers","following_url":"https://api.github.com/users/schmie/following{/other_user}","gists_url":"https://api.github.com/users/schmie/gists{/gist_id}","starred_url":"https://api.github.com/users/schmie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/schmie/subscriptions","organizations_url":"https://api.github.com/users/schmie/orgs","repos_url":"https://api.github.com/users/schmie/repos","events_url":"https://api.github.com/users/schmie/events{/privacy}","received_events_url":"https://api.github.com/users/schmie/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/schmie/test/labels/C:%20Python%20Tools","name":"C: Python Tools","color":"0000aa"},{"url":"https://api.github.com/repos/schmie/test/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/schmie/test/labels/P:%20major","name":"P: major","color":"f6f6f6"}],"state":"closed","locked":false,"assignee":{"login":"schmie","id":6473158,"avatar_url":"https://avatars.githubusercontent.com/u/6473158?v=3","gravatar_id":"","url":"https://api.github.com/users/schmie","html_url":"https://github.com/schmie","followers_url":"https://api.github.com/users/schmie/followers","following_url":"https://api.github.com/users/schmie/following{/other_user}","gists_url":"https://api.github.com/users/schmie/gists{/gist_id}","starred_url":"https://api.github.com/users/schmie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/schmie/subscriptions","organizations_url":"https://api.github.com/users/schmie/orgs","repos_url":"https://api.github.com/users/schmie/repos","events_url":"https://api.github.com/users/schmie/events{/privacy}","received_events_url":"https://api.github.com/users/schmie/received_events","type":"User","site_admin":false},"milestone":null,"comments":4,"created_at":"2015-06-25T12:38:29Z","updated_at":"2015-06-25T12:38:48Z","closed_at":"2015-06-25T12:38:48Z","body":"**Reported by rupert on 6 Oct 2011 15:30 UTC**\nThe !CfgParser is useful, but the code was hard to reuse. Here I have refactored the loading into memory of a config file into an event-driven parser (`hemeTools.parsers.config.simple.ConfigLoader`). A subclass (`hemeTools.parsers.config.freeing.FreeingConfigLoader`) allows processing to occur as soon as a block has its neighbours available and blocks are deleted when no longer needed.\r\n\r\nA further subclass does the processing asynchronously and in parallel.\r\n\r\nAll that remains in !CfgParser.py is the code to check a single Block for validity.\r\n\r\nUsage: ensure hemeTools is installed (`python setup.py install [--user]`) then run as before (`python CfgParser.py /path/to/config.dat`)\r\n\r\nKnown issues: killing the program with ctrl-c doesn't always give a clean exit because of the child processes. Workaround: kill -9 the child processes"}}