script to pull object ids/barcodes from the db for generating a constrictor propertie...
authorerickson <erickson@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Fri, 10 Jul 2009 20:11:17 +0000 (20:11 +0000)
committererickson <erickson@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Fri, 10 Jul 2009 20:11:17 +0000 (20:11 +0000)
git-svn-id: svn://svn.open-ils.org/ILS-Contrib/constrictor/trunk@579 6d9bc8c9-1ec2-4278-b937-99fde70a366f

contrib/evergreen/eg_prop_data_fetcher.py [new file with mode: 0755]

diff --git a/contrib/evergreen/eg_prop_data_fetcher.py b/contrib/evergreen/eg_prop_data_fetcher.py
new file mode 100755 (executable)
index 0000000..7c61907
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/python
+
+# ------------------------------------------------------------------
+# Pulls data from an evergreen database for building constrictor
+# property file entries.  The data can be chopped up into unique
+# data sets based on the segment size and count.  For each 
+# segment count, create a new set of property key/value pairs.
+# handles orgIds, patronIds, patronBarcodes, copyBarcodes, titleIds
+# ------------------------------------------------------------------
+import sys, time, sets, string
+from sqlalchemy import *
+from sqlalchemy.orm import create_session, relation, mapper
+
+db_path = 'postgres://evergreen:evergreen@127.0.0.1:5432/evergreen'
+# EDIT ME! ^--
+
+segment_size = int(sys.argv[1])
+segment_count = int(sys.argv[2])
+context_org = sys.argv[3]
+
+max_rows = segment_size * segment_count
+
+db = create_engine(db_path)
+db.echo = False
+metadata = MetaData(db)
+session = create_session()
+
+org_unit_table = Table('org_unit', metadata,
+    Column('id', Integer, primary_key=True), schema='actor')
+
+user_table = Table('usr', metadata, 
+    Column('id', Integer, primary_key=True), 
+    Column('home_ou', Integer),
+    schema='actor')
+
+card_table = Table('card', metadata, 
+    Column('id', Integer, primary_key=True), 
+    Column('usr', Integer),
+    Column('barcode', String),
+    schema='actor')
+
+copy_table = Table('copy', metadata, 
+    Column('id', Integer, primary_key=True), 
+    Column('barcode', String),
+    Column('circ_lib', Integer),
+    Column('status', Integer),
+    schema='asset')
+
+record_entry_table = Table('record_entry', metadata, 
+    Column('id', Integer, primary_key=True), schema='biblio')
+
+class OrgUnit(object): pass
+class Usr(object): pass
+class Card(object): pass
+class Copy(object): pass
+class RecordEntry(object): pass
+
+org_unit_mapper = mapper(OrgUnit, org_unit_table)
+org_unit_mapper = mapper(Usr, user_table)
+org_unit_mapper = mapper(Card, card_table)
+org_unit_mapper = mapper(Copy, copy_table)
+org_unit_mapper = mapper(RecordEntry, record_entry_table)
+
+org_units = session.query(OrgUnit).all()
+org_ids = [ str(obj.id) for obj in org_units ]
+
+users = session.query(Usr).filter(Usr.home_ou == context_org).limit(max_rows).all()
+user_ids = [ str(obj.id) for obj in users ]
+
+cards = session.query(Card).filter(Card.usr.in_(user_ids)).limit(max_rows).all()
+user_barcodes = [obj.barcode for obj in cards]
+
+copies = session.query(Copy).filter(Copy.circ_lib == context_org).filter(Copy.status == 0).limit(max_rows).all()
+copy_barcodes = [obj.barcode for obj in copies]
+
+record_entries = session.query(RecordEntry).limit(max_rows).all()
+bib_ids = [str(obj.id) for obj in record_entries]
+
+index = 0
+while index < max_rows:
+    print 'evergreen.orgIDs=%s' % ','.join(org_ids[index:segment_size+index])
+    print 'evergreen.titleIDs=%s' % ','.join(bib_ids[index:segment_size+index])
+    print 'evergreen.patronIDs=%s' % ','.join(user_ids[index:segment_size+index])
+    print 'evergreen.copyBarcodes=%s' % ','.join(copy_barcodes[index:segment_size+index])
+    print 'evergreen.patronBarcodes=%s' % ','.join(user_barcodes[index:segment_size+index])
+    index += segment_size
+    print '-'*100
+
+
+session.close()
+