Skip to content

Commit

Permalink
Merge pull request #16 from synthicity/subcommands
Browse files Browse the repository at this point in the history
Add subcommand CLI.
  • Loading branch information
jiffyclub committed Mar 26, 2014
2 parents 7d2561d + 838b61c commit 3cdf95f
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 34 deletions.
9 changes: 7 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
packages=find_packages(exclude=['*.tests']),
package_data={'urbansim.urbansim': ['templates/*.template']},
install_requires=[
'bottle>=0.12.5',
'cliff>=1.5.2',
'Django>=1.6.2',
'jinja2>=2.7.2',
'numpy>=1.8.0',
Expand All @@ -33,8 +35,11 @@
],
entry_points={
'console_scripts': [
'urbansim_compile = urbansim.urbansim.compilecli:main',
'urbansim_serve = urbansim.server.servecli:main'
'urbansim = urbansim.cli:main'
],
'urbansim.commands': [
'compile = urbansim.urbansim.compilecli:Compile',
'serve = urbansim.server.servecli:Serve'
]
}
)
17 changes: 17 additions & 0 deletions urbansim/cli.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import sys

from cliff.app import App
from cliff.commandmanager import CommandManager


class UrbansimCLI(App):
def __init__(self):
super(UrbansimCLI, self).__init__(
description='UrbanSim Interface',
version='0.2dev',
command_manager=CommandManager('urbansim.commands'))


def main(args=sys.argv[1:]):
app = UrbansimCLI()
return app.run(args)
32 changes: 18 additions & 14 deletions urbansim/server/servecli.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
from __future__ import print_function

import argparse
import os.path
import sys

from urbansim.server import urbansimd
from cliff.command import Command

from urbansim.server import urbansimd

def parse_args(args=None):
parser = argparse.ArgumentParser(
description=('Start the UrbanSim server for use with the UrbanSim web portal'))
parser.add_argument(
'dataset', help='HDF5 file which contains UrbanSim data.')
return parser.parse_args(args)

class Serve(Command):
def get_description(self):
return ('Start the UrbanSim server for use '
'with the UrbanSim web portal')

def main(args=None):
args = parse_args(args)
def get_parser(self, prog_name):
parser = argparse.ArgumentParser(
description=self.get_description(),
prog=prog_name)
parser.add_argument(
'dataset', help='HDF5 file which contains UrbanSim data.')
return parser

sys.path.insert(0, ".")
import dataset
dset = dataset.LocalDataset(args.dataset)
def take_action(self, args):
sys.path.insert(0, ".")
import dataset
dset = dataset.LocalDataset(args.dataset)

urbansimd.start_service(dset)
urbansimd.start_service(dset)
6 changes: 3 additions & 3 deletions urbansim/server/urbansimd.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ def pandas_statement(table, where, sort, orderdesc, groupby, metric,
if not sort and not orderdesc:
sort = ".sort_index(ascending=True)"
if limit and page:
#limit = ".iloc[%s*(%s-1):%s*%s]" % (limit,page,limit,page)
# limit = ".iloc[%s*(%s-1):%s*%s]" % (limit,page,limit,page)
limit = ".head(%s*%s).tail(%s)" % (limit, page, limit)
elif limit:
limit = ".head(%s)" % limit
Expand Down Expand Up @@ -315,10 +315,10 @@ def query():

if 'key_dictionary' in req:
key_dictionary = req['key_dictionary']
#not sure /configs is the proper place to save dicts
# not sure /configs is the proper place to save dicts
dictionary_file = open("configs/" + key_dictionary).read()
dictionary = json.loads(dictionary_file)
#attention: the dictionary has keys from 0 to 15, ids come from 0 to 16
# attention: the dictionary has keys from 0 to 15, ids come from 0 to 16
recs = [[dictionary[str(int(x))], float(recs.ix[x]) / 1000]
for x in recs.index]
else:
Expand Down
28 changes: 16 additions & 12 deletions urbansim/urbansim/compilecli.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import argparse
import os.path

from cliff.command import Command

from urbansim.urbansim import modelcompile
from urbansim.utils import misc

Expand All @@ -26,17 +28,19 @@ def model_save(config):
f.write(code)


def parse_args(args=None):
parser = argparse.ArgumentParser(
description=('Compile a set of Python files that run models '
'specified in JSON configuration files.'))
parser.add_argument(
'configs', nargs='+', help='JSON model configuration files.')
return parser.parse_args(args)

class Compile(Command):
def get_description(self):
return ('Compile a set of Python files that run models '
'specified in configuration files.')

def main(args=None):
args = parse_args(args)
def get_parser(self, prog_name):
parser = argparse.ArgumentParser(
description=self.get_description(),
prog=prog_name)
parser.add_argument(
'configs', nargs='+', help='Model configuration files.')
return parser

for c in args.configs:
model_save(c)
def take_action(self, args):
for c in args.configs:
model_save(c)
3 changes: 0 additions & 3 deletions urbansim/utils/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,6 @@ def resultstocsv(fit, fnames, results, filename, hedonic=False, tolatex=True,
fit, fnames, results, filename, hedonic, tblname=tblname)
results = maketable(fnames, results)
f = open(os.path.join(output_dir(), filename), 'w')
#if hedonic: f.write('R-squared,%f\nAdj-R-squared,%f\n\n\n'%fit)
# else: f.write('null loglik,%f\nconverged loglik,%f\nloglik
# ratio,%f\n\n\n'%fit)
csvf = csv.writer(f, lineterminator='\n')
for row in results:
csvf.writerow(row)
Expand Down

0 comments on commit 3cdf95f

Please sign in to comment.