mirror of https://github.com/chriskiehl/Gooey.git
chriskiehl
9 years ago
9 changed files with 323 additions and 297 deletions
Unified View
Diff Options
-
173gooey/examples/TODO.py
-
25gooey/examples/deleteme.py
-
0gooey/examples/error_demo.py
-
4gooey/examples/force_start_demo.py
-
207gooey/examples/gooey_config.json
-
0gooey/examples/minimal_demo.py
-
51gooey/examples/mockapp_import_argparse.py
-
92gooey/examples/subparser_demo.py
-
68gooey/examples/widget_demo.py
@ -1,173 +0,0 @@ |
|||||
#!/usr/local/bin/python2.7 |
|
||||
# encoding: utf-8 |
|
||||
''' |
|
||||
|
|
||||
TODO: Fix this. Currently breaks parser |
|
||||
|
|
||||
|
|
||||
bin.example_argparse_souce -- shortdesc |
|
||||
|
|
||||
bin.example_argparse_souce is a description |
|
||||
|
|
||||
It defines classes_and_methods |
|
||||
|
|
||||
@author: user_name |
|
||||
|
|
||||
@copyright: 2013 organization_name. All rights reserved. |
|
||||
|
|
||||
@license: license |
|
||||
|
|
||||
@contact: user_email |
|
||||
@deffield updated: Updated |
|
||||
''' |
|
||||
|
|
||||
import sys |
|
||||
import os |
|
||||
from argparse import ArgumentParser |
|
||||
from argparse import RawDescriptionHelpFormatter |
|
||||
|
|
||||
from gooey.python_bindings.gooey_decorator import Gooey |
|
||||
|
|
||||
|
|
||||
__all__ = [] |
|
||||
__version__ = 0.1 |
|
||||
__date__ = '2013-12-13' |
|
||||
__updated__ = '2013-12-13' |
|
||||
|
|
||||
DEBUG = 0 |
|
||||
TESTRUN = 0 |
|
||||
PROFILE = 0 |
|
||||
|
|
||||
|
|
||||
class CLIError(Exception): |
|
||||
'''Generic exception to raise and log different fatal errors.''' |
|
||||
|
|
||||
def __init__(self, msg): |
|
||||
super(CLIError).__init__(type(self)) |
|
||||
self.msg = "E: %s" % msg |
|
||||
|
|
||||
def __str__(self): |
|
||||
return self.msg |
|
||||
|
|
||||
def __unicode__(self): |
|
||||
return self.msg |
|
||||
|
|
||||
raise NotImplementedError("This one doesn't work just yet. Please run any of the other apps in the examples directory. :) Sorry!") |
|
||||
|
|
||||
@Gooey |
|
||||
def main(argv=None): # IGNORE:C0111 |
|
||||
'''Command line options.''' |
|
||||
|
|
||||
if argv is None: |
|
||||
argv = sys.argv |
|
||||
else: |
|
||||
sys.argv.extend(argv) |
|
||||
|
|
||||
program_name = os.path.basename(sys.argv[0]) |
|
||||
program_version = "v%s" % __version__ |
|
||||
program_build_date = str(__updated__) |
|
||||
program_version_message = '%%(prog)s %s (%s)' % (program_version, program_build_date) |
|
||||
program_shortdesc = __import__('__main__').__doc__.split("\n")[1] |
|
||||
program_license = '''%s |
|
||||
|
|
||||
Created by user_name on %s. |
|
||||
Copyright 2013 organization_name. All rights reserved. |
|
||||
|
|
||||
Licensed under the Apache License 2.0 |
|
||||
http://www.apache.org/licenses/LICENSE-2.0 |
|
||||
|
|
||||
Distributed on an "AS IS" basis without warranties |
|
||||
or conditions of any kind, either express or implied. |
|
||||
|
|
||||
USAGE |
|
||||
''' % (program_shortdesc, str(__date__)) |
|
||||
|
|
||||
try: |
|
||||
# Setup argument parser |
|
||||
parser = ArgumentParser(description='Example Argparse Program', formatter_class=RawDescriptionHelpFormatter) |
|
||||
|
|
||||
parser.add_argument("filename", help="filename") |
|
||||
|
|
||||
parser.add_argument("-r", "--recursive", dest="recurse", action="store_true", |
|
||||
help="recurse into subfolders [default: %(default)s]") |
|
||||
|
|
||||
parser.add_argument("-v", "--verbose", dest="verbose", action="count", |
|
||||
help="set verbosity level [default: %(default)s]") |
|
||||
|
|
||||
parser.add_argument("-i", "--include", action="append", nargs='+', |
|
||||
help="only include paths matching this regex pattern. Note: exclude is given preference over include. ", |
|
||||
metavar="RE") |
|
||||
|
|
||||
parser.add_argument("-m", "--mycoolargument", help="mycoolargument") |
|
||||
|
|
||||
parser.add_argument("-e", "--exclude", dest="exclude", |
|
||||
help="exclude paths matching this regex pattern. [default: %(default)s]", metavar="RE") |
|
||||
|
|
||||
parser.add_argument('-V', '--version', action='version') |
|
||||
|
|
||||
parser.add_argument('-T', '--tester', choices=['yes', 'no']) |
|
||||
|
|
||||
parser.add_argument(dest="paths", help="paths to folder(s) with source file(s) [default: %(default)s]", |
|
||||
metavar="path", nargs='+') |
|
||||
|
|
||||
# for i in parser._actions: |
|
||||
# print i |
|
||||
# Process arguments |
|
||||
args = parser.parse_args() |
|
||||
|
|
||||
paths = args.paths |
|
||||
verbose = args.verbose |
|
||||
recurse = args.recurse |
|
||||
inpat = args.include |
|
||||
expat = args.exclude |
|
||||
|
|
||||
if verbose > 0: |
|
||||
print("Verbose mode on") |
|
||||
if recurse: |
|
||||
print("Recursive mode on") |
|
||||
else: |
|
||||
print("Recursive mode off") |
|
||||
|
|
||||
if inpat and expat and inpat == expat: |
|
||||
raise CLIError("include and exclude pattern are equal! Nothing will be processed.") |
|
||||
|
|
||||
for inpath in paths: |
|
||||
### do something with inpath ### |
|
||||
print(inpath) |
|
||||
return 0 |
|
||||
except KeyboardInterrupt: |
|
||||
### handle keyboard interrupt ### |
|
||||
return 0 |
|
||||
except Exception, e: |
|
||||
if DEBUG or TESTRUN: |
|
||||
raise (e) |
|
||||
indent = len(program_name) * " " |
|
||||
sys.stderr.write(program_name + ": " + repr(e) + "\n") |
|
||||
sys.stderr.write(indent + " for help use --help") |
|
||||
return 2 |
|
||||
|
|
||||
|
|
||||
if __name__ == "__main__": |
|
||||
if DEBUG: |
|
||||
sys.argv.append("-h") |
|
||||
# sys.argv.append("-v") |
|
||||
sys.argv.append("-r") |
|
||||
main() |
|
||||
sys.exit() |
|
||||
if TESTRUN: |
|
||||
import doctest |
|
||||
|
|
||||
doctest.testmod() |
|
||||
if PROFILE: |
|
||||
import cProfile |
|
||||
import pstats |
|
||||
|
|
||||
profile_filename = 'bin.example_argparse_souce_profile.txt' |
|
||||
cProfile.run('main()', profile_filename) |
|
||||
statsfile = open("profile_stats.txt", "wb") |
|
||||
p = pstats.Stats(profile_filename, stream=statsfile) |
|
||||
stats = p.strip_dirs().sort_stats('cumulative') |
|
||||
stats.print_stats() |
|
||||
statsfile.close() |
|
||||
sys.exit(0) |
|
||||
sys.exit(main()) |
|
@ -1,25 +0,0 @@ |
|||||
import sys, argparse |
|
||||
|
|
||||
from gooey import Gooey |
|
||||
|
|
||||
@Gooey |
|
||||
def main(): |
|
||||
parser = argparse.ArgumentParser(description='The program displays the video.') |
|
||||
parser.add_argument('-i', dest = 'videoFilename', help = 'name of the video file', required = True) |
|
||||
parser.add_argument('-f', dest = 'firstFrameNum', help = 'number of first frame number to display', default = 0, type = int) |
|
||||
parser.add_argument('--fps', dest = 'frameRate', help = 'approximate frame rate to replay', type = float) |
|
||||
parser.add_argument('-r', dest = 'rescale', help = 'rescaling factor for the displayed image', default = 1., type = float) |
|
||||
|
|
||||
args = parser.parse_args() |
|
||||
|
|
||||
firstFrameNum = 0 |
|
||||
if args.firstFrameNum is not None: |
|
||||
firstFrameNum = args.firstFrameNum |
|
||||
|
|
||||
frameRate = -1 |
|
||||
if args.frameRate is not None: |
|
||||
frameRate = args.frameRate |
|
||||
|
|
||||
print('{} {} {} {}'.format(args.videoFilename, firstFrameNum, frameRate, rescale = args.rescale)) |
|
||||
|
|
||||
main() |
|
@ -1,41 +1,208 @@ |
|||||
{ |
{ |
||||
|
"num_optional_cols": 2, |
||||
|
"num_required_cols": 2, |
||||
"show_advanced": true, |
"show_advanced": true, |
||||
|
"program_name": "widget_demo", |
||||
|
"target": "python c:\\users\\chris\\appdata\\local\\temp\\tmpwkcm2q.py", |
||||
"language": "english", |
"language": "english", |
||||
"manual_start": false, |
"manual_start": false, |
||||
"optionals_cols": 3, |
|
||||
"required": [ |
|
||||
|
"show_config": true, |
||||
|
"default_size": [ |
||||
|
610, |
||||
|
530 |
||||
|
], |
||||
|
"widgets": [ |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [], |
||||
|
"display_name": "FileChooser", |
||||
|
"help": "Name of the file you want to process", |
||||
|
"choices": [] |
||||
|
}, |
||||
|
"required": true, |
||||
|
"type": "FileChooser" |
||||
|
}, |
||||
{ |
{ |
||||
"data": { |
"data": { |
||||
"nargs": "+", |
|
||||
|
"nargs": "", |
||||
"commands": [], |
"commands": [], |
||||
"display_name": "integers", |
|
||||
"help": "an integer for the accumulator", |
|
||||
|
"display_name": "MultiFileSaver", |
||||
|
"help": "Name of the file you want to process", |
||||
|
"choices": [] |
||||
|
}, |
||||
|
"required": true, |
||||
|
"type": "MultiFileChooser" |
||||
|
}, |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-d", |
||||
|
"--duration" |
||||
|
], |
||||
|
"display_name": "duration", |
||||
|
"help": "Duration (in seconds) of the program output", |
||||
"choices": [] |
"choices": [] |
||||
}, |
}, |
||||
|
"required": false, |
||||
"type": "TextField" |
"type": "TextField" |
||||
} |
|
||||
], |
|
||||
"requireds_cols": 1, |
|
||||
"show_config": true, |
|
||||
"default_size": [ |
|
||||
610, |
|
||||
530 |
|
||||
], |
|
||||
"optional": [ |
|
||||
|
}, |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-s", |
||||
|
"--cron-schedule" |
||||
|
], |
||||
|
"display_name": "cron_schedule", |
||||
|
"help": "datetime when the cron should begin", |
||||
|
"choices": [] |
||||
|
}, |
||||
|
"required": false, |
||||
|
"type": "DateChooser" |
||||
|
}, |
||||
{ |
{ |
||||
"data": { |
"data": { |
||||
"nargs": "", |
"nargs": "", |
||||
"commands": [ |
"commands": [ |
||||
"--sum" |
|
||||
|
"-c", |
||||
|
"--showtime" |
||||
], |
], |
||||
"display_name": "accumulate", |
|
||||
"help": "sum the integers (default: find the max)", |
|
||||
|
"display_name": "showtime", |
||||
|
"help": "display the countdown timer", |
||||
"choices": [] |
"choices": [] |
||||
}, |
}, |
||||
|
"required": false, |
||||
"type": "CheckBox" |
"type": "CheckBox" |
||||
|
}, |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-p", |
||||
|
"--pause" |
||||
|
], |
||||
|
"display_name": "pause", |
||||
|
"help": "Pause execution", |
||||
|
"choices": [] |
||||
|
}, |
||||
|
"required": false, |
||||
|
"type": "CheckBox" |
||||
|
}, |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-v", |
||||
|
"--verbose" |
||||
|
], |
||||
|
"display_name": "verbose", |
||||
|
"help": null, |
||||
|
"choices": [] |
||||
|
}, |
||||
|
"required": false, |
||||
|
"type": "Dropdown", |
||||
|
"choices": [ |
||||
|
1, |
||||
|
2, |
||||
|
3, |
||||
|
4, |
||||
|
5, |
||||
|
6, |
||||
|
7, |
||||
|
8, |
||||
|
9, |
||||
|
10 |
||||
|
] |
||||
|
}, |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-o", |
||||
|
"--overwrite" |
||||
|
], |
||||
|
"display_name": "overwrite", |
||||
|
"help": "Overwrite output file (if present)", |
||||
|
"choices": [] |
||||
|
}, |
||||
|
"required": false, |
||||
|
"type": "CheckBox" |
||||
|
}, |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-r", |
||||
|
"--recursive" |
||||
|
], |
||||
|
"display_name": "recursive", |
||||
|
"help": "Recurse into subfolders", |
||||
|
"choices": [ |
||||
|
"yes", |
||||
|
"no" |
||||
|
] |
||||
|
}, |
||||
|
"required": false, |
||||
|
"type": "Dropdown" |
||||
|
}, |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-w", |
||||
|
"--writelog" |
||||
|
], |
||||
|
"display_name": "writelog", |
||||
|
"help": "Dump output to local file", |
||||
|
"choices": [] |
||||
|
}, |
||||
|
"required": false, |
||||
|
"type": "TextField" |
||||
|
}, |
||||
|
{ |
||||
|
"data": { |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-e", |
||||
|
"--error" |
||||
|
], |
||||
|
"display_name": "error", |
||||
|
"help": "Stop process on error (default: No)", |
||||
|
"choices": [] |
||||
|
}, |
||||
|
"required": false, |
||||
|
"type": "CheckBox" |
||||
|
}, |
||||
|
{ |
||||
|
"data": [ |
||||
|
{ |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-t", |
||||
|
"--verbozze" |
||||
|
], |
||||
|
"display_name": "verbose", |
||||
|
"help": "Show more details", |
||||
|
"choices": null |
||||
|
}, |
||||
|
{ |
||||
|
"nargs": "", |
||||
|
"commands": [ |
||||
|
"-q", |
||||
|
"--quiet" |
||||
|
], |
||||
|
"display_name": "quiet", |
||||
|
"help": "Only output on error", |
||||
|
"choices": null |
||||
|
} |
||||
|
], |
||||
|
"required": false, |
||||
|
"type": "RadioGroup", |
||||
|
"group_name": "Choose Option" |
||||
} |
} |
||||
], |
], |
||||
"program_name": "tmpewuheq", |
|
||||
"program_description": "Process some integers.", |
|
||||
"target": "python c:\\users\\chris\\appdata\\local\\temp\\tmpewuheq.py" |
|
||||
|
"layout_type": "standard", |
||||
|
"program_description": "Example application to show Gooey's various widgets" |
||||
} |
} |
@ -1,51 +0,0 @@ |
|||||
''' |
|
||||
Created on Dec 21, 2013 |
|
||||
|
|
||||
@author: Chris |
|
||||
''' |
|
||||
import sys |
|
||||
import hashlib |
|
||||
from time import time as _time |
|
||||
from time import sleep as _sleep |
|
||||
import argparse |
|
||||
|
|
||||
from gooey import Gooey |
|
||||
|
|
||||
|
|
||||
@Gooey |
|
||||
def main(): |
|
||||
my_cool_parser = argparse.ArgumentParser(description="Mock application to test Gooey's functionality") |
|
||||
my_cool_parser.add_argument("filename", help="Name of the file you want to read") # positional |
|
||||
my_cool_parser.add_argument("outfile", help="Name of the file where you'll save the output") # positional |
|
||||
my_cool_parser.add_argument('-c', '--countdown', default=10, type=int, help='sets the time to count down from') |
|
||||
my_cool_parser.add_argument("-s", "--showtime", action="store_true", help="display the countdown timer") |
|
||||
my_cool_parser.add_argument("-d", "--delay", action="store_true", help="Delay execution for a bit") |
|
||||
my_cool_parser.add_argument('--verbose', '-v', action='count') |
|
||||
my_cool_parser.add_argument("-o", "--obfuscate", action="store_true", help="obfuscate the countdown timer!") |
|
||||
my_cool_parser.add_argument('-r', '--recursive', choices=['yes', 'no'], help='Recurse into subfolders') |
|
||||
my_cool_parser.add_argument("-w", "--writelog", default="No, NOT whatevs", help="write log to some file or something") |
|
||||
my_cool_parser.add_argument("-e", "--expandAll", action="store_true", help="expand all processes") |
|
||||
|
|
||||
print 'inside of main(), my_cool_parser =', my_cool_parser |
|
||||
args = my_cool_parser.parse_args() |
|
||||
|
|
||||
print sys.argv |
|
||||
print args.countdown |
|
||||
print args.showtime |
|
||||
|
|
||||
start_time = _time() |
|
||||
print 'Counting down from %s' % args.countdown |
|
||||
while _time() - start_time < args.countdown: |
|
||||
if args.showtime: |
|
||||
print 'printing message at: %s' % _time() |
|
||||
else: |
|
||||
print 'printing message at: %s' % hashlib.md5(str(_time())).hexdigest() |
|
||||
_sleep(.5) |
|
||||
print 'Finished running the program. Byeeeeesss!' |
|
||||
|
|
||||
# raise ValueError("Something has gone wrong! AHHHHHHHHHHH") |
|
||||
|
|
||||
if __name__ == '__main__': |
|
||||
# sys.argv.extend('asdf -c 5 -s'.split()) |
|
||||
# print sys.argv |
|
||||
main() |
|
@ -0,0 +1,92 @@ |
|||||
|
""" |
||||
|
Example program to demonstrate Gooey's presentation of subparsers |
||||
|
""" |
||||
|
|
||||
|
import argparse |
||||
|
|
||||
|
from gooey import Gooey, GooeyParser |
||||
|
|
||||
|
running = True |
||||
|
|
||||
|
|
||||
|
@Gooey(optional_cols=2) |
||||
|
def main(): |
||||
|
settings_msg = 'Subparser example demonstating bundled configurations ' \ |
||||
|
'for Siege, Curl, and FFMPEG' |
||||
|
parser = GooeyParser(description=settings_msg) |
||||
|
parser.add_argument('--verbose', help='be verbose', dest='verbose', |
||||
|
action='store_true', default=False) |
||||
|
subs = parser.add_subparsers(help='commands', dest='command') |
||||
|
|
||||
|
curl_parser = subs.add_parser('curl', help='curl is a tool to transfer data from or to a server') |
||||
|
curl_parser.add_argument('Path', |
||||
|
help='URL to the remote server', |
||||
|
type=str, widget='FileChooser') |
||||
|
curl_parser.add_argument('--connect-timeout', |
||||
|
help='Maximum time in seconds that you allow curl\'s connection to take') |
||||
|
curl_parser.add_argument('--user-agent', |
||||
|
help='Specify the User-Agent string ') |
||||
|
curl_parser.add_argument('--cookie', |
||||
|
help='Pass the data to the HTTP server as a cookie') |
||||
|
curl_parser.add_argument('--dump-header', type=argparse.FileType, |
||||
|
help='Write the protocol headers to the specified file') |
||||
|
curl_parser.add_argument('--progress-bar', action="store_true", |
||||
|
help='Make curl display progress as a simple progress bar') |
||||
|
curl_parser.add_argument('--http2', action="store_true", |
||||
|
help='Tells curl to issue its requests using HTTP 2') |
||||
|
curl_parser.add_argument('--ipv4', action="store_true", |
||||
|
help=' resolve names to IPv4 addresses only') |
||||
|
|
||||
|
|
||||
|
|
||||
|
# ######################################################## |
||||
|
siege_parser = subs.add_parser('siege', help='Siege is an http/https regression testing and benchmarking utility') |
||||
|
siege_parser.add_argument('--get', |
||||
|
help='Pull down headers from the server and display HTTP transaction', |
||||
|
type=str) |
||||
|
siege_parser.add_argument('--concurrent', |
||||
|
help='Stress the web server with NUM number of simulated users', |
||||
|
type=int) |
||||
|
siege_parser.add_argument('--time', |
||||
|
help='allows you to run the test for a selected period of time', |
||||
|
type=int) |
||||
|
siege_parser.add_argument('--delay', |
||||
|
help='simulated user is delayed for a random number of seconds between one and NUM', |
||||
|
type=int) |
||||
|
siege_parser.add_argument('--message', |
||||
|
help='mark the log file with a separator', |
||||
|
type=int) |
||||
|
|
||||
|
|
||||
|
# ######################################################## |
||||
|
ffmpeg_parser = subs.add_parser('ffmpeg', help='Siege is an http/https regression testing and benchmarking utility') |
||||
|
ffmpeg_parser.add_argument('Output', |
||||
|
help='Pull down headers from the server and display HTTP transaction', |
||||
|
widget='FileSaver') |
||||
|
ffmpeg_parser.add_argument('--bitrate', |
||||
|
help='set the video bitrate in kbit/s (default = 200 kb/s)', |
||||
|
type=str) |
||||
|
ffmpeg_parser.add_argument('--fps', |
||||
|
help='set frame rate (default = 25)', |
||||
|
type=str) |
||||
|
ffmpeg_parser.add_argument('--size', |
||||
|
help='set frame size. The format is WxH (default 160x128)', |
||||
|
type=str) |
||||
|
ffmpeg_parser.add_argument('--aspect', |
||||
|
help='set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)', |
||||
|
type=str) |
||||
|
ffmpeg_parser.add_argument('--tolerance', |
||||
|
help='set video bitrate tolerance (in kbit/s)', |
||||
|
type=str) |
||||
|
ffmpeg_parser.add_argument('--maxrate', |
||||
|
help='set min video bitrate tolerance (in kbit/s)', |
||||
|
type=str) |
||||
|
ffmpeg_parser.add_argument('--bufsize', |
||||
|
help='set ratecontrol buffere size (in kbit)', |
||||
|
type=str) |
||||
|
|
||||
|
parser.parse_args() |
||||
|
|
||||
|
|
||||
|
if __name__ == '__main__': |
||||
|
main() |
Write
Preview
Loading…
Cancel
Save