Skip to content

Commit b29fa0a

Browse files
committed
Refactor component registration.
1 parent 61b0545 commit b29fa0a

File tree

2 files changed

+28
-40
lines changed

2 files changed

+28
-40
lines changed

dash/development/base_component.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,24 @@
33
import os
44
import inspect
55
import keyword
6+
import six
7+
8+
9+
class ComponentRegistry(type):
10+
"""Just importing a component lib will make it be loaded on the index"""
11+
12+
component_registry = set()
13+
14+
def __new__(mcs, name, bases, attributes):
15+
component = type.__new__(mcs, name, bases, attributes)
16+
if name == 'Component':
17+
# Don't do the base component
18+
return component
19+
20+
module = attributes['__module__'].split('.')[0]
21+
mcs.component_registry.add(module)
22+
23+
return component
624

725

826
def is_number(s):
@@ -53,7 +71,8 @@ def wrapper(*args, **kwargs):
5371
return wrapper
5472

5573

56-
class Component(collections.MutableMapping):
74+
@six.add_metaclass(ComponentRegistry)
75+
class Component:
5776
class _UNDEFINED(object):
5877
def __repr__(self):
5978
return 'undefined'

dash/resources.py

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from copy import copy
21
import json
32
import warnings
43
import os
4+
import sys
55

6-
from .development.base_component import Component
6+
from .development.base_component import ComponentRegistry
77

88

99
# pylint: disable=old-style-class
@@ -60,40 +60,15 @@ def _filter_resources(self, all_resources, dev_bundles=False):
6060

6161
def get_all_resources(self, dev_bundles=False):
6262
all_resources = []
63-
if self.config.infer_from_layout:
64-
all_resources = (
65-
self.get_inferred_resources() + self._resources
66-
)
67-
else:
68-
all_resources = self._resources
6963

70-
return self._filter_resources(all_resources, dev_bundles)
71-
72-
def get_inferred_resources(self):
73-
namespaces = []
74-
resources = []
75-
layout = self.layout
76-
77-
def extract_resource_from_component(component):
78-
# pylint: disable=protected-access
79-
if (isinstance(component, Component) and
80-
component._namespace not in namespaces):
64+
for mod in ComponentRegistry.component_registry:
65+
# take the component lib module and take the _resource_dist.
66+
m = sys.modules[mod]
67+
all_resources.extend(getattr(m, self.resource_name, []))
8168

82-
namespaces.append(component._namespace)
69+
all_resources.extend(self._resources)
8370

84-
if hasattr(component, self.resource_name):
85-
86-
component_resources = copy(
87-
getattr(component, self.resource_name)
88-
)
89-
for r in component_resources:
90-
r['namespace'] = component._namespace
91-
resources.extend(component_resources)
92-
93-
extract_resource_from_component(layout)
94-
for t in layout.traverse():
95-
extract_resource_from_component(t)
96-
return resources
71+
return self._filter_resources(all_resources, dev_bundles)
9772

9873

9974
class Css:
@@ -111,9 +86,6 @@ def append_css(self, stylesheet):
11186
def get_all_css(self):
11287
return self._resources.get_all_resources()
11388

114-
def get_inferred_css_dist(self):
115-
return self._resources.get_inferred_resources()
116-
11789
# pylint: disable=old-style-class, no-init, too-few-public-methods
11890
class config:
11991
infer_from_layout = True
@@ -134,9 +106,6 @@ def append_script(self, script):
134106
def get_all_scripts(self, dev_bundles=False):
135107
return self._resources.get_all_resources(dev_bundles)
136108

137-
def get_inferred_scripts(self):
138-
return self._resources.get_inferred_resources()
139-
140109
# pylint: disable=old-style-class, no-init, too-few-public-methods
141110
class config:
142111
infer_from_layout = True

0 commit comments

Comments
 (0)