Add support to install javascript libraries for just one. Don't truncate version string. Don't download required dependencies by default.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-04-05 07:20:36 -04:00
parent ae2297b0bd
commit c234a65a7b
2 changed files with 23 additions and 9 deletions

View File

@@ -68,14 +68,15 @@ class NPMPackage(object):
os.path.join(self.registry.module_directory, self.name)
)
def install(self):
def install(self, include_dependencies=False):
print 'Installing package: {}@{}'.format(self.name, self.version)
self._download()
self._extract()
if include_dependencies:
for name, version in self.metadata.get('dependencies', {}).items():
package = NPMPackage(registry=self.registry, name=name, version=version[1:])
package = NPMPackage(registry=self.registry, name=name, version=version)
package.install()
@property
@@ -95,7 +96,8 @@ class NPMPackage(object):
@property
def metadata(self):
if not hasattr(self, '_metadata'):
self._metadata = requests.get(url=self.get_url()).json()
response = requests.get(url=self.get_url())
self._metadata = response.json()
return self._metadata
def get_url(self):
@@ -134,12 +136,17 @@ class NPMRegistry(object):
self._read_package()
for name, version in self._package_data['dependencies'].items():
self._install_package(name=name, version=version[1:])
self._install_package(name=name, version=version)
class JSDependencyManager(object):
def install(self):
for app in apps.get_app_configs():
def install(self, app_name=None):
if app_name:
app_config_list = [apps.get_app_config(app_label=app_name)]
else:
app_config_list = apps.get_app_configs()
for app in app_config_list:
for root, dirs, files in os.walk(os.path.join(app.path, 'static')):
if 'package.json' in files and not any(map(lambda x: x in root, ['node_modules', 'packages', 'vendors'])):
print 'Installing JavaScript packages for app: {} - {}'.format(app.label, root)

View File

@@ -1,6 +1,7 @@
from __future__ import unicode_literals
from django.core import management
from django.utils.translation import ugettext_lazy as _
from ...javascript import JSDependencyManager
@@ -8,6 +9,12 @@ from ...javascript import JSDependencyManager
class Command(management.BaseCommand):
help = 'Install JavaScript dependencies.'
def add_arguments(self, parser):
parser.add_argument(
'--app', action='store', dest='app',
help=_('Process a specific app.'),
)
def handle(self, *args, **options):
js_manager = JSDependencyManager()
js_manager.install()
js_manager.install(app_name=options['app'])