Skip to content

Commit

Permalink
Init app using quip-cli init command
Browse files Browse the repository at this point in the history
Add quip-cli as a dependancy to create-quip-app.
`create-quip-app` will invoke `../node_modules/quip-cli/bin/run init`
  • Loading branch information
Gaspar Garcia Jr committed Aug 4, 2020
1 parent ab793b9 commit 1efa784
Show file tree
Hide file tree
Showing 20 changed files with 834 additions and 542 deletions.
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
"**/dist": true,
"**/node_modules": true,
"**/app.ele": true
}
},
"python.formatting.provider": "yapf"
}
120 changes: 12 additions & 108 deletions packages/create-quip-app/bin/create-quip-app.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,17 @@
# Copyright 2017 Quip

import argparse
import collections
import copy
import fnmatch
import json
import logging
import os
import re
import shutil
import subprocess
import sys
import time
import zipfile


def sanitize_app_name(app_name):
for remove in ["\"", "$", "'", "\\"]:
app_name = app_name.replace(remove, "")
return app_name


def create_app_dir_name(app_name):
app_dir_name = app_name.lower()
for illegal in [" ", "/", "\\", "*", "_"]:
app_dir_name = app_dir_name.replace(illegal, "-")
for remove in ["'", '"', ".", ",", "(", ")", "&", "?", "^"]:
app_dir_name = app_dir_name.replace(remove, "")
return app_dir_name


def check_environment(yarn_or_npm):
def check_min_major_version(command, min_version):
version_re = re.compile("^v?(\d+)\.\d+\.\d+")
Expand Down Expand Up @@ -61,80 +43,16 @@ def check_min_major_version(command, min_version):
return True


def init_app(app_dir_name):
yarn_or_npm = "npm"
try:
FNULL = open(os.devnull, 'w')
subprocess.check_call("%s --version" % yarn_or_npm,
shell=True,
stdout=FNULL,
stderr=subprocess.STDOUT)
except:
yarn_or_npm = "yarn"

if not check_environment(yarn_or_npm):
logging.error("Initialization failed.")
return

cwd = os.getcwd()
app_dir = os.path.join(cwd, app_dir_name)
if os.path.exists(app_dir):
logging.error("Directory '%s' already exists" % app_dir)
return

logging.info("Creating a new Quip App in %s\n", app_dir)
lib_path = os.path.dirname(os.path.realpath(__file__))
shutil.copytree(os.path.join(lib_path, "template"),
app_dir,
ignore=shutil.ignore_patterns("*node_modules*", "*dist*"))

def replace_placeholders(file_path):
with open(os.path.join(app_dir, file_path), "r+") as f:
content = f.read()
f.seek(0)
f.write(content.replace("$APP_DIR_NAME", app_dir_name))
f.truncate()

for file_path in ["manifest.json", "package.json"]:
replace_placeholders(file_path)

installed_packages = False

try:
logging.info(
"Installing packages. This might take a couple of minutes.")
os.chdir(app_dir)
subprocess.check_call("%s install" % yarn_or_npm, shell=True)
os.chdir(cwd)
installed_packages = True
except:
#logging.error("Unexpected error: %s", sys.exc_info())
pass

logging.info(init_success_msg(app_dir_name, app_dir, yarn_or_npm))

if not installed_packages:
logging.error(
"Heads up that we were unable to run `%s install`, "
"you will need to do that yourself.", yarn_or_npm)


def init_success_msg(app_dir_name, app_dir, yarn_or_npm):
return """
Success! Created {0} at {1}
Inside that directory, you can run several commands:
{2} start
Starts the development server (for Use Local Resources mode).
{2} run build
Builds and packages your app.ele for upload to production.
Quip Live Apps Getting Started Guide:
https://quip.com/dev/liveapps
Happy Hacking!
""".format(app_dir_name, app_dir, yarn_or_npm)
def init_app():
# TODO: continue supporting yarn
check_environment("npm")
script_path = os.path.dirname(os.path.realpath(sys.argv[0]))
quip_cli_path = os.path.join(script_path, "..", "node_modules", "quip-cli",
"bin", "run")
subprocess.check_call(
"%s init" % quip_cli_path,
shell=True,
)


def read_manifest():
Expand Down Expand Up @@ -202,16 +120,6 @@ def matches_resource_pattern(resource_patterns, path):
matches_resource_pattern(resource_patterns, path)


# We don't want to warn about webpack JS/CSS map files missing from the
# manifest.json.
def is_map_path(manifest, path):
def is_map(manifest, path, suffix):
return path.endswith(suffix) and is_enumerated_path(
manifest, path[:-4])
return is_map(manifest, path, ".js.map") or \
is_map(manifest, path, ".css.map")


def create_package(app_dir, package_path=None):
# TODO(plinehan): Validate the directory structure and manifest.
# Some combination of what run_sandbox and the server-side code already
Expand Down Expand Up @@ -259,17 +167,13 @@ def main():
parser.add_argument("--output", type=str, default=None)
parser.add_argument("args", nargs=argparse.REMAINDER)
args = parser.parse_args()
if len(args.args) == 0:
logging.error(
"Please specify the directory to create your live app in")
sys.exit(1)
if args.args[0] == "pack":
if len(args.args) and args.args[0] == "pack":
if len(args.args) != 2:
logging.error("Please specify the app directory location")
sys.exit(1)
create_package(args.args[1], args.output)
else:
init_app(args.args[0])
init_app()


if __name__ == "__main__":
Expand Down
8 changes: 0 additions & 8 deletions packages/create-quip-app/bin/template/.babelrc

This file was deleted.

12 changes: 0 additions & 12 deletions packages/create-quip-app/bin/template/.gitignore

This file was deleted.

This file was deleted.

This file was deleted.

10 changes: 0 additions & 10 deletions packages/create-quip-app/bin/template/assets/styles.css

This file was deleted.

4 changes: 0 additions & 4 deletions packages/create-quip-app/bin/template/jest.config.js

This file was deleted.

15 changes: 0 additions & 15 deletions packages/create-quip-app/bin/template/manifest.json

This file was deleted.

43 changes: 0 additions & 43 deletions packages/create-quip-app/bin/template/package.json

This file was deleted.

39 changes: 0 additions & 39 deletions packages/create-quip-app/bin/template/src/components/main.test.tsx

This file was deleted.

Loading

0 comments on commit 1efa784

Please sign in to comment.