genocide 181__tar.gz → 183__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {genocide-181 → genocide-183}/PKG-INFO +1 -7
- {genocide-181 → genocide-183}/README.rst +0 -5
- {genocide-181 → genocide-183}/docs/_static/genocide.css +2 -2
- {genocide-181 → genocide-183}/docs/conf.py +13 -11
- {genocide-181 → genocide-183}/docs/evidence.rst +1 -6
- {genocide-181 → genocide-183}/docs/guilty.rst +0 -5
- {genocide-181 → genocide-183}/docs/index.rst +1 -13
- {genocide-181 → genocide-183}/docs/manual.rst +3 -6
- {genocide-181 → genocide-183}/docs/reconsider.rst +0 -6
- {genocide-181 → genocide-183}/docs/writings.rst +0 -6
- genocide-183/genocide/console.py +83 -0
- {genocide-181 → genocide-183}/genocide/control.py +5 -23
- {genocide-181 → genocide-183}/genocide/daemon.py +2 -2
- {genocide-181 → genocide-183}/genocide/modules/face.py +1 -2
- {genocide-181 → genocide-183}/genocide/modules/irc.py +13 -15
- {genocide-181 → genocide-183}/genocide/object.py +0 -99
- {genocide-181 → genocide-183}/genocide/persist.py +16 -11
- {genocide-181 → genocide-183}/genocide/runtime.py +93 -8
- {genocide-181 → genocide-183}/genocide/service.py +2 -2
- {genocide-181 → genocide-183}/genocide.egg-info/PKG-INFO +1 -7
- {genocide-181 → genocide-183}/genocide.egg-info/SOURCES.txt +1 -3
- {genocide-181 → genocide-183}/genocide.egg-info/entry_points.txt +1 -0
- {genocide-181 → genocide-183}/pyproject.toml +3 -15
- genocide-181/docs/about.rst +0 -54
- genocide-181/genocide.egg-info/requires.txt +0 -2
- genocide-181/genocide.egg-info/zip-safe +0 -1
- {genocide-181 → genocide-183}/docs/ECHAabilify.png +0 -0
- {genocide-181 → genocide-183}/docs/ECHAclozapine.png +0 -0
- {genocide-181 → genocide-183}/docs/ECHAhaldol.png +0 -0
- {genocide-181 → genocide-183}/docs/ECHAzyprexa.png +0 -0
- {genocide-181 → genocide-183}/docs/OTP111.png +0 -0
- {genocide-181 → genocide-183}/docs/OTP222.png +0 -0
- {genocide-181 → genocide-183}/docs/_templates/base.rst +0 -0
- {genocide-181 → genocide-183}/docs/_templates/class.rst +0 -0
- {genocide-181 → genocide-183}/docs/_templates/mine.rst +0 -0
- {genocide-181 → genocide-183}/docs/_templates/module.rst +0 -0
- {genocide-181 → genocide-183}/docs/ack.png +0 -0
- {genocide-181 → genocide-183}/docs/ack3.png +0 -0
- {genocide-181 → genocide-183}/docs/bevestigd.jpg +0 -0
- {genocide-181 → genocide-183}/docs/bylaw.png +0 -0
- {genocide-181 → genocide-183}/docs/files/sitemap.xml +0 -0
- {genocide-181 → genocide-183}/docs/genocide.jpg +0 -0
- {genocide-181 → genocide-183}/docs/genocide.png +0 -0
- {genocide-181 → genocide-183}/docs/informed.jpg +0 -0
- {genocide-181 → genocide-183}/docs/kamer2.png +0 -0
- {genocide-181 → genocide-183}/docs/pdf/EM_Ack_OTP-CR-117_19.pdf +0 -0
- {genocide-181 → genocide-183}/docs/pdf/EM_T04_OTP-CR-117_19.pdf +0 -0
- {genocide-181 → genocide-183}/docs/pdf/EM_T07_OTP-CR-117_19_001.pdf +0 -0
- {genocide-181 → genocide-183}/docs/pdf/Kamer.pdf +0 -0
- {genocide-181 → genocide-183}/docs/pdf/Rome-Statute.pdf +0 -0
- {genocide-181 → genocide-183}/docs/pdf/bevestigd.pdf +0 -0
- {genocide-181 → genocide-183}/docs/request.rst +0 -0
- {genocide-181 → genocide-183}/docs/robots.txt +0 -0
- {genocide-181 → genocide-183}/docs/skull3.png +0 -0
- {genocide-181 → genocide-183}/docs/verbatim7.png +0 -0
- {genocide-181 → genocide-183}/genocide/modules/__init__.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/cmd.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/err.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/fnd.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/log.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/mdl.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/mod.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/opm.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/req.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/rss.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/tdo.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/thr.py +0 -0
- {genocide-181 → genocide-183}/genocide/modules/upt.py +0 -0
- {genocide-181 → genocide-183}/genocide.egg-info/dependency_links.txt +0 -0
- {genocide-181 → genocide-183}/genocide.egg-info/top_level.txt +0 -0
- {genocide-181 → genocide-183}/setup.cfg +0 -0
- {genocide-181 → genocide-183}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: genocide
|
|
3
|
-
Version:
|
|
3
|
+
Version: 183
|
|
4
4
|
Summary: Elderly, Handicapped, Criminals, Wicked
|
|
5
5
|
Author-email: Bart Thate <bthate@dds.nl>
|
|
6
6
|
License: Public Domain
|
|
@@ -13,7 +13,6 @@ Classifier: Operating System :: Unix
|
|
|
13
13
|
Classifier: Programming Language :: Python
|
|
14
14
|
Classifier: Topic :: Utilities
|
|
15
15
|
Description-Content-Type: text/x-rst
|
|
16
|
-
Provides-Extra: dev
|
|
17
16
|
|
|
18
17
|
| **Information and Evidence Unit**
|
|
19
18
|
| **Office of the Prosecutor**
|
|
@@ -68,8 +67,3 @@ are poison at the time they voted for this law and the day the Wfz law took
|
|
|
68
67
|
effect (1-1-2019), i ask the prosecutor to prosecute the king for making the
|
|
69
68
|
commiting of the above mentioned crimes (killing, torture and impotent making)
|
|
70
69
|
possible.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
p.s.
|
|
74
|
-
|
|
75
|
-
#. ``OTP-CR-117/19`` entered Communications Register on ``4 march 2019``
|
|
@@ -51,8 +51,3 @@ are poison at the time they voted for this law and the day the Wfz law took
|
|
|
51
51
|
effect (1-1-2019), i ask the prosecutor to prosecute the king for making the
|
|
52
52
|
commiting of the above mentioned crimes (killing, torture and impotent making)
|
|
53
53
|
possible.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
p.s.
|
|
57
|
-
|
|
58
|
-
#. ``OTP-CR-117/19`` entered Communications Register on ``4 march 2019``
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
# ruff: noqa: E402, E501
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
"Office of the Prosecutor's
|
|
8
|
+
"Office of the Prosecutor's 117th communication of the year 2019"
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
NAME = "genocide"
|
|
12
|
-
VERSION = "
|
|
12
|
+
VERSION = "181"
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
import os
|
|
@@ -99,33 +99,35 @@ intersphinx_cache_limit = 1
|
|
|
99
99
|
|
|
100
100
|
rst_prolog = '''.. image:: genocide.png
|
|
101
101
|
:width: 100%
|
|
102
|
-
:height: 2.
|
|
103
|
-
:target:
|
|
102
|
+
:height: 2.4cm
|
|
103
|
+
:target: manual.html
|
|
104
104
|
|
|
105
105
|
.. raw:: html
|
|
106
106
|
|
|
107
107
|
<center>
|
|
108
|
+
|
|
108
109
|
Elderly, Handicapped, Criminals, Wicked
|
|
110
|
+
|
|
111
|
+
.. raw:: html
|
|
112
|
+
|
|
109
113
|
</center>
|
|
110
114
|
|
|
111
115
|
'''
|
|
112
116
|
|
|
113
|
-
rst_epilog =
|
|
117
|
+
rst_epilog = """.. raw:: html
|
|
114
118
|
|
|
115
119
|
<br>
|
|
116
120
|
<center>
|
|
117
121
|
<b>
|
|
122
|
+
|
|
123
|
+
:ref:`reconsider <reconsider>` - :ref:`evidence <evidence>` - :ref:`guilty <guilty>` - :ref:`writings <writings>`
|
|
118
124
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
.. raw: html
|
|
125
|
+
.. raw:: html
|
|
123
126
|
|
|
124
127
|
</b>
|
|
125
128
|
</center>
|
|
126
129
|
|
|
127
|
-
|
|
128
|
-
|
|
130
|
+
"""
|
|
129
131
|
autosummary_generate = False
|
|
130
132
|
autodoc_default_flags = ['members', 'undoc-members', 'private-members', "imported-members"]
|
|
131
133
|
autodoc_member_order = 'groupwise'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
..
|
|
1
|
+
.. _reconsider:
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
.. raw:: html
|
|
@@ -9,11 +9,6 @@
|
|
|
9
9
|
.. title:: Reconsider
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
.. raw:: html
|
|
13
|
-
|
|
14
|
-
<center><b>RECONSIDER</b></center><br>
|
|
15
|
-
|
|
16
|
-
|
|
|
17
12
|
| **Information and Evidence Unit**
|
|
18
13
|
| **Office of the Prosecutor**
|
|
19
14
|
| **Post Office Box 19519**
|
|
@@ -70,16 +65,9 @@ prosecute the king for making the commiting of the above mentioned crimes
|
|
|
70
65
|
(killing, torture and impotent making) possible.
|
|
71
66
|
|
|
72
67
|
|
|
73
|
-
p.s.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
1) ``OTP-CR-117/19`` entered the Communications Register on ``4 march 2019``
|
|
77
|
-
|
|
78
|
-
|
|
79
68
|
.. toctree::
|
|
80
69
|
:hidden:
|
|
81
70
|
|
|
82
|
-
about
|
|
83
71
|
reconsider
|
|
84
72
|
writings
|
|
85
73
|
evidence
|
|
@@ -9,15 +9,11 @@
|
|
|
9
9
|
.. title:: Manual
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
.. raw:: html
|
|
13
|
-
|
|
14
|
-
<center><b>MANUAL</b></center><br>
|
|
15
|
-
|
|
16
12
|
|
|
17
13
|
**NAME**
|
|
18
14
|
|
|
19
15
|
|
|
20
|
-
``GENOCIDE`` -
|
|
16
|
+
``GENOCIDE`` - Since 4 march 2019
|
|
21
17
|
|
|
22
18
|
|
|
23
19
|
**SYNOPSIS**
|
|
@@ -53,7 +49,7 @@
|
|
|
53
49
|
|
|
54
50
|
Current status is a :ref:`"no basis to proceed"
|
|
55
51
|
<writings>` judgement of the prosecutor which
|
|
56
|
-
requires a :ref:`"basis to prosecute" <
|
|
52
|
+
requires a :ref:`"basis to prosecute" <reconsider>`
|
|
57
53
|
to have the king actually arrested.
|
|
58
54
|
|
|
59
55
|
|
|
@@ -180,3 +176,4 @@
|
|
|
180
176
|
**COPYRIGHT**
|
|
181
177
|
|
|
182
178
|
| ``GENOCIDE`` is Public Domain.
|
|
179
|
+
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# This file is placed in the Public Domain.
|
|
2
|
+
# pylint: disable=C0115,C0116,C0415,R0903,R0912,R0915,W0105,W0718,E0402
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
"main"
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
import sys
|
|
9
|
+
import termios
|
|
10
|
+
import time
|
|
11
|
+
|
|
12
|
+
from .persist import Config
|
|
13
|
+
from .runtime import Client, Event
|
|
14
|
+
from .runtime import errors, forever, later, parse, scan
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
cfg = Config()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Console(Client):
|
|
21
|
+
|
|
22
|
+
def announce(self, txt):
|
|
23
|
+
self.raw(txt)
|
|
24
|
+
|
|
25
|
+
def callback(self, evt):
|
|
26
|
+
Client.callback(self, evt)
|
|
27
|
+
evt.wait()
|
|
28
|
+
|
|
29
|
+
def poll(self):
|
|
30
|
+
evt = Event()
|
|
31
|
+
evt.txt = input("> ")
|
|
32
|
+
evt.type = "command"
|
|
33
|
+
return evt
|
|
34
|
+
|
|
35
|
+
def raw(self, txt):
|
|
36
|
+
print(txt)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def banner():
|
|
40
|
+
tme = time.ctime(time.time()).replace(" ", " ")
|
|
41
|
+
print(f"{cfg.name.upper()} since {tme}")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def wrap(func):
|
|
45
|
+
old = None
|
|
46
|
+
try:
|
|
47
|
+
old = termios.tcgetattr(sys.stdin.fileno())
|
|
48
|
+
except termios.error:
|
|
49
|
+
pass
|
|
50
|
+
try:
|
|
51
|
+
func()
|
|
52
|
+
except (KeyboardInterrupt, EOFError):
|
|
53
|
+
print("")
|
|
54
|
+
except Exception as ex:
|
|
55
|
+
later(ex)
|
|
56
|
+
finally:
|
|
57
|
+
if old:
|
|
58
|
+
termios.tcsetattr(sys.stdin.fileno(), termios.TCSADRAIN, old)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def wrapped():
|
|
62
|
+
wrap(main)
|
|
63
|
+
for line in errors():
|
|
64
|
+
print(line)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def main():
|
|
68
|
+
parse(cfg, " ".join(sys.argv[1:]))
|
|
69
|
+
if "v" in cfg.opts:
|
|
70
|
+
banner()
|
|
71
|
+
from .modules import face
|
|
72
|
+
for mod, thr in scan(face, init="i" in cfg.opts, disable=cfg.sets.dis):
|
|
73
|
+
if "v" in cfg.opts and "output" in dir(mod):
|
|
74
|
+
mod.output = print
|
|
75
|
+
if thr and "w" in cfg.opts:
|
|
76
|
+
thr.join()
|
|
77
|
+
csl = Console()
|
|
78
|
+
csl.start()
|
|
79
|
+
forever()
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
if __name__ == "__main__":
|
|
83
|
+
wrapped()
|
|
@@ -8,38 +8,20 @@
|
|
|
8
8
|
import sys
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
from .
|
|
12
|
-
from .
|
|
13
|
-
from .runtime import
|
|
11
|
+
from .persist import Config
|
|
12
|
+
from .runtime import Client, Commands, Event
|
|
13
|
+
from .runtime import command, errors, parse, scan, wrap
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
Cfg
|
|
16
|
+
Cfg = Config()
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class CLI(Client):
|
|
20
20
|
|
|
21
|
-
def __init__(self):
|
|
22
|
-
Client.__init__(self)
|
|
23
|
-
self.register("command", command)
|
|
24
|
-
|
|
25
21
|
def raw(self, txt):
|
|
26
22
|
print(txt)
|
|
27
23
|
|
|
28
24
|
|
|
29
|
-
def command(bot, evt):
|
|
30
|
-
parse(evt, evt.txt)
|
|
31
|
-
if "ident" in dir(bot):
|
|
32
|
-
evt.orig = bot.ident
|
|
33
|
-
func = Commands.cmds.get(evt.cmd, None)
|
|
34
|
-
if func:
|
|
35
|
-
try:
|
|
36
|
-
func(evt)
|
|
37
|
-
bot.display(evt)
|
|
38
|
-
except Exception as ex:
|
|
39
|
-
later(ex)
|
|
40
|
-
evt.ready()
|
|
41
|
-
|
|
42
|
-
|
|
43
25
|
def wrapped():
|
|
44
26
|
wrap(main)
|
|
45
27
|
for line in errors():
|
|
@@ -49,7 +31,7 @@ def wrapped():
|
|
|
49
31
|
def srv(event):
|
|
50
32
|
import getpass
|
|
51
33
|
name = getpass.getuser()
|
|
52
|
-
event.reply(TXT % (
|
|
34
|
+
event.reply(TXT % (Cfg.name.upper(), name, name, name, Cfg.name))
|
|
53
35
|
|
|
54
36
|
|
|
55
37
|
def main():
|
|
@@ -9,7 +9,7 @@ import os
|
|
|
9
9
|
import sys
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
from .persist import
|
|
12
|
+
from .persist import Config, pidfile, pidname
|
|
13
13
|
from .runtime import errors, forever, privileges, scan, wrap
|
|
14
14
|
|
|
15
15
|
|
|
@@ -42,7 +42,7 @@ def wrapped():
|
|
|
42
42
|
def main():
|
|
43
43
|
daemon(True)
|
|
44
44
|
privileges()
|
|
45
|
-
pidfile(pidname(
|
|
45
|
+
pidfile(pidname(Config.name))
|
|
46
46
|
from .modules import face
|
|
47
47
|
scan(face, init=True)
|
|
48
48
|
forever()
|
|
@@ -16,13 +16,13 @@ import time
|
|
|
16
16
|
import _thread
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
from ..object
|
|
20
|
-
from ..persist
|
|
21
|
-
from ..
|
|
19
|
+
from ..object import Object, edit, format, keys
|
|
20
|
+
from ..persist import Cache, ident, last, write
|
|
21
|
+
from ..persist import Config as Main
|
|
22
|
+
from ..runtime import Commands, Event, Reactor, later, launch, parse
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
IGNORE = ["PING", "PONG", "PRIVMSG"]
|
|
25
|
-
NAME = Object.__module__.rsplit(".", maxsplit=2)[-2]
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
output = None
|
|
@@ -47,19 +47,18 @@ def init():
|
|
|
47
47
|
|
|
48
48
|
class Config(Object):
|
|
49
49
|
|
|
50
|
-
channel = f'#{
|
|
50
|
+
channel = f'#{Main.name}'
|
|
51
51
|
commands = True
|
|
52
52
|
control = '!'
|
|
53
|
-
|
|
54
|
-
nick = NAME
|
|
53
|
+
nick = Main.name
|
|
55
54
|
password = ""
|
|
56
55
|
port = 6667
|
|
57
|
-
realname =
|
|
56
|
+
realname = Main.name
|
|
58
57
|
sasl = False
|
|
59
58
|
server = 'localhost'
|
|
60
59
|
servermodes = ''
|
|
61
60
|
sleep = 60
|
|
62
|
-
username =
|
|
61
|
+
username = Main.name
|
|
63
62
|
users = False
|
|
64
63
|
|
|
65
64
|
def __init__(self):
|
|
@@ -101,7 +100,7 @@ class Output:
|
|
|
101
100
|
|
|
102
101
|
@staticmethod
|
|
103
102
|
def extend(channel, txtlist):
|
|
104
|
-
if channel not in Output.cache:
|
|
103
|
+
if channel not in dir(Output.cache):
|
|
105
104
|
Output.cache[channel] = []
|
|
106
105
|
chanlist = getattr(Output.cache, channel)
|
|
107
106
|
chanlist.extend(txtlist)
|
|
@@ -118,7 +117,7 @@ class Output:
|
|
|
118
117
|
return txt
|
|
119
118
|
|
|
120
119
|
def oput(self, channel, txt):
|
|
121
|
-
if channel and channel not in Output.cache:
|
|
120
|
+
if channel and channel not in dir(Output.cache):
|
|
122
121
|
setattr(Output.cache, channel, [])
|
|
123
122
|
self.oqueue.put_nowait((channel, txt))
|
|
124
123
|
|
|
@@ -145,7 +144,7 @@ class Output:
|
|
|
145
144
|
|
|
146
145
|
@staticmethod
|
|
147
146
|
def size(chan):
|
|
148
|
-
if chan in Output.cache:
|
|
147
|
+
if chan in dir(Output.cache):
|
|
149
148
|
return len(getattr(Output.cache, chan, []))
|
|
150
149
|
return 0
|
|
151
150
|
|
|
@@ -557,7 +556,7 @@ def cb_001(bot, evt):
|
|
|
557
556
|
|
|
558
557
|
def cb_notice(bot, evt):
|
|
559
558
|
if evt.txt.startswith('VERSION'):
|
|
560
|
-
txt = f'\001VERSION {
|
|
559
|
+
txt = f'\001VERSION {Main.name.upper()} 140 - {bot.cfg.username}\001'
|
|
561
560
|
bot.docommand('NOTICE', evt.channel, txt)
|
|
562
561
|
|
|
563
562
|
|
|
@@ -616,8 +615,7 @@ def mre(event):
|
|
|
616
615
|
return
|
|
617
616
|
for _x in range(3):
|
|
618
617
|
txt = Output.gettxt(event.channel)
|
|
619
|
-
|
|
620
|
-
event.reply(txt)
|
|
618
|
+
event.reply(txt)
|
|
621
619
|
size = IRC.size(event.channel)
|
|
622
620
|
event.reply(f'{size} more in cache')
|
|
623
621
|
|
|
@@ -10,30 +10,6 @@ import json
|
|
|
10
10
|
|
|
11
11
|
class Object:
|
|
12
12
|
|
|
13
|
-
def __contains__(self, key):
|
|
14
|
-
return key in dir(self)
|
|
15
|
-
|
|
16
|
-
def __getstate__(self):
|
|
17
|
-
pass
|
|
18
|
-
|
|
19
|
-
def __iter__(self):
|
|
20
|
-
return iter(self.__dict__)
|
|
21
|
-
|
|
22
|
-
def __len__(self):
|
|
23
|
-
return len(self.__dict__)
|
|
24
|
-
|
|
25
|
-
def __str__(self):
|
|
26
|
-
return str(self.__dict__)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class Obj(Object):
|
|
30
|
-
|
|
31
|
-
def __getattr__(self, key):
|
|
32
|
-
return self.__dict__.get(key, "")
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class Config(Obj):
|
|
36
|
-
|
|
37
13
|
pass
|
|
38
14
|
|
|
39
15
|
|
|
@@ -114,62 +90,6 @@ def match(obj, txt):
|
|
|
114
90
|
yield key
|
|
115
91
|
|
|
116
92
|
|
|
117
|
-
def parse(obj, txt=None) -> None:
|
|
118
|
-
if txt is None:
|
|
119
|
-
txt = ""
|
|
120
|
-
args = []
|
|
121
|
-
obj.args = []
|
|
122
|
-
obj.cmd = ""
|
|
123
|
-
obj.gets = Obj()
|
|
124
|
-
obj.hasmods = False
|
|
125
|
-
obj.index = None
|
|
126
|
-
obj.mod = ""
|
|
127
|
-
obj.opts = ""
|
|
128
|
-
obj.result = []
|
|
129
|
-
obj.sets = Obj()
|
|
130
|
-
obj.txt = txt or ""
|
|
131
|
-
obj.otxt = obj.txt
|
|
132
|
-
_nr = -1
|
|
133
|
-
for spli in obj.otxt.split():
|
|
134
|
-
if spli.startswith("-"):
|
|
135
|
-
try:
|
|
136
|
-
obj.index = int(spli[1:])
|
|
137
|
-
except ValueError:
|
|
138
|
-
obj.opts += spli[1:]
|
|
139
|
-
continue
|
|
140
|
-
if "==" in spli:
|
|
141
|
-
key, value = spli.split("==", maxsplit=1)
|
|
142
|
-
val = getattr(obj.gets, key, None)
|
|
143
|
-
if val:
|
|
144
|
-
value = val + "," + value
|
|
145
|
-
setattr(obj.gets, key, value)
|
|
146
|
-
continue
|
|
147
|
-
if "=" in spli:
|
|
148
|
-
key, value = spli.split("=", maxsplit=1)
|
|
149
|
-
if key == "mod":
|
|
150
|
-
obj.hasmods = True
|
|
151
|
-
if obj.mod:
|
|
152
|
-
obj.mod += f",{value}"
|
|
153
|
-
else:
|
|
154
|
-
obj.mod = value
|
|
155
|
-
continue
|
|
156
|
-
setattr(obj.sets, key, value)
|
|
157
|
-
continue
|
|
158
|
-
_nr += 1
|
|
159
|
-
if _nr == 0:
|
|
160
|
-
obj.cmd = spli
|
|
161
|
-
continue
|
|
162
|
-
args.append(spli)
|
|
163
|
-
if args:
|
|
164
|
-
obj.args = args
|
|
165
|
-
obj.txt = obj.cmd or ""
|
|
166
|
-
obj.rest = " ".join(obj.args)
|
|
167
|
-
obj.txt = obj.cmd + " " + obj.rest
|
|
168
|
-
else:
|
|
169
|
-
obj.txt = obj.cmd or ""
|
|
170
|
-
return obj
|
|
171
|
-
|
|
172
|
-
|
|
173
93
|
def search(obj, selector, matching=None):
|
|
174
94
|
res = False
|
|
175
95
|
if not selector:
|
|
@@ -269,22 +189,3 @@ def dump(*args, **kw):
|
|
|
269
189
|
def dumps(*args, **kw):
|
|
270
190
|
kw["cls"] = ObjectEncoder
|
|
271
191
|
return json.dumps(*args, **kw)
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
def __dir__():
|
|
275
|
-
return (
|
|
276
|
-
'Config',
|
|
277
|
-
'Object',
|
|
278
|
-
'Obj',
|
|
279
|
-
'construct',
|
|
280
|
-
'dumps',
|
|
281
|
-
'edit',
|
|
282
|
-
'keys',
|
|
283
|
-
'loads',
|
|
284
|
-
'items',
|
|
285
|
-
'match',
|
|
286
|
-
'parse',
|
|
287
|
-
'search',
|
|
288
|
-
'update',
|
|
289
|
-
'values'
|
|
290
|
-
)
|
|
@@ -17,9 +17,6 @@ import _thread
|
|
|
17
17
|
from .object import Object, dump, load, search, update
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
NAME = Object.__module__.rsplit(".", maxsplit=2)[-2]
|
|
21
|
-
|
|
22
|
-
|
|
23
20
|
cachelock = _thread.allocate_lock()
|
|
24
21
|
disklock = _thread.allocate_lock()
|
|
25
22
|
findlock = _thread.allocate_lock()
|
|
@@ -27,10 +24,17 @@ lock = _thread.allocate_lock()
|
|
|
27
24
|
p = os.path.join
|
|
28
25
|
|
|
29
26
|
|
|
30
|
-
class
|
|
27
|
+
class Obj(Object):
|
|
28
|
+
|
|
29
|
+
def __getattr__(self, key):
|
|
30
|
+
return self.__dict__.get(key, "")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Config(Obj):
|
|
31
34
|
|
|
32
35
|
fqns = []
|
|
33
|
-
|
|
36
|
+
name = "obz"
|
|
37
|
+
wdr = os.path.expanduser("~/.{Config.name}")
|
|
34
38
|
|
|
35
39
|
|
|
36
40
|
def long(name):
|
|
@@ -44,18 +48,18 @@ def long(name):
|
|
|
44
48
|
|
|
45
49
|
|
|
46
50
|
def modname():
|
|
47
|
-
return p(
|
|
51
|
+
return p(Config.wdr, "mods")
|
|
48
52
|
|
|
49
53
|
|
|
50
54
|
def pidname(name):
|
|
51
|
-
return p(
|
|
55
|
+
return p(Config.wdr, f"{name}.pid")
|
|
52
56
|
|
|
53
57
|
|
|
54
58
|
def store(pth=""):
|
|
55
|
-
stor = p(
|
|
59
|
+
stor = p(Config.wdr, "store", "")
|
|
56
60
|
if not os.path.exists(stor):
|
|
57
61
|
skel()
|
|
58
|
-
return p(
|
|
62
|
+
return p(Config.wdr, "store", pth)
|
|
59
63
|
|
|
60
64
|
|
|
61
65
|
class Cache:
|
|
@@ -186,7 +190,7 @@ def pidfile(filename):
|
|
|
186
190
|
|
|
187
191
|
|
|
188
192
|
def skel():
|
|
189
|
-
stor = p(
|
|
193
|
+
stor = p(Config.wdr, "store", "")
|
|
190
194
|
path = pathlib.Path(stor)
|
|
191
195
|
path.mkdir(parents=True, exist_ok=True)
|
|
192
196
|
return path
|
|
@@ -278,7 +282,8 @@ def sync(obj, pth):
|
|
|
278
282
|
|
|
279
283
|
def __dir__():
|
|
280
284
|
return (
|
|
281
|
-
'
|
|
285
|
+
'Config',
|
|
286
|
+
'Obj',
|
|
282
287
|
'find',
|
|
283
288
|
'fetch',
|
|
284
289
|
'last',
|
|
@@ -15,6 +15,21 @@ import types
|
|
|
15
15
|
import _thread
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
class Default:
|
|
19
|
+
|
|
20
|
+
def __contains__(self, key):
|
|
21
|
+
return key in dir(self)
|
|
22
|
+
|
|
23
|
+
def __getattr__(self, key):
|
|
24
|
+
return self.__dict__.get(key, "")
|
|
25
|
+
|
|
26
|
+
def __iter__(self):
|
|
27
|
+
return iter(self.__dict__)
|
|
28
|
+
|
|
29
|
+
def __len__(self):
|
|
30
|
+
return len(self.__dict__)
|
|
31
|
+
|
|
32
|
+
|
|
18
33
|
class Errors:
|
|
19
34
|
|
|
20
35
|
errors = []
|
|
@@ -57,6 +72,20 @@ class Commands:
|
|
|
57
72
|
Commands.add(cmdz)
|
|
58
73
|
|
|
59
74
|
|
|
75
|
+
def command(bot, evt):
|
|
76
|
+
parse(evt, evt.txt)
|
|
77
|
+
if "ident" in dir(bot):
|
|
78
|
+
evt.orig = bot.ident
|
|
79
|
+
func = Commands.cmds.get(evt.cmd, None)
|
|
80
|
+
if func:
|
|
81
|
+
try:
|
|
82
|
+
func(evt)
|
|
83
|
+
bot.display(evt)
|
|
84
|
+
except Exception as ex:
|
|
85
|
+
later(ex)
|
|
86
|
+
evt.ready()
|
|
87
|
+
|
|
88
|
+
|
|
60
89
|
def modloop(*pkgs, disable=""):
|
|
61
90
|
for pkg in pkgs:
|
|
62
91
|
for modname in dir(pkg):
|
|
@@ -67,8 +96,6 @@ def modloop(*pkgs, disable=""):
|
|
|
67
96
|
yield getattr(pkg, modname)
|
|
68
97
|
|
|
69
98
|
|
|
70
|
-
|
|
71
|
-
|
|
72
99
|
def scan(*pkgs, init=False, disable=""):
|
|
73
100
|
result = []
|
|
74
101
|
for mod in modloop(*pkgs, disable=disable):
|
|
@@ -160,6 +187,10 @@ class Reactor:
|
|
|
160
187
|
|
|
161
188
|
class Client(Reactor):
|
|
162
189
|
|
|
190
|
+
def __init__(self):
|
|
191
|
+
Reactor.__init__(self)
|
|
192
|
+
self.register("command", command)
|
|
193
|
+
|
|
163
194
|
def display(self, evt):
|
|
164
195
|
for txt in evt.result:
|
|
165
196
|
self.raw(txt)
|
|
@@ -193,18 +224,16 @@ class BufferedClient(Client, Output):
|
|
|
193
224
|
Output.stop(self)
|
|
194
225
|
|
|
195
226
|
|
|
196
|
-
class Event:
|
|
227
|
+
class Event(Default):
|
|
197
228
|
|
|
198
229
|
def __init__(self):
|
|
230
|
+
Default.__init__(self)
|
|
199
231
|
self._ready = threading.Event()
|
|
200
232
|
self._thr = None
|
|
201
233
|
self.result = []
|
|
202
234
|
self.type = "event"
|
|
203
235
|
self.txt = ""
|
|
204
236
|
|
|
205
|
-
def __getattr__(self, key):
|
|
206
|
-
return self.__dict__.get(key, "")
|
|
207
|
-
|
|
208
237
|
def __str__(self):
|
|
209
238
|
return str(self.__dict__)
|
|
210
239
|
|
|
@@ -216,8 +245,64 @@ class Event:
|
|
|
216
245
|
|
|
217
246
|
def wait(self):
|
|
218
247
|
self._ready.wait()
|
|
219
|
-
|
|
220
|
-
|
|
248
|
+
if self._thr:
|
|
249
|
+
self._thr.join()
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def parse(obj, txt=None) -> None:
|
|
253
|
+
if txt is None:
|
|
254
|
+
txt = ""
|
|
255
|
+
args = []
|
|
256
|
+
obj.args = []
|
|
257
|
+
obj.cmd = ""
|
|
258
|
+
obj.gets = Default()
|
|
259
|
+
obj.hasmods = False
|
|
260
|
+
obj.index = None
|
|
261
|
+
obj.mod = ""
|
|
262
|
+
obj.opts = ""
|
|
263
|
+
obj.result = []
|
|
264
|
+
obj.sets = Default()
|
|
265
|
+
obj.txt = txt or ""
|
|
266
|
+
obj.otxt = obj.txt
|
|
267
|
+
_nr = -1
|
|
268
|
+
for spli in obj.otxt.split():
|
|
269
|
+
if spli.startswith("-"):
|
|
270
|
+
try:
|
|
271
|
+
obj.index = int(spli[1:])
|
|
272
|
+
except ValueError:
|
|
273
|
+
obj.opts += spli[1:]
|
|
274
|
+
continue
|
|
275
|
+
if "==" in spli:
|
|
276
|
+
key, value = spli.split("==", maxsplit=1)
|
|
277
|
+
val = getattr(obj.gets, key, None)
|
|
278
|
+
if val:
|
|
279
|
+
value = val + "," + value
|
|
280
|
+
setattr(obj.gets, key, value)
|
|
281
|
+
continue
|
|
282
|
+
if "=" in spli:
|
|
283
|
+
key, value = spli.split("=", maxsplit=1)
|
|
284
|
+
if key == "mod":
|
|
285
|
+
obj.hasmods = True
|
|
286
|
+
if obj.mod:
|
|
287
|
+
obj.mod += f",{value}"
|
|
288
|
+
else:
|
|
289
|
+
obj.mod = value
|
|
290
|
+
continue
|
|
291
|
+
setattr(obj.sets, key, value)
|
|
292
|
+
continue
|
|
293
|
+
_nr += 1
|
|
294
|
+
if _nr == 0:
|
|
295
|
+
obj.cmd = spli
|
|
296
|
+
continue
|
|
297
|
+
args.append(spli)
|
|
298
|
+
if args:
|
|
299
|
+
obj.args = args
|
|
300
|
+
obj.txt = obj.cmd or ""
|
|
301
|
+
obj.rest = " ".join(obj.args)
|
|
302
|
+
obj.txt = obj.cmd + " " + obj.rest
|
|
303
|
+
else:
|
|
304
|
+
obj.txt = obj.cmd or ""
|
|
305
|
+
return obj
|
|
221
306
|
|
|
222
307
|
|
|
223
308
|
class Thread(threading.Thread):
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
"service"
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
from .persist import
|
|
8
|
+
from .persist import Config, pidfile, pidname
|
|
9
9
|
from .runtime import errors, forever, privileges, scan, wrap
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def service():
|
|
13
13
|
privileges()
|
|
14
|
-
pidfile(pidname(
|
|
14
|
+
pidfile(pidname(Config.name))
|
|
15
15
|
from .modules import face as mods
|
|
16
16
|
scan(mods, init=True)
|
|
17
17
|
forever()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: genocide
|
|
3
|
-
Version:
|
|
3
|
+
Version: 183
|
|
4
4
|
Summary: Elderly, Handicapped, Criminals, Wicked
|
|
5
5
|
Author-email: Bart Thate <bthate@dds.nl>
|
|
6
6
|
License: Public Domain
|
|
@@ -13,7 +13,6 @@ Classifier: Operating System :: Unix
|
|
|
13
13
|
Classifier: Programming Language :: Python
|
|
14
14
|
Classifier: Topic :: Utilities
|
|
15
15
|
Description-Content-Type: text/x-rst
|
|
16
|
-
Provides-Extra: dev
|
|
17
16
|
|
|
18
17
|
| **Information and Evidence Unit**
|
|
19
18
|
| **Office of the Prosecutor**
|
|
@@ -68,8 +67,3 @@ are poison at the time they voted for this law and the day the Wfz law took
|
|
|
68
67
|
effect (1-1-2019), i ask the prosecutor to prosecute the king for making the
|
|
69
68
|
commiting of the above mentioned crimes (killing, torture and impotent making)
|
|
70
69
|
possible.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
p.s.
|
|
74
|
-
|
|
75
|
-
#. ``OTP-CR-117/19`` entered Communications Register on ``4 march 2019``
|
|
@@ -7,7 +7,6 @@ docs/ECHAhaldol.png
|
|
|
7
7
|
docs/ECHAzyprexa.png
|
|
8
8
|
docs/OTP111.png
|
|
9
9
|
docs/OTP222.png
|
|
10
|
-
docs/about.rst
|
|
11
10
|
docs/ack.png
|
|
12
11
|
docs/ack3.png
|
|
13
12
|
docs/bevestigd.jpg
|
|
@@ -39,6 +38,7 @@ docs/pdf/EM_T07_OTP-CR-117_19_001.pdf
|
|
|
39
38
|
docs/pdf/Kamer.pdf
|
|
40
39
|
docs/pdf/Rome-Statute.pdf
|
|
41
40
|
docs/pdf/bevestigd.pdf
|
|
41
|
+
genocide/console.py
|
|
42
42
|
genocide/control.py
|
|
43
43
|
genocide/daemon.py
|
|
44
44
|
genocide/object.py
|
|
@@ -49,9 +49,7 @@ genocide.egg-info/PKG-INFO
|
|
|
49
49
|
genocide.egg-info/SOURCES.txt
|
|
50
50
|
genocide.egg-info/dependency_links.txt
|
|
51
51
|
genocide.egg-info/entry_points.txt
|
|
52
|
-
genocide.egg-info/requires.txt
|
|
53
52
|
genocide.egg-info/top_level.txt
|
|
54
|
-
genocide.egg-info/zip-safe
|
|
55
53
|
genocide/modules/__init__.py
|
|
56
54
|
genocide/modules/cmd.py
|
|
57
55
|
genocide/modules/err.py
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
requires = ["setuptools>=43.0.0", "wheel"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
|
+
|
|
5
6
|
[project]
|
|
6
7
|
name = "genocide"
|
|
7
8
|
description = "Elderly, Handicapped, Criminals, Wicked"
|
|
8
|
-
version = "
|
|
9
|
+
version = "183"
|
|
9
10
|
authors = [
|
|
10
11
|
{name = "Bart Thate", email = "bthate@dds.nl" },
|
|
11
12
|
]
|
|
@@ -19,17 +20,14 @@ classifiers=[
|
|
|
19
20
|
'Topic :: Utilities'
|
|
20
21
|
]
|
|
21
22
|
|
|
22
|
-
[project.optional-dependencies]
|
|
23
|
-
dev = []
|
|
24
|
-
|
|
25
23
|
|
|
26
24
|
[project.scripts]
|
|
27
25
|
"genocide" = "genocide.control:wrapped"
|
|
26
|
+
"genocidec" = "genocide.console:wrapped"
|
|
28
27
|
"genocided" = "genocide.daemon:main"
|
|
29
28
|
"genocides" = "genocide.service:wrapped"
|
|
30
29
|
|
|
31
30
|
|
|
32
|
-
|
|
33
31
|
[project.urls]
|
|
34
32
|
"home" = "https://pypi.org/project/genocide"
|
|
35
33
|
"bugs" = "https://github.com/bthate/genocide/issues"
|
|
@@ -41,13 +39,11 @@ packages = [
|
|
|
41
39
|
"genocide",
|
|
42
40
|
"genocide.modules",
|
|
43
41
|
]
|
|
44
|
-
zip-safe = true
|
|
45
42
|
|
|
46
43
|
|
|
47
44
|
[tool.setuptools.data-files]
|
|
48
45
|
"share/doc/genocide/docs" = [
|
|
49
46
|
"docs/ack.png",
|
|
50
|
-
"docs/about.rst",
|
|
51
47
|
"docs/ack3.png",
|
|
52
48
|
"docs/bevestigd.jpg",
|
|
53
49
|
"docs/bylaw.png",
|
|
@@ -101,11 +97,3 @@ zip-safe = true
|
|
|
101
97
|
"docs/_templates/mine.rst",
|
|
102
98
|
"docs/_templates/module.rst"
|
|
103
99
|
]
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
[tool.setuptools.exclude-package-data]
|
|
107
|
-
"*" = [
|
|
108
|
-
"env*",
|
|
109
|
-
"html*",
|
|
110
|
-
"test*"
|
|
111
|
-
]
|
genocide-181/docs/about.rst
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
.. _about:
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
.. raw:: html
|
|
5
|
-
|
|
6
|
-
<br><br>
|
|
7
|
-
|
|
8
|
-
.. title:: About
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
.. raw:: html
|
|
12
|
-
|
|
13
|
-
<center><b>ABOUT</b></center><br>
|
|
14
|
-
|
|
15
|
-
In 2018 i informed the king of the netherlands that what he calls
|
|
16
|
-
medicine in his "care" laws are not medicine but poison. Proof of
|
|
17
|
-
these medicine being poison were shown to the king, who's (personal)
|
|
18
|
-
kabinet wrote back that "the king took note of what i have written".
|
|
19
|
-
|
|
20
|
-
Using poison makes the care laws used in the netherlands to provide
|
|
21
|
-
care to elderly and handicapped, criminals and psychiatric patients
|
|
22
|
-
not care laws but genocide laws with which the king is killing groups
|
|
23
|
-
of the population by giving them poison instead of medicine in
|
|
24
|
-
the "care" they are forced to undergo.
|
|
25
|
-
|
|
26
|
-
I wrote the prosecutor asking for an arrest of the king (make him
|
|
27
|
-
stop), the prosecutor decided to call it a "no basis to proceed".
|
|
28
|
-
|
|
29
|
-
.. raw:: html
|
|
30
|
-
|
|
31
|
-
<br>
|
|
32
|
-
<center>
|
|
33
|
-
<b>
|
|
34
|
-
|
|
35
|
-
It requires a :ref:`basis to prosecute <reconsider>` of the prosecutor
|
|
36
|
-
to get the king in his cell and his genocide, thereby, stopped.
|
|
37
|
-
|
|
38
|
-
.. raw:: html
|
|
39
|
-
|
|
40
|
-
</center>
|
|
41
|
-
</b>
|
|
42
|
-
<br>
|
|
43
|
-
|
|
44
|
-
.. raw:: html
|
|
45
|
-
|
|
46
|
-
<center>
|
|
47
|
-
|
|
48
|
-
.. image:: skull3.png
|
|
49
|
-
:width: 90%
|
|
50
|
-
:target: manual.html
|
|
51
|
-
|
|
52
|
-
.. raw:: html
|
|
53
|
-
|
|
54
|
-
</center>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|