def maybe_trial_build(m): from shutil import copyfile '''Update the metadata for a trial build, then restore it''' if not m.args.trial: yield False, m.mt_file return if not m.doc._has_semver(): raise MetapackError( "To use trial builds, package must have a semantic version ") prt('Building a trial') mt_file = Path(m.mt_file.fspath).parent.joinpath('trial.csv') copyfile(m.mt_file.fspath, mt_file) doc = MetapackDoc(mt_file) version = doc['Root'].find_first('Root.Version') vb = version.get_or_new_child('Version.Build') vb.value = 'trial' try: doc.update_name() doc.write() yield True, parse_app_url(str(mt_file), downloader) finally: mt_file.unlink()
def convert_metatab_notebook(m): m.doc['Documentation'].get_or_new_term('Root.Readme').value = get_readme(m) return source = None # Path(source) if source.suffix == '.csv': dest = source.with_suffix('.ipynb') doc = MetapackDoc(source) doc.ensure_identifier() doc.update_name(create_term=True) # _write_metatab_notebook(doc, dest) elif source.suffix == '.ipynb': dest = source.with_suffix('.csv') doc = None # extract_notebook_metatab(source) doc.ensure_identifier() doc.update_name(create_term=True) write_doc(doc, dest) else: err("Source file must be either .ipynb or .csv")
def new_cmd(args): from metapack import MetapackDoc from metapack.util import make_metatab_file, datetime_now, ensure_dir from metapack.cli.core import write_doc, prt, err from os.path import exists, join, expanduser from metatab import DEFAULT_METATAB_FILE from os import getenv if args.config: config_file = args.config elif getenv("METAPACK_CONFIG"): config_file = getenv("METAPACK_DEFAULTS") elif expanduser('~/.metapack-default.csv'): config_file = expanduser('~/.metapack-defaults.csv') else: config_file = None if config_file and exists(config_file): prt(f"Using defaults file '{config_file}'") config = MetapackDoc(config_file) else: config = MetapackDoc() if args.jupyter: import tempfile with tempfile.NamedTemporaryFile(suffix='.ipynb', delete=False) as fp: r = requests.get(TEMPLATE_NOTEBOOK, allow_redirects=True) r.raise_for_status() fp.write(r.content) nb_path = Path(fp.name) doc = MetapackDoc(str(nb_path)) else: doc = make_metatab_file(args.template) doc['Root']['Created'] = datetime_now() origin = args.origin or config.get_value('Root.Origin') if not origin: err("Must specify a value for origin, either on command line or in defaults file" ) (doc['Root'].find_first('Root.Origin') or et).value = origin (doc['Root'].find_first('Root.Dataset') or et).value = args.dataset (doc['Root'].find_first('Root.Space') or et).value = args.space or config.get_value('Root.Space') (doc['Root'].find_first('Root.Time') or et).value = args.time or config.get_value('Root.Time') (doc['Root'].find_first('Root.Grain') or et).value = args.grain or config.get_value('Root.Grain') (doc['Root'].find_first('Root.Variant') or et).value = args.variant or config.get_value('Root.Variant') v = doc['Root'].get_or_new_term('Root.Version') v.get_or_new_child( 'Version.Major' ).value = args.revision or config.get_value('Root.Version') v.get_or_new_child('Version.Minor').value = 1 v.get_or_new_child('Version.Patch').value = 1 # Copy contacts in if 'Contacts' in config: for c in config['Contacts']: doc['Contacts'].add_term(c) if args.title: doc['Root'].find_first('Root.Title').value = args.title.strip() nv_name = doc.as_version(None) if args.example: doc['Resources'].new_term( 'Root.Datafile', 'http://public.source.civicknowledge.com/example.com/sources/random-names.csv', name='random_names') doc['Documentation'].new_term('Root.Homepage', 'http://metatab.org', title='Metatab Home Page') doc.ensure_identifier() doc.update_name(create_term=True) if getattr(args, 'jupyter'): # b/c maybe metatab_jupyter is not installed from metapack_jupyter.convert import write_metatab_notebook from metapack_jupyter.core import edit_notebook, set_cell_source, get_cell_source new_nb_path = Path(f'{nv_name}.ipynb') doc['Resources'].new_term( 'Root.Datafile', './' + str(new_nb_path) + "#df", name='local_dataframe', description='Example of using a local Dataframe') if new_nb_path.exists(): err(f"Directory {nb_path} already exists") copyfile(nb_path, new_nb_path) write_metatab_notebook(doc, new_nb_path) with edit_notebook(new_nb_path) as nb: init = get_cell_source(nb, 'init') init += f"\nthis_package_name = '{str(new_nb_path.name)}'" set_cell_source(nb, 'init', init) nb_path.unlink() else: doc['Documentation'].new_term('Root.Documentation', 'file:README.md', title='README') if exists(nv_name): err(f"Directory {nv_name} already exists") if args.csv: fn = doc.nonver_name + '.csv' write_doc(doc, fn) prt(f"Writing to {fn}") else: ensure_dir(nv_name) pylib_dir = join(nv_name, 'pylib') ensure_dir(pylib_dir) with open(join(pylib_dir, '__init__.py'), 'w') as f_out, open(pylib.__file__) as f_in: f_out.write(f_in.read()) if args.example: doc['Resources'].new_term('Root.Datafile', 'python:pylib#row_generator', name='row_generator') prt(f"Writing to '{nv_name}'") write_doc(doc, join(nv_name, DEFAULT_METATAB_FILE)) add_missing_files(nv_name) if args.title: readme = '# {}\n'.format(args.title) else: readme = '# {}\n'.format(doc.get_value('Root.Name')) with open(join(nv_name, 'README.md'), 'w') as f: f.write(readme)