Hi,
1)
- "all modules without a get_init() should have one if they have a
.init()"
https://github.com/pygame/pygame/issues/616
3) yeah, there are tools that catch bugs with apps and log them for you.
cheers,
On Thu, Nov 8, 2018 at 8:15 PM DR0ID <dr0id@xxxxxxxxxx
<mailto:dr0id@xxxxxxxxxx>> wrote:
Hi there
1.) For one of my last projects I have been toying around with
pygame initialization. Instead of using pygame.init() and let it
initialize everything I went through the trouble to initialize
every module. Of course I didn't want to do it manually so I wrote
some code to do it for me. It worked, but I found it to be
inconsistent that certain modules have an init() method but no
get_init(). I would have expected that every module that has an
init() method also should have an get_init(). To have only the
init() method does not make much sense to me. Maybe this could go
into the next refactor version of pygame.
I have attached an snippet from my log indicating in which modules
the get_init() method is missing, see first paragraph in attached
'pygame_init_errors.txt' [1].
2.) I also found that a few modules that have an init() method
raised an error (see second paragraph in attached log). Not sure
if this is due to the way I initialize the modules or it is
because pygame was not compiled with that support. Or my
platform/hardware does not support those.
The code generating the log can be found in the attached
'context_init_pygame.py' [2].
3.) While writing this initialization code I started to wonder if
I should log the capabilities of the system it was running on. And
that would be my next question: I think it would help diagnose
problems if there were some sort of capabilities script that reads
the system/hardware and collects information about it. Maybe it
could later be uploaded to pygame.org <http://pygame.org> (or
somewhere else) anonymously for further analysis. Initialization
and capabilities are not the same but I'm unsure if would make
sense in case the initialization would fail to log the
capabilities. But then it should probably collect a bit more info
than only the display modes, mixer configurations and success full
pygame modules initialization (you probably want to know about the
OS and its version, hardware, etc). But then I'm pretty sure there
are already other tools doing that.
4.) Another thing I noticed in the docs is that certain modules
should (like scrap) or can (like mixer) be initialized after the
display module. Not sure how scrap it initialized when using
pygame.init() since this would be before scrap (maybe scrap has to
be initialized separately? I haven't tried.). This give me the
idea to write a PygameInitializer class (see attached
'pygame_initializer.py' [3] which is a proof of concept) that is a
context manager. So in code it would look like this:
---- code ----
def main():
logger.info <http://logger.info>("before pygame init")
with PygameInitializer(env_settings=(('SDL_VIDEO_CENTERED', '1'),))as pio:
pio.mixer_frequency =1 pio.mixer_size =1 pio.mixer_channels =1 pio.mixer_buffer_size =16 screen = pygame.display.set_mode((800, 600), pygame.DOUBLEBUF, 32)
logger.info <http://logger.info>("set display set mode")
# your application code here logger.info <http://logger.info>("application run!")
---- end code ----
But then I wondered if it is really worth going through all this
if there is pygame.init().
[1] log: https://bpaste.net/show/53dccc5bd3cf
---- log snippet ----
#### modules with missing get_init() method but has a init()
method -> no consistency for modules that have an init() method!! ####
2566 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame._freetype' from
'...\\python360\\lib\\site-packages\\pygame\\_freetype.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(258)]
2567 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame._freetype' from
'...\\python360\\lib\\site-packages\\pygame\\_freetype.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(259)]
2567 [MainProcess 15488 MainThread 9212]: ERROR missing get_init()
in module <module 'pygame._freetype' from
'...\\python360\\lib\\site-packages\\pygame\\_freetype.cp36-win_amd64.pyd'>:
module 'pygame._freetype' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(267)]
2569 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.base' from
'...\\python360\\lib\\site-packages\\pygame\\base.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(258)]
2569 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.base' from
'...\\python360\\lib\\site-packages\\pygame\\base.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(259)]
3177 [MainProcess 15488 MainThread 9212]: ERROR missing get_init()
in module <module 'pygame.base' from
'...\\python360\\lib\\site-packages\\pygame\\base.cp36-win_amd64.pyd'>:
module 'pygame.base' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(267)]
3198 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.fastevent' from
'...\\python360\\lib\\site-packages\\pygame\\fastevent.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(258)]
3199 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.fastevent' from
'...\\python360\\lib\\site-packages\\pygame\\fastevent.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(259)]
3200 [MainProcess 15488 MainThread 9212]: ERROR missing get_init()
in module <module 'pygame.fastevent' from
'...\\python360\\lib\\site-packages\\pygame\\fastevent.cp36-win_amd64.pyd'>:
module 'pygame.fastevent' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(267)]
3204 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.freetype' from
'...\\python360\\lib\\site-packages\\pygame\\freetype.py'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(258)]
3204 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.freetype' from
'...\\python360\\lib\\site-packages\\pygame\\freetype.py'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(259)]
3205 [MainProcess 15488 MainThread 9212]: ERROR missing get_init()
in module <module 'pygame.freetype' from
'...\\python360\\lib\\site-packages\\pygame\\freetype.py'>: module
'pygame.freetype' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(267)]
3219 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.midi' from
'...\\python360\\lib\\site-packages\\pygame\\midi.py'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(258)]
3219 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.midi' from
'...\\python360\\lib\\site-packages\\pygame\\midi.py'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(259)]
3222 [MainProcess 15488 MainThread 9212]: ERROR missing get_init()
in module <module 'pygame.midi' from
'...\\python360\\lib\\site-packages\\pygame\\midi.py'>: module
'pygame.midi' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(267)]
533054 [MainProcess 15488 MainThread 9212]: INFO initializing
module <module 'pygame.scrap' from
'...\\python360\\lib\\site-packages\\pygame\\scrap.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(258)]
533057 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.scrap' from
'...\\python360\\lib\\site-packages\\pygame\\scrap.cp36-win_amd64.pyd'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(259)]
533060 [MainProcess 15488 MainThread 9212]: ERROR missing
get_init() in module <module 'pygame.scrap' from
'...\\python360\\lib\\site-packages\\pygame\\scrap.cp36-win_amd64.pyd'>:
module 'pygame.scrap' has no attribute 'get_init'
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(267)]
#### modules throwing error on init() on my machine probably due
to missing hardware or missing code at compile time (?) ####
2560 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame._camera_vidcapture' from
'...\\python360\\lib\\site-packages\\pygame\\_camera_vidcapture.py'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(258)]
2561 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame._camera_vidcapture' from
'...\\python360\\lib\\site-packages\\pygame\\_camera_vidcapture.py'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(259)]
2565 [MainProcess 15488 MainThread 9212]: ERROR init() raised an
exceptions: No module named 'VideoCapture'
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(269)]
3179 [MainProcess 15488 MainThread 9212]: INFO initializing module
<module 'pygame.camera' from
'...\\python360\\lib\\site-packages\\pygame\\camera.py'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(258)]
3179 [MainProcess 15488 MainThread 9212]: INFO init() <module
'pygame.camera' from
'...\\python360\\lib\\site-packages\\pygame\\camera.py'>
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(259)]
3182 [MainProcess 15488 MainThread 9212]: ERROR init() raised an
exceptions: cannot import name '_camera'
[gamelib.context_init_pygame: _init_module in
context_init_pygame.py(269)]
---- end log snippet ----
[2] context_init_pygame.py: https://bpaste.net/show/937b80cb07f9
[3] pygame_initializer.py: https://bpaste.net/show/ee88d45ea10a
~DR0ID