Source code for pycropml.main

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 19 22:59:23 2019

@author: pradal
"""
# coding: utf8
from __future__ import absolute_import
from __future__ import print_function

import sys
import os

from optparse import OptionParser

from path import Path

from pycropml.cyml import transpile_file, transpile_package

from pycropml.transpiler.main import languages

[docs]def main(): usage = """Usage: %prog [options] package language1 [languages] cyml transpiler translate a cyml source code or a Crop2ML package with algo in cyml language to target language. Example cyml <source_code.pyx or pkg> <target_language> * target language must be: py for python cs for csharp f90 for fortran java for java simplace for simplace sirius for sirius """ #TODO todo = """ * target language must be: py for python cs for csharp cpp for c++ f90 for fortran java for java r for R simplace for simplace sirius for sirius """ parser = OptionParser(usage=usage) parser.add_option("-f", "--file", dest="file", metavar="FILE", help="cyml source code FILE to transpile") parser.add_option("-p", "--package", dest="package", help="package directory containing a crop2ml directory with algorithms.") parser.add_option("-l", "--languages", dest="languages", action="append", choices=languages, help="Target languages : "+','.join(languages)) (opts, args)= parser.parse_args() sourcef = None pyx_filename = None package = None langs = [] if len(parser.option_list) + len(args) < 2: parser.error("incorrect number of arguments") if opts.file: sourcef = pyx_filename = opts.file elif opts.package: sourcef = package = opts.package else: sourcef = args[0] sourcef = Path(sourcef) if not sourcef.exists(): parser.error("Package or file does not exists") if opts.languages: langs = opts.languages else: langs = [a for a in args if a in languages] fail = False for arg in args: if arg == sourcef: continue if arg not in languages: parser.error("%s is not a supported language"%arg) fail = True if fail: return if not langs: parser.error("No language has been specified") print(parser.usage) return if pyx_filename or len(sourcef.split(".")) == 2: # translate from cyml code if sourcef.split(".")[1] != "pyx": parser.error("Source code %s is not a Cyml file (.pyx estension) "%(str(sourcef))) return for language in langs: status = transpile_file(sourcef, language) else: for language in langs: status = transpile_package(sourcef, language)
if __name__ == '__main__': main()