From d208936837438509fbcec54861f622ce94826e49 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 11 Jan 2019 20:34:53 -0500 Subject: [PATCH 01/36] fixes to address default values, support for source maps --- dash/development/_r_components_generation.py | 68 +++++++------------- 1 file changed, 22 insertions(+), 46 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index b18b8e8ef2..10e90bec48 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -14,20 +14,21 @@ # Declaring longer string templates as globals to improve # readability, make method logic clearer to anyone inspecting # code below -r_component_string = '''{prefix}{name} <- function(..., {default_argtext}) {{ +r_component_string = '''{prefix}{name} <- function({default_argtext}, ...) {{ + wildcard_names = names(list(...)) + component <- list( - props = list({default_paramtext}), + props = list({default_paramtext}, ...), type = '{name}', namespace = '{project_shortname}', - propNames = c({prop_names}), + propNames = c({prop_names}, wildcard_names), package = '{package_name}' ) component$props <- filter_null(component$props) - component <- append_wildcard_props(component, wildcards = {default_wildcards}, ...) - - structure(component, class = c('dash_component', 'list')) + + structure(component, class = c('dash_component', 'list')) }}''' # noqa:E501 # the following strings represent all the elements in an object @@ -62,7 +63,7 @@ {description} }} \\usage{{ -{prefix}{name}(..., {default_argtext}) +{prefix}{name}({default_argtext}, ...) }} \\arguments{{ {item_text} @@ -116,42 +117,14 @@ ''' -# This is an initial attempt at resolving type inconsistencies -# between R and JSON. -def props_to_r_type(current_prop): - object_type = current_prop['type']['name'] - if 'defaultValue' in current_prop and object_type == 'string': - if "\"" in current_prop['defaultValue']['value']: - argument = current_prop['defaultValue']['value'] - else: - argument = "{}".format(current_prop['defaultValue']['value']) - elif object_type == 'custom' and 'raw' in current_prop['type']: - argument = current_prop['defaultValue'].get('value', 'numeric()') - elif object_type == 'enum': - argument = current_prop.get('defaultValue', {}).get('value', 'NULL') - elif 'defaultValue' in current_prop and object_type == 'object': - argument = 'list()' - elif 'defaultValue' in current_prop and \ - current_prop['defaultValue']['value'] == '[]': - argument = 'list()' - elif object_type == 'number': - argument = current_prop['defaultValue'].get('value', 'NULL') - elif object_type == 'bool': - argument = current_prop['defaultValue'].get('value') - if argument: - argument = 'TRUE' - else: - argument = 'logical()' - else: - argument = 'NULL' - return argument - - # pylint: disable=R0914 def generate_class_string(name, props, project_shortname, prefix): # Here we convert from snake case to camel case package_name = snake_case_to_camel_case(project_shortname) + # Ensure props are ordered with children first + props = reorder_props(props=props) + prop_keys = props.keys() default_paramtext = '' @@ -187,8 +160,6 @@ def generate_class_string(name, props, project_shortname, prefix): prop_keys.remove(p) default_argtext += ", ".join( - '{}={}'.format(p, props_to_r_type(props[p])) - if 'defaultValue' in props[p] else '{}=NULL'.format(p) for p in prop_keys ) @@ -197,18 +168,18 @@ def generate_class_string(name, props, project_shortname, prefix): default_paramtext += ", ".join( '{}={}'.format(p, p) if p != "children" else - '{}=c(children, assert_valid_children(..., wildcards = {}))' - .format(p, default_wildcards) + '{}=children' + .format(p) for p in prop_keys ) + return r_component_string.format(prefix=prefix, name=name, default_argtext=default_argtext, default_paramtext=default_paramtext, project_shortname=project_shortname, prop_names=prop_names, - package_name=package_name, - default_wildcards=default_wildcards) + package_name=package_name) # pylint: disable=R0914 @@ -309,8 +280,6 @@ def write_help_file(name, props, description, prefix): prop_keys.remove(p) default_argtext += ", ".join( - '{}={}'.format(p, props_to_r_type(props[p])) - if 'defaultValue' in props[p] else '{}=NULL'.format(p) for p in prop_keys ) @@ -320,6 +289,8 @@ def write_help_file(name, props, description, prefix): for p in prop_keys ) + item_text += '\n\\item{...} wildcards of the form: `data-*` or `aria-*`' + file_path = os.path.join('man', file_name) with open(file_path, 'w') as f: f.write(help_string.format( @@ -336,6 +307,8 @@ def write_class_file(name, description, project_shortname, prefix=None): + props = reorder_props(props=props) + import_string =\ "# AUTO GENERATED FILE - DO NOT EDIT\n\n" class_string = generate_class_string( @@ -406,6 +379,9 @@ def write_js_metadata(project_shortname): for css in glob.glob('{}/*.css'.format(project_shortname)): shutil.copy(css, 'inst/lib/') + for sourcemap in glob.glob('{}/*.map'.format(project_shortname)): + shutil.copy(sourcemap, 'inst/lib/') + # pylint: disable=R0914 def generate_rpkg(pkg_data, From af56606b0047788e25ca9ff1e85acf1284ad1fe2 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Mon, 14 Jan 2019 13:21:44 -0500 Subject: [PATCH 02/36] adjust R package dependencies --- dash/development/_r_components_generation.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 10e90bec48..fb0456f36c 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -75,6 +75,8 @@ Version: {package_version} Authors @R: as.person(c({package_author})) Description: {package_description} +Depends: R (>= 3.5.0) +Imports: dashR, fiery, routr Suggests: testthat, roxygen2 License: {package_license} URL: {package_url} From 96c69c1c0d264c5d6f368136f7f14c2ff572d11f Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Mon, 14 Jan 2019 13:22:19 -0500 Subject: [PATCH 03/36] added file to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5230a5f149..d5d111ae88 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ dist npm-debug* /.tox .idea +package-lock.json From c8573addf6a26a29058554156c6363dcd6f7c945 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Mon, 14 Jan 2019 22:02:38 -0500 Subject: [PATCH 04/36] corrected error in help --- dash/development/_r_components_generation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index fb0456f36c..af57519c4f 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -291,7 +291,7 @@ def write_help_file(name, props, description, prefix): for p in prop_keys ) - item_text += '\n\\item{...} wildcards of the form: `data-*` or `aria-*`' + item_text += '\n\\item{...}{wildcards of the form: `data-*` or `aria-*`}' file_path = os.path.join('man', file_name) with open(file_path, 'w') as f: From 34837dfa72106d5da0263bb198b63354c0dc786a Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 15 Jan 2019 12:27:01 -0500 Subject: [PATCH 05/36] inserted whitespace as suggested by alexcjohnson --- dash/development/_r_components_generation.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index af57519c4f..d8b92cfe6e 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -57,14 +57,19 @@ help_string = '''% Auto-generated: do not edit by hand \\name{{{prefix}{name}}} + \\alias{{{prefix}{name}}} + \\title{{{name} component}} + \\description{{ {description} }} + \\usage{{ {prefix}{name}({default_argtext}, ...) }} + \\arguments{{ {item_text} }} @@ -291,7 +296,7 @@ def write_help_file(name, props, description, prefix): for p in prop_keys ) - item_text += '\n\\item{...}{wildcards of the form: `data-*` or `aria-*`}' + item_text += '\n\n\\item{...}{wildcards of the form: `data-*` or `aria-*`}' file_path = os.path.join('man', file_name) with open(file_path, 'w') as f: From e53cca2e7b61da0ba42c00c2244dbabc8894946c Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Thu, 17 Jan 2019 18:45:19 -0500 Subject: [PATCH 06/36] fixed deps naming issue for install_github --- dash/development/_r_components_generation.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index d8b92cfe6e..c345b4a857 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -39,14 +39,14 @@ frame_element_template = '''`{dep_name}` = structure(list(name = "{dep_name}", version = "{project_ver}", src = list(href = NULL, -file = "lib/"), meta = NULL, +file = "deps/"), meta = NULL, script = "{dep_rpp}", stylesheet = NULL, head = NULL, attachment = NULL, package = "{rpkgname}", all_files = FALSE), class = "html_dependency")''' frame_body_template = '''`{project_shortname}` = structure(list(name = "{project_shortname}", version = "{project_ver}", src = list(href = NULL, -file = "lib/"), meta = NULL, +file = "deps/"), meta = NULL, script = "{dep_rpp}", stylesheet = NULL, head = NULL, attachment = NULL, package = "{rpkgname}", all_files = FALSE), class = "html_dependency")''' # noqa:E501 @@ -81,7 +81,6 @@ Authors @R: as.person(c({package_author})) Description: {package_description} Depends: R (>= 3.5.0) -Imports: dashR, fiery, routr Suggests: testthat, roxygen2 License: {package_license} URL: {package_url} From 45a7dcdc405fe59fb35bc6d8b79a0ef9e8412bcc Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 10:50:22 -0500 Subject: [PATCH 07/36] added import for _get_metadata --- dash/development/component_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index fe3c82d1cf..d788ff28b9 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -16,7 +16,7 @@ from ._py_components_generation import generate_class_file from ._py_components_generation import generate_imports from ._py_components_generation import generate_classes_files - +from .component_loader import _get_metadata class _CombinedFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter): From 9fe81f404e2acb4b1767359e8fecca3a5c10371a Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 10:56:12 -0500 Subject: [PATCH 08/36] restored _get_metadata call for JSON imports --- dash/development/component_generator.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index d788ff28b9..e2616fb493 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -81,14 +81,11 @@ def generate_components(components_source, project_shortname, *generator_methods ) - with open(os.path.join(project_shortname, 'metadata.json'), 'w') as f: - json.dump(metadata, f) - generate_imports(project_shortname, components) if rprefix: - with open('package.json', 'r') as f: - pkg_data = json.load(f) + with open(os.path.join(project_shortname, 'metadata.json'), 'w') as f: + pkg_data = _get_metadata(f) generate_exports( project_shortname, components, metadata, pkg_data, prefix From 04d2b3f89a58b9c798bd04aa4eb1eae64475a2d7 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 10:58:38 -0500 Subject: [PATCH 09/36] fixed .Rbuildignore strings --- dash/development/_r_components_generation.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index c345b4a857..d451902631 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -104,9 +104,9 @@ # demo folder has special meaning in R # this should hopefully make it still # allow for the possibility to make R demos -demo/*.js -demo/*.html -demo/*.css +demo/.*\.js +demo/.*\.html +demo/.*\.css # ignore python files/folders setup.py From f54fee12a6742fcc1d74a185989c07a63254424d Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 11:03:05 -0500 Subject: [PATCH 10/36] fix for lone flake8 error --- dash/development/component_generator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index e2616fb493..050e56d691 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -18,6 +18,7 @@ from ._py_components_generation import generate_classes_files from .component_loader import _get_metadata + class _CombinedFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter): pass From 624c389d943900e52e7634bd05a14f5eb1e3b5a9 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 11:08:21 -0500 Subject: [PATCH 11/36] replaced second occurrence of json.loads() with _get_metadata --- dash/development/component_generator.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 050e56d691..173dd9803a 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -65,7 +65,7 @@ def generate_components(components_source, project_shortname, file=sys.stderr) sys.exit(1) - metadata = json.loads(out.decode()) + metadata = _get_metadata(out.decode()) generator_methods = [generate_class_file] if rprefix: @@ -85,8 +85,7 @@ def generate_components(components_source, project_shortname, generate_imports(project_shortname, components) if rprefix: - with open(os.path.join(project_shortname, 'metadata.json'), 'w') as f: - pkg_data = _get_metadata(f) + pkg_data = metadata generate_exports( project_shortname, components, metadata, pkg_data, prefix From 5498307f4b7bdb34092e2205ba6f1cf1d22b2033 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 11:09:38 -0500 Subject: [PATCH 12/36] addressed flake8 errors --- dash/development/component_generator.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 173dd9803a..3c55a33e8a 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -1,6 +1,5 @@ from __future__ import print_function -import json import sys import subprocess import shlex @@ -85,7 +84,7 @@ def generate_components(components_source, project_shortname, generate_imports(project_shortname, components) if rprefix: - pkg_data = metadata + pkg_data = metadata generate_exports( project_shortname, components, metadata, pkg_data, prefix From aa8c6dc3800ea38eff485006dac75e410d45b422 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 11:26:32 -0500 Subject: [PATCH 13/36] modifed metadata load path --- dash/development/component_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 3c55a33e8a..12616b4047 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -64,7 +64,7 @@ def generate_components(components_source, project_shortname, file=sys.stderr) sys.exit(1) - metadata = _get_metadata(out.decode()) + metadata = _get_metadata(os.path.join(project_shortname, 'metadata.json') generator_methods = [generate_class_file] if rprefix: From 74a4d5b66862aea5e5f19ce391d5c7021d47f7bb Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 11:28:39 -0500 Subject: [PATCH 14/36] replaced missing parenthesis --- dash/development/component_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 12616b4047..7fecd6b31a 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -64,7 +64,7 @@ def generate_components(components_source, project_shortname, file=sys.stderr) sys.exit(1) - metadata = _get_metadata(os.path.join(project_shortname, 'metadata.json') + metadata = _get_metadata(os.path.join(project_shortname, 'metadata.json')) generator_methods = [generate_class_file] if rprefix: From bcb3d48fbb40c3d1cf8c334062ab5747b67e9bd9 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 11:29:06 -0500 Subject: [PATCH 15/36] flake8 passes --- dash/development/component_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 7fecd6b31a..d5438bf160 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -64,7 +64,7 @@ def generate_components(components_source, project_shortname, file=sys.stderr) sys.exit(1) - metadata = _get_metadata(os.path.join(project_shortname, 'metadata.json')) + metadata = _get_metadata(os.path.join(project_shortname, 'metadata.json')) generator_methods = [generate_class_file] if rprefix: From 5a4c5fbe3c0f08aac2616fbc3d718a289e7c547e Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 14:30:47 -0500 Subject: [PATCH 16/36] attempting alternative approach for JSON>>OrderedDict --- dash/development/component_generator.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index d5438bf160..62ba8cf5cf 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -1,5 +1,6 @@ from __future__ import print_function +import json import sys import subprocess import shlex @@ -64,7 +65,7 @@ def generate_components(components_source, project_shortname, file=sys.stderr) sys.exit(1) - metadata = _get_metadata(os.path.join(project_shortname, 'metadata.json')) + metadata = json.loads(out.decode(), object_pairs_hook=OrderedDict) generator_methods = [generate_class_file] if rprefix: @@ -81,9 +82,15 @@ def generate_components(components_source, project_shortname, *generator_methods ) + with open(os.path.join(project_shortname, 'metadata.json'), 'w') as f: + json.dump(metadata, f, sort_keys=True) + generate_imports(project_shortname, components) if rprefix: + with open('package.json', 'r') as f: + pkg_data = json.load(f, object_pairs_hook=OrderedDict) + pkg_data = metadata generate_exports( From 3eca5be29f8964c33edd6d32ed93cae7e3cef2c0 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 14:37:29 -0500 Subject: [PATCH 17/36] corrected inst/lib to inst/deps --- dash/development/_r_components_generation.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index d451902631..81896fc689 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -376,17 +376,17 @@ def write_js_metadata(project_shortname): # now copy over all JS dependencies from the (Python) components dir # the inst/lib directory for the package won't exist on first call # create this directory if it is missing - if not os.path.exists('inst/lib'): - os.makedirs('inst/lib') + if not os.path.exists('inst/deps'): + os.makedirs('inst/deps') for javascript in glob.glob('{}/*.js'.format(project_shortname)): - shutil.copy(javascript, 'inst/lib/') + shutil.copy(javascript, 'inst/deps/') for css in glob.glob('{}/*.css'.format(project_shortname)): - shutil.copy(css, 'inst/lib/') + shutil.copy(css, 'inst/deps/') for sourcemap in glob.glob('{}/*.map'.format(project_shortname)): - shutil.copy(sourcemap, 'inst/lib/') + shutil.copy(sourcemap, 'inst/deps/') # pylint: disable=R0914 From be0646b175b61ca7aead460c8a2d429d53697d0a Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 14:47:18 -0500 Subject: [PATCH 18/36] removed import of _get_metadata --- dash/development/component_generator.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 62ba8cf5cf..dff51896a2 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -16,7 +16,6 @@ from ._py_components_generation import generate_class_file from ._py_components_generation import generate_imports from ._py_components_generation import generate_classes_files -from .component_loader import _get_metadata class _CombinedFormatter(argparse.ArgumentDefaultsHelpFormatter, From 85ada0c0a2dcf0c2d442e1efc63a8c5840725ec7 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 14:56:15 -0500 Subject: [PATCH 19/36] pylint and flake8 passing --- dash/development/component_generator.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index dff51896a2..aba2bbc897 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -1,4 +1,5 @@ from __future__ import print_function +from collections import OrderedDict import json import sys @@ -64,7 +65,7 @@ def generate_components(components_source, project_shortname, file=sys.stderr) sys.exit(1) - metadata = json.loads(out.decode(), object_pairs_hook=OrderedDict) + metadata = json.loads(out.decode(), object_pairs_hook=OrderedDict) generator_methods = [generate_class_file] if rprefix: @@ -89,7 +90,7 @@ def generate_components(components_source, project_shortname, if rprefix: with open('package.json', 'r') as f: pkg_data = json.load(f, object_pairs_hook=OrderedDict) - + pkg_data = metadata generate_exports( From d5fdc194ba275fc5b3bc87d0101cc2f262a2483f Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 15:19:05 -0500 Subject: [PATCH 20/36] removed spurious ref to metadata --- dash/development/component_generator.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index aba2bbc897..09a0857a8d 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -91,8 +91,6 @@ def generate_components(components_source, project_shortname, with open('package.json', 'r') as f: pkg_data = json.load(f, object_pairs_hook=OrderedDict) - pkg_data = metadata - generate_exports( project_shortname, components, metadata, pkg_data, prefix ) From c90d0e574f18d3933e47f1a779ae03f4e287b727 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 17:32:12 -0500 Subject: [PATCH 21/36] refactored prop_keys exclusion --- dash/development/_r_components_generation.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 81896fc689..a288f4cff3 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -159,11 +159,11 @@ def generate_class_string(name, props, project_shortname, prefix): default_wildcards = 'c({})'.format(default_wildcards) # Filter props to remove those we don't want to expose - for p in prop_keys: - if p.endswith("-*") \ - or p in r_keywords \ - or p in ['setProps', 'dashEvents', 'fireEvent']: - prop_keys.remove(p) + for item in prop_keys[:]: + if item.endswith('-*') \ + or item in r_keywords \ + or item in ['setProps']: + prop_keys.remove(item) default_argtext += ", ".join( '{}=NULL'.format(p) From 4e4a57afe78f30e4a07113789a1645d173ccfbc7 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 18 Jan 2019 18:13:01 -0500 Subject: [PATCH 22/36] pylint fix for indentation --- dash/development/_r_components_generation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index a288f4cff3..6e4be08315 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -163,7 +163,7 @@ def generate_class_string(name, props, project_shortname, prefix): if item.endswith('-*') \ or item in r_keywords \ or item in ['setProps']: - prop_keys.remove(item) + prop_keys.remove(item) default_argtext += ", ".join( '{}=NULL'.format(p) From c20ced1236c2c17e3c5a929c0e31a16dee1f580c Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Mon, 21 Jan 2019 14:41:04 -0500 Subject: [PATCH 23/36] edits to fully address :hocho: events --- dash/development/_r_components_generation.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 6e4be08315..d3d0512a22 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -142,7 +142,7 @@ def generate_class_string(name, props, project_shortname, prefix): '\'{}\''.format(p) for p in prop_keys if '*' not in p and - p not in ['setProps', 'dashEvents', 'fireEvent'] + p != 'setProps' + ['**kwargs'] ) # in R, we set parameters with no defaults to NULL @@ -162,7 +162,7 @@ def generate_class_string(name, props, project_shortname, prefix): for item in prop_keys[:]: if item.endswith('-*') \ or item in r_keywords \ - or item in ['setProps']: + or item == 'setProps': prop_keys.remove(item) default_argtext += ", ".join( @@ -279,11 +279,11 @@ def write_help_file(name, props, description, prefix): props = reorder_props(props=props) # Filter props to remove those we don't want to expose - for p in prop_keys: - if p.endswith("-*") \ - or p in r_keywords \ - or p in ['setProps', 'dashEvents', 'fireEvent']: - prop_keys.remove(p) + for item in prop_keys[:]: + if item.endswith('-*') \ + or item in r_keywords \ + or item == 'setProps': + prop_keys.remove(item) default_argtext += ", ".join( '{}=NULL'.format(p) @@ -460,7 +460,7 @@ def generate_rpkg(pkg_data, ) # generate the internal (not exported to the user) functions which - # supply the JavaScript dependencies to the htmlDependency package, + # supply the JavaScript dependencies to the htmltools package, # which is required by DashR (this avoids having to generate an # RData file from within Python, given the current package generation # workflow) From b9552ab44fc789796ff0ccc2c809b0adf627bef6 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Mon, 21 Jan 2019 14:42:38 -0500 Subject: [PATCH 24/36] updated .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index d5d111ae88..5230a5f149 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,3 @@ dist npm-debug* /.tox .idea -package-lock.json From 8aa3f2515cda460483c0da981e6e482212ef147a Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 22 Jan 2019 12:27:04 -0500 Subject: [PATCH 25/36] :left_right_arrow: added byteify fn to prevent str >> unicode :bug: modified prop_names address trailing whitespace :wrench: flake8 and pylint edits :shower: pylint edits --- dash/development/_r_components_generation.py | 5 ++--- dash/development/component_generator.py | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index d3d0512a22..485e4f6478 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -142,7 +142,7 @@ def generate_class_string(name, props, project_shortname, prefix): '\'{}\''.format(p) for p in prop_keys if '*' not in p and - p != 'setProps' + ['**kwargs'] + p not in ['setProps'] ) # in R, we set parameters with no defaults to NULL @@ -161,8 +161,7 @@ def generate_class_string(name, props, project_shortname, prefix): # Filter props to remove those we don't want to expose for item in prop_keys[:]: if item.endswith('-*') \ - or item in r_keywords \ - or item == 'setProps': + or item in r_keywords + ['setProps']: prop_keys.remove(item) default_argtext += ", ".join( diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 09a0857a8d..16cb3c093f 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -65,7 +65,9 @@ def generate_components(components_source, project_shortname, file=sys.stderr) sys.exit(1) - metadata = json.loads(out.decode(), object_pairs_hook=OrderedDict) + jsondata_unicode = json.loads(out.decode(), object_pairs_hook=OrderedDict) + metadata = byteify(jsondata_unicode) + generator_methods = [generate_class_file] if rprefix: @@ -89,7 +91,8 @@ def generate_components(components_source, project_shortname, if rprefix: with open('package.json', 'r') as f: - pkg_data = json.load(f, object_pairs_hook=OrderedDict) + jsondata_unicode = json.load(f, object_pairs_hook=OrderedDict) + pkg_data = byteify(jsondata_unicode) generate_exports( project_shortname, components, metadata, pkg_data, prefix @@ -133,5 +136,16 @@ def cli(): rprefix=args.r_prefix) +def byteify(input_object): + if isinstance(input_object, dict): + return {byteify(key): byteify(value) + for key, value in input_object.iteritems()} + elif isinstance(input_object, list): + return [byteify(element) for element in input_object] + elif isinstance(input_object, unicode): + return input_object.encode('utf-8') + return input_object + + if __name__ == '__main__': cli() From 5e251f08c2fe88119f2f09894da2631c471cc5d4 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 22 Jan 2019 13:24:54 -0500 Subject: [PATCH 26/36] :two::three: attempt to preserve version compatibility :shower: pylint edit :shower: flake8 edit :shower: flake8 edit :bug: fixed TypeError --- dash/development/_r_components_generation.py | 3 ++- dash/development/component_generator.py | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 485e4f6478..389dd47125 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -161,7 +161,8 @@ def generate_class_string(name, props, project_shortname, prefix): # Filter props to remove those we don't want to expose for item in prop_keys[:]: if item.endswith('-*') \ - or item in r_keywords + ['setProps']: + or item in r_keywords \ + or item == 'setProps': prop_keys.remove(item) default_argtext += ", ".join( diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 16cb3c093f..8fb0c036b9 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -136,13 +136,17 @@ def cli(): rprefix=args.r_prefix) +# pylint: disable=undefined-variable def byteify(input_object): if isinstance(input_object, dict): return {byteify(key): byteify(value) for key, value in input_object.iteritems()} elif isinstance(input_object, list): return [byteify(element) for element in input_object] - elif isinstance(input_object, unicode): + elif sys.version_info[0] >= 3: + if isinstance(input_object, str): + return input_object.encode('utf-8') + elif isinstance(input_object, unicode): # noqa:F821 return input_object.encode('utf-8') return input_object From 1aeb507f5ec9b6515ad10771c73da8d9e8339213 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 22 Jan 2019 15:17:44 -0500 Subject: [PATCH 27/36] :bug: revised byteify to use items() vs iteritems in :three: --- dash/development/component_generator.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 8fb0c036b9..9cb0fce575 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -139,6 +139,9 @@ def cli(): # pylint: disable=undefined-variable def byteify(input_object): if isinstance(input_object, dict): + if sys.version_info[0] >= 3: + return {byteify(key): byteify(value) + for key, value in input_object.items()} return {byteify(key): byteify(value) for key, value in input_object.iteritems()} elif isinstance(input_object, list): From a33469936c59cb9792e558ab593512e6a6ee87eb Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 22 Jan 2019 15:41:59 -0500 Subject: [PATCH 28/36] :hammer: rewrote code to only use byteify in :two: --- dash/development/component_generator.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 9cb0fce575..747d855a7f 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -66,7 +66,11 @@ def generate_components(components_source, project_shortname, sys.exit(1) jsondata_unicode = json.loads(out.decode(), object_pairs_hook=OrderedDict) - metadata = byteify(jsondata_unicode) + + if sys.version_info[0] >= 3: + metadata = jsondata_unicode + else: + metadata = byteify(jsondata_unicode) generator_methods = [generate_class_file] @@ -92,7 +96,10 @@ def generate_components(components_source, project_shortname, if rprefix: with open('package.json', 'r') as f: jsondata_unicode = json.load(f, object_pairs_hook=OrderedDict) - pkg_data = byteify(jsondata_unicode) + if sys.version_info[0] >= 3: + pkg_data = jsondata_unicode + else: + pkg_data = byteify(jsondata_unicode) generate_exports( project_shortname, components, metadata, pkg_data, prefix @@ -139,16 +146,10 @@ def cli(): # pylint: disable=undefined-variable def byteify(input_object): if isinstance(input_object, dict): - if sys.version_info[0] >= 3: - return {byteify(key): byteify(value) - for key, value in input_object.items()} return {byteify(key): byteify(value) for key, value in input_object.iteritems()} elif isinstance(input_object, list): return [byteify(element) for element in input_object] - elif sys.version_info[0] >= 3: - if isinstance(input_object, str): - return input_object.encode('utf-8') elif isinstance(input_object, unicode): # noqa:F821 return input_object.encode('utf-8') return input_object From 01b6d9d26731901593ffa1b20ccc6fab6fa6e02b Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 22 Jan 2019 16:16:55 -0500 Subject: [PATCH 29/36] prop_keys as list to handle TypeError for odict_keys in :three: --- dash/development/_r_components_generation.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 389dd47125..244bd255ac 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -131,7 +131,7 @@ def generate_class_string(name, props, project_shortname, prefix): # Ensure props are ordered with children first props = reorder_props(props=props) - prop_keys = props.keys() + prop_keys = list(props.keys()) default_paramtext = '' default_argtext = '' @@ -270,7 +270,6 @@ def write_help_file(name, props, description, prefix): """ file_name = '{}{}.Rd'.format(prefix, name) - prop_keys = props.keys() default_argtext = '' item_text = '' @@ -278,6 +277,8 @@ def write_help_file(name, props, description, prefix): # Ensure props are ordered with children first props = reorder_props(props=props) + prop_keys = list(props.keys()) + # Filter props to remove those we don't want to expose for item in prop_keys[:]: if item.endswith('-*') \ From 2251b30d55fcac2ec3c47cf0756bd903bef54348 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Fri, 25 Jan 2019 22:12:26 -0500 Subject: [PATCH 30/36] :rewind: do not set sort_keys --- dash/development/component_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/development/component_generator.py b/dash/development/component_generator.py index 747d855a7f..31f9d1ce9a 100644 --- a/dash/development/component_generator.py +++ b/dash/development/component_generator.py @@ -89,7 +89,7 @@ def generate_components(components_source, project_shortname, ) with open(os.path.join(project_shortname, 'metadata.json'), 'w') as f: - json.dump(metadata, f, sort_keys=True) + json.dump(metadata, f) generate_imports(project_shortname, components) From 9108f1e5bde2ecef722518b5ec908126f385597f Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Sat, 26 Jan 2019 02:28:23 -0500 Subject: [PATCH 31/36] :hammer: wildcards only available when props contain -* --- dash/development/_r_components_generation.py | 28 +++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 244bd255ac..0d48ada829 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -14,15 +14,13 @@ # Declaring longer string templates as globals to improve # readability, make method logic clearer to anyone inspecting # code below -r_component_string = '''{prefix}{name} <- function({default_argtext}, ...) {{ - - wildcard_names = names(list(...)) - +r_component_string = '''{prefix}{name} <- function({default_argtext}{wildcards}) {{ + {wildcard_declaration} component <- list( - props = list({default_paramtext}, ...), + props = list({default_paramtext}{wildcards}), type = '{name}', namespace = '{project_shortname}', - propNames = c({prop_names}, wildcard_names), + propNames = c({prop_names}{wildcard_names}), package = '{package_name}' ) @@ -133,6 +131,16 @@ def generate_class_string(name, props, project_shortname, prefix): prop_keys = list(props.keys()) + wildcards = '' + wildcard_declaration = '' + wildcard_names = '' + + if any('-*' in key for key in prop_keys): + wildcards = ', ...' + wildcard_declaration =\ + '\n wildcard_names = names(assert_valid_wildcards(...))\n' + wildcard_names = ', wildcard_names' + default_paramtext = '' default_argtext = '' default_wildcards = '' @@ -182,9 +190,12 @@ def generate_class_string(name, props, project_shortname, prefix): return r_component_string.format(prefix=prefix, name=name, default_argtext=default_argtext, + wildcards=wildcards, + wildcard_declaration=wildcard_declaration, default_paramtext=default_paramtext, project_shortname=project_shortname, prop_names=prop_names, + wildcard_names=wildcard_names, package_name=package_name) @@ -279,6 +290,8 @@ def write_help_file(name, props, description, prefix): prop_keys = list(props.keys()) + has_wildcards = any('-*' in key for key in prop_keys) + # Filter props to remove those we don't want to expose for item in prop_keys[:]: if item.endswith('-*') \ @@ -296,7 +309,8 @@ def write_help_file(name, props, description, prefix): for p in prop_keys ) - item_text += '\n\n\\item{...}{wildcards of the form: `data-*` or `aria-*`}' + if has_wildcards: + item_text += '\n\n\\item{...}{wildcards: `data-*` or `aria-*`}' file_path = os.path.join('man', file_name) with open(file_path, 'w') as f: From 38d693e6365e3b0eb85e1bb001cc6b474a9c0bfc Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 29 Jan 2019 03:56:53 -0500 Subject: [PATCH 32/36] updated R component generation to properly provide package help --- dash/development/_r_components_generation.py | 82 ++++++++++++++++---- 1 file changed, 68 insertions(+), 14 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 0d48ada829..bd379d2692 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -120,6 +120,26 @@ ^\.Rproj\.user$ ''' +pkghelp_stub = '''% Auto-generated: do not edit by hand +\\docType{{package}} +\\name{{{package_name}-package}} +\\alias{{{package_name}}} +\\title{{{pkg_help_header}}} +\\description{{ +{pkg_help_desc} +}} +\\seealso{{ +Useful links: +\\itemize{{ + \\item \\url{{https://github.com/plotly/{library_name}}} + \\item Report bugs at \\url{{https://github.com/plotly/{library_name}/issues}} +}} +}} +\\author{{ +\\strong{{Maintainer}}: {package_author} +}} +''' + # pylint: disable=R0914 def generate_class_string(name, props, project_shortname, prefix): @@ -426,6 +446,7 @@ def generate_rpkg(pkg_data, # does not exist in package.json package_name = snake_case_to_camel_case(project_shortname) + library_name = pkg_data.get('name') package_description = pkg_data.get('description', '') package_version = pkg_data.get('version', '0.0.1') @@ -463,16 +484,7 @@ def generate_rpkg(pkg_data, import_string =\ '# AUTO GENERATED FILE - DO NOT EDIT\n\n' - description_string = description_template.format( - package_name=package_name, - package_description=package_description, - package_version=package_version, - package_author=package_author, - package_license=package_license, - package_url=package_url, - package_issues=package_issues, - package_author_no_email=package_author_no_email - ) + pkghelp_stub_path = os.path.join('man', package_name + '-package.Rd') # generate the internal (not exported to the user) functions which # supply the JavaScript dependencies to the htmltools package, @@ -487,11 +499,53 @@ def generate_rpkg(pkg_data, f.write(import_string) f.write(export_string) - with open('DESCRIPTION', 'w') as f2: - f2.write(description_string) + with open('.Rbuildignore', 'w') as f2: + f2.write(rbuild_ignore_string) + + # Write package stub files for R online help, generate if + # dashHtmlComponents or dashCoreComponents; makes it easy + # for R users to bring up main package help page + pkg_help_header = "" + + if package_name in ['dashHtmlComponents']: + pkg_help_header = "Vanilla HTML Components for Dash" + pkg_help_desc = "Dash is a web application framework that\n\ +provides pure Python abstraction around HTML, CSS, and\n\ +JavaScript. Instead of writing HTML or using an HTML\n\ +templating engine, you compose your layout using R\n\ +functions within the dashHtmlComponents package. The\n\ +source for this package is on GitHub:\n\ +plotly/dash-html-components." + if package_name in ['dashCoreComponents']: + pkg_help_header = "Core Interactive UI Components for Dash" + pkg_help_desc = "Dash ships with supercharged components for\n\ +interactive user interfaces. A core set of components,\n\ +written and maintained by the Dash team, is available in\n\ +the dashCoreComponents package. The source for this package\n\ +is on GitHub: plotly/dash-core-components." + + description_string = description_template.format( + package_name=package_name, + package_description=package_description, + package_version=package_version, + package_author=package_author, + package_license=package_license, + package_url=package_url, + package_issues=package_issues, + package_author_no_email=package_author_no_email + ) - with open('.Rbuildignore', 'w') as f3: - f3.write(rbuild_ignore_string) + with open('DESCRIPTION', 'w') as f3: + f3.write(description_string) + + if pkg_help_header != "": + pkghelp = pkghelp_stub.format(package_name=package_name, + pkg_help_header=pkg_help_header, + pkg_help_desc=pkg_help_desc, + library_name=library_name, + package_author=package_author) + with open(pkghelp_stub_path, 'w') as f4: + f4.write(pkghelp) # This converts a string from snake case to camel case From 3499cd81c512778fbd43415d9d599286e16e0d4c Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 29 Jan 2019 04:10:13 -0500 Subject: [PATCH 33/36] :shirt: flake8 edits --- dash/development/_r_components_generation.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index bd379d2692..c9a8b095cc 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -131,8 +131,8 @@ \\seealso{{ Useful links: \\itemize{{ - \\item \\url{{https://github.com/plotly/{library_name}}} - \\item Report bugs at \\url{{https://github.com/plotly/{library_name}/issues}} + \\item \\url{{https://github.com/plotly/{lib_name}}} + \\item Report bugs at \\url{{https://github.com/plotly/{lib_name}/issues}} }} }} \\author{{ @@ -446,7 +446,7 @@ def generate_rpkg(pkg_data, # does not exist in package.json package_name = snake_case_to_camel_case(project_shortname) - library_name = pkg_data.get('name') + lib_name = pkg_data.get('name') package_description = pkg_data.get('description', '') package_version = pkg_data.get('version', '0.0.1') @@ -542,7 +542,7 @@ def generate_rpkg(pkg_data, pkghelp = pkghelp_stub.format(package_name=package_name, pkg_help_header=pkg_help_header, pkg_help_desc=pkg_help_desc, - library_name=library_name, + lib_name=lib_name, package_author=package_author) with open(pkghelp_stub_path, 'w') as f4: f4.write(pkghelp) From a622ccb8064ff829a135df4a5d827607ed857670 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 29 Jan 2019 04:33:58 -0500 Subject: [PATCH 34/36] :hammer: version information now sourced consistently --- dash/development/_r_components_generation.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index c9a8b095cc..857cab3776 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -220,7 +220,7 @@ def generate_class_string(name, props, project_shortname, prefix): # pylint: disable=R0914 -def generate_js_metadata(project_shortname): +def generate_js_metadata(pkg_data, project_shortname): """ Dynamically generate R function to supply JavaScript dependency information required by htmltools package, @@ -240,7 +240,7 @@ def generate_js_metadata(project_shortname): mod = sys.modules[project_shortname] jsdist = getattr(mod, '_js_dist', []) - project_ver = getattr(mod, '__version__', []) + project_ver = pkg_data.get('version') rpkgname = snake_case_to_camel_case(project_shortname) @@ -380,7 +380,7 @@ def write_class_file(name, print('Generated {}'.format(file_name)) -def write_js_metadata(project_shortname): +def write_js_metadata(pkg_data, project_shortname): """ Write an internal (not exported) R function to return all JS dependencies as required by htmltools package given a @@ -395,7 +395,8 @@ def write_js_metadata(project_shortname): """ function_string = generate_js_metadata( - project_shortname + pkg_data=pkg_data, + project_shortname=project_shortname ) file_name = "internal.R" @@ -492,7 +493,8 @@ def generate_rpkg(pkg_data, # RData file from within Python, given the current package generation # workflow) write_js_metadata( - project_shortname + pkg_data=pkg_data, + project_shortname=project_shortname ) with open('NAMESPACE', 'w') as f: From 817bfb06cf600748606662341541426449381a80 Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 29 Jan 2019 04:55:28 -0500 Subject: [PATCH 35/36] :shirt: pylint ws removal --- dash/development/_r_components_generation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 857cab3776..43fed7b9e8 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -240,7 +240,7 @@ def generate_js_metadata(pkg_data, project_shortname): mod = sys.modules[project_shortname] jsdist = getattr(mod, '_js_dist', []) - project_ver = pkg_data.get('version') + project_ver = pkg_data.get('version') rpkgname = snake_case_to_camel_case(project_shortname) @@ -395,7 +395,7 @@ def write_js_metadata(pkg_data, project_shortname): """ function_string = generate_js_metadata( - pkg_data=pkg_data, + pkg_data=pkg_data, project_shortname=project_shortname ) file_name = "internal.R" From c65084f63e7084e54a851cbee97618037e2f6d0b Mon Sep 17 00:00:00 2001 From: Ryan Patrick Kyle Date: Tue, 29 Jan 2019 05:25:40 -0500 Subject: [PATCH 36/36] updated R package description to note two langs --- dash/development/_r_components_generation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dash/development/_r_components_generation.py b/dash/development/_r_components_generation.py index 43fed7b9e8..13a57af381 100644 --- a/dash/development/_r_components_generation.py +++ b/dash/development/_r_components_generation.py @@ -512,7 +512,7 @@ def generate_rpkg(pkg_data, if package_name in ['dashHtmlComponents']: pkg_help_header = "Vanilla HTML Components for Dash" pkg_help_desc = "Dash is a web application framework that\n\ -provides pure Python abstraction around HTML, CSS, and\n\ +provides pure Python and R abstraction around HTML, CSS, and\n\ JavaScript. Instead of writing HTML or using an HTML\n\ templating engine, you compose your layout using R\n\ functions within the dashHtmlComponents package. The\n\