Source code for scisalt.facettools.print2elog

import jinja2 as _jj
import tempfile as _tempfile
import os as _os
import datetime as _dt
import shutil as _shutil

basedir = '/u1/facet/physics/logbook/data'


# ============================
# Copy files as needed
# ============================
def _copy_file(filepath, fulltime):
    if filepath is None:
        filepath_out = ''
    else:
        filename  = _os.path.basename(filepath)
        root, ext = _os.path.splitext(filename)
        filepath_out = fulltime + ext
        copypath = _os.path.join(basedir, filepath_out)
        _shutil.copyfile(filepath, copypath)

    return filepath_out


[docs]def print2elog(author='', title='', text='', link=None, file=None, now=None): """ Prints to the elog given: * An *author* * *title* * *link* path to a thumbnail * *file* path to a file * Time *now*. """ # ============================ # Get current time # ============================ if now is None: now = _dt.datetime.now() fulltime = now.strftime('%Y-%m-%dT%H:%M:%S-00') # ============================ # Copy files # ============================ if not ((link is None) ^ (file is None)): link_copied = _copy_file(link, fulltime) file_copied = _copy_file(file, fulltime) else: raise ValueError('Need both file and its thumbnail!') # ============================ # Jinja templating # ============================ loader = _jj.PackageLoader('pytools.facettools', 'resources/templates') env = _jj.Environment(loader=loader, trim_blocks=True) template = env.get_template('facetelog.xml') stream = template.stream(author=author, title=title, text=text, link=link_copied, file=file_copied, now=now) # ============================ # Write xml # ============================ with _tempfile.TemporaryDirectory() as dirname: filename = '{}.xml'.format(fulltime) filepath = _os.path.join(dirname, filename) with open(filepath, 'w+') as fid: # stream.disable_buffering() stream.dump(fid) finalpath = _os.path.join(basedir, filename) # _shutil.copyfile(filepath, 'new.xml') _shutil.copyfile(filepath, finalpath)