#!/usr/bin/python
#
# arch-tag: 317d4585-8110-456e-a11c-8fa6f2a24e65
#
# Build the PMACS server I/O database from the text specification,
# the database file is created in the ./ops_db subdirectory.
#
"""
Create PMACS server I/O database

usage: buildiodb.py descfile

"""
import sys
import json
import os
try:
    # For Pythons w/distutils pybsddb
    from bsddb3 import db, dbshelve
except ImportError:
    # For Python 2.3
    from bsddb import db, dbshelve


try:
    obj = json.read(open(sys.argv[1], 'r').read())
except IndexError:
    print __doc__
    sys.exit(2)
    
# Initialize database and environment
dbhome = './ops_db'
envflags = db.DB_INIT_MPOOL | db.DB_CREATE
dbtype = db.DB_HASH
dbflags = db.DB_CREATE

try:
    os.mkdir(dbhome)
except os.error:
    pass

env = db.DBEnv()
env.open(dbhome, envflags)
db = dbshelve.DBShelf(env)
db.open('iospec', dbtype, dbflags)

for load in obj['loads']:
    type,v = load['bus'].split('/')
    id = "%s/%d/%s" % (type, load['port'], v)
    db[id] = load

for bus in obj['buses']:
    db[bus['id']] = bus

for sensor in obj['sensors']:
    db[sensor['id']] = sensor

db['mv'] = obj['mv']
db['gf'] = obj['gf']
db.close()
env.close()

