This repository has been archived on 2025-01-28. You can view files and clone it, but cannot push or open issues or pull requests.
PyBitmessage-2025-01-28/mockenv/lib/python3.6/site-packages/kivy/tools/packaging/factory.py

104 lines
3.4 KiB
Python
Raw Normal View History

2022-07-22 12:43:59 +02:00
from __future__ import print_function
__all__ = ('FactoryBuild', )
from distutils.cmd import Command
import fnmatch
import os
import kivy
ignore_list = (
'kivy.lib',
'kivy.input.providers',
'kivy.input.postproc',
'kivy.modules',
'kivy.tools',
'kivy.parser',
'kivy.tests',
)
class FactoryBuild(Command):
description = 'Build the factory relation file (for factory.py)'
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
print('--------------------------------------------')
print('Building factory relation file')
print('--------------------------------------------')
root_dir = os.path.dirname(kivy.__file__)
filename = os.path.join(root_dir, 'factory_registers.py')
with open(filename, 'w') as fd:
fd.close()
# ensure we don't have any thing like doc running
symbols = []
for root, dirnames, filenames in os.walk(root_dir):
if not root.startswith(root_dir):
raise Exception('Directory should start with the kivy'
'directory')
root = 'kivy' + root[len(root_dir):].replace(os.path.sep, '.')
for filename in fnmatch.filter(filenames, '*.[ps][yo]'):
module = '%s.%s' % (root, filename[:-3])
# check ignore list first
ignore = False
for ignore in ignore_list:
if module.startswith(ignore):
ignore = True
break
if ignore:
# print('<<< ignored (ignore list)')
continue
# special case, core providers
if root.startswith('kivy.core.'):
if not root.endswith('__init__.py'):
# print('<<< ignored (not a __init__.py)')
continue
print('>>>', module, '::', end=' ')
try:
m = __import__(name=module, fromlist='.')
except Exception as e:
print()
print('ERROR:', e)
continue
if not hasattr(m, '__all__'):
print()
continue
for symbol in getattr(m, '__all__'):
if symbol.startswith('_'):
continue
attr = getattr(m, symbol)
if type(attr) not in (type, type):
continue
symbols.append((symbol, module))
print(symbol, end=' ')
print()
print()
print('--------------------------------------------')
print('Found %d symbols, generating file' % len(symbols))
print('--------------------------------------------')
filename = os.path.join(root_dir, 'factory_registers.py')
with open(filename, 'w') as fd:
fd.write('# Auto-generated file by setup.py build_factory\n')
fd.write('\n')
fd.write('from kivy.factory import Factory\n')
fd.write('\n')
fd.write('r = Factory.register\n')
for x in symbols:
fd.write("r('%s', module='%s')\n" % x)
print('File written at', filename)