203
203
coding spcifiers shown above will be applied to every field of the appropriate type. If that is not what you
204
204
want, process fields individually using replace() or curvalstrex().
205
205
"""
206
+
207
+ from __future__ import print_function , absolute_import
206
208
import decimal
207
209
import os
208
210
import csv
@@ -311,6 +313,7 @@ def __init__(self, bLargeMode=False):
311
313
self .xNonPrintables [ord (c )] = None
312
314
self .cbt = cbp
313
315
self .nDataSession = self .cbt .initdatasession (bLargeMode )
316
+
314
317
self .oCSV = csv
315
318
self .xLastFieldList = [] # Used by scattertorecord() to avoid having to repeat afields()
316
319
self .cLastRecordAlias = "" # ditto
@@ -514,6 +517,7 @@ def use(self, tableName, alias="", readOnly=False, exclusive=False, noBuffering=
514
517
self .cErrorMessage = "NO table name supplied"
515
518
self .nErrorNumber = - 49348
516
519
return False
520
+
517
521
# if "LTLACCESSENABLE" in tableName:
518
522
# import traceback
519
523
# stack_str = ''.join(traceback.format_stack())
@@ -530,6 +534,7 @@ def use(self, tableName, alias="", readOnly=False, exclusive=False, noBuffering=
530
534
if not lbReturn :
531
535
self .cErrorMessage = self .cbt .geterrormessage () + " OPEN FAILED"
532
536
self .nErrorNumber = self .cbt .geterrornumber ()
537
+
533
538
return lbReturn
534
539
535
540
def maketempindex (self , lcExpr , tagFilter = "" , descending = 0 ):
@@ -584,7 +589,7 @@ def selecttempindex(self, lnCode):
584
589
lbReturn = self .cbt .selecttempindex (lnCode )
585
590
if (not lbReturn ):
586
591
self .cErrorMessage = self .cbt .geterrormessage ()
587
- self .nErrorNumber = self .cbt .geterrornumber ()
592
+ self .nErrorNumber = self .cbt .geterrornumber ()
588
593
return lbReturn
589
594
590
595
def closetempindex (self , lnCode ):
@@ -2880,7 +2885,9 @@ def closetable(self, alias=""):
2880
2885
"""
2881
2886
self .cErrorMessage = ""
2882
2887
self .nErrorNumber = 0
2888
+ cTable = self .dbf (alias )
2883
2889
lbReturn = self .cbt .closetable (alias )
2890
+
2884
2891
if not lbReturn :
2885
2892
self .cErrorMessage = self .cbt .geterrormessage ()
2886
2893
self .nErrorNumber = self .cbt .geterrornumber ()
@@ -2936,6 +2943,7 @@ def closedatabases(self):
2936
2943
"""
2937
2944
self .cErrorMessage = ""
2938
2945
self .nErrorNumber = 0
2946
+
2939
2947
lbReturn = self .cbt .closedatabases ()
2940
2948
if not lbReturn :
2941
2949
self .cErrorMessage = self .cbt .geterrormessage ()
@@ -3772,7 +3780,7 @@ def scan(self, indexTag="", forExpr="", noData=False, fieldList=None, getList=Fa
3772
3780
if self .cbt .geterrornumber () != 0 :
3773
3781
self .cErrorMessage = self .cbt .geterrormessage ()
3774
3782
self .nErrorNumber = self .cbt .geterrornumber ()
3775
- raise ValueError ("Scan failed with err: " + str (self .cErrorMessage ))
3783
+ raise ValueError ("Scan failed with err: " + str (self .cErrorMessage )+ " " + self . dbf () )
3776
3784
break
3777
3785
yield lxDict
3778
3786
if oCBT .alias () != lcCurrentTable :
@@ -3795,7 +3803,7 @@ def scan(self, indexTag="", forExpr="", noData=False, fieldList=None, getList=Fa
3795
3803
if self .cbt .geterrornumber () != 0 :
3796
3804
self .cErrorMessage = self .cbt .geterrormessage ()
3797
3805
self .nErrorNumber = self .cbt .geterrornumber ()
3798
- raise ValueError ("Scan failed with err: " + str (self .cErrorMessage ))
3806
+ raise ValueError ("Scan failed with err: " + str (self .cErrorMessage ) + " " + self . dbf () )
3799
3807
break
3800
3808
yield lxDict
3801
3809
if oCBT .alias () != lcCurrentTable :
@@ -4096,7 +4104,7 @@ def makeXMLValueString(self, xValue, cType):
4096
4104
4097
4105
return cRet
4098
4106
4099
- def getNewKey ( self , dataDir , filename = None , readOnly = False , stayOpen = False , noFlush = False ):
4107
+ def getNewKey (self , dataDir , filename = None , readOnly = False , stayOpen = False , noFlush = False ):
4100
4108
"""
4101
4109
Copy of GetNewKey from VFP. Returns the next sequential key number for the passed filename or a negative
4102
4110
value on error. M-P System Services, Inc., specific code.
@@ -4122,7 +4130,7 @@ def getNewKey( self, dataDir, filename=None, readOnly=False, stayOpen=False, noF
4122
4130
by using a NextKey.dbf table to store the "next key" value of each table in your system. The NextKey.dbf
4123
4131
table is expected to have two fields:
4124
4132
Field Field Name Type Width Dec Index Collate Nulls Next Step
4125
- 1 TABLE_NAME Character 15 Asc Machine No
4133
+ 1 TABLE_NAME Character 20 Asc Machine No
4126
4134
2 NEXTKEYVAL Integer 4 No
4127
4135
4128
4136
and to have an index called TABLE_NAME on UPPER(TABLE_NAME). The dataDir parameter tells the function
@@ -4293,17 +4301,22 @@ def openTableList(self, aTables, cPath=""):
4293
4301
self .cErrorMessage = "openTableList Failed because: %s, %d" % (self .cErrorMessage , self .nErrorNumber )
4294
4302
return lxReturn
4295
4303
4296
- _cbToolsobj = _cbTools () # always in use
4304
+
4305
+ # _cbToolsobj = _cbTools() # always in use
4306
+ _cbToolsobj = None # Only instantiated if needed.
4297
4307
_cbToolsLargeobj = None # only instantiated if needed
4298
4308
4299
4309
4300
4310
def cbTools (bIsLarge = False ):
4301
4311
global _cbToolsLargeobj
4312
+ global _cbToolsobj
4302
4313
if bIsLarge :
4303
4314
if _cbToolsLargeobj is None :
4304
4315
_cbToolsLargeobj = _cbTools (True )
4305
4316
return _cbToolsLargeobj
4306
4317
else :
4318
+ if _cbToolsobj is None :
4319
+ _cbToolsobj = _cbTools ()
4307
4320
return _cbToolsobj
4308
4321
4309
4322
@@ -4745,8 +4758,7 @@ def copydatatable(cTableName="", cSourceDir="", cTargetDir="", bByZap=False, oCB
4745
4758
4746
4759
def cbtWork ():
4747
4760
tmpdir = 'c:\\ MPSSPythonScripts\\ TestDataOutput'
4748
- from MPSSCommon .MPSSBaseTools import confirmPath , DELETEFILE
4749
- if not confirmPath (tmpdir ):
4761
+ if not mTools .confirmPath (tmpdir ):
4750
4762
tmpdir = ''
4751
4763
# Create Table Example #1
4752
4764
xFlds = list ()
@@ -4773,7 +4785,7 @@ def cbtWork():
4773
4785
lnStart = time ()
4774
4786
4775
4787
testname = os .path .join (tmpdir , "employee1.dbf" )
4776
- DELETEFILE (testname )
4788
+ mTools . DELETEFILE (testname )
4777
4789
print (testname )
4778
4790
bResult = vfp .createtable (testname , lcFld )
4779
4791
lnEnd = time ()
@@ -4929,7 +4941,7 @@ def cbt_test():
4929
4941
vfp = cbTools ()
4930
4942
vfp .use ("e:\\ loadbuilder2\\ appdbfs\\ 73rdstrt\\ shipmstr.dbf" , alias = "SHIPMSTR" )
4931
4943
nStart = time ()
4932
- nResult = vfp .copyto (cAlias = "SHIPMSTR" , cOutput = cDest , cType = "DBF" , cTestExpr = '' , bHeader = True , bStripBlanks = True )
4944
+ nResult = vfp .copyto (cAlias = "SHIPMSTR" , cOutput = cDest , cType = "DBF" , cTestExpr = '' , bHeader = True , bStripBlanks = False )
4933
4945
nEnd = time ()
4934
4946
vfp .closetable ("SHIPMSTR" )
4935
4947
print ("ELAPSED TIME: " , (nEnd - nStart ))
@@ -4939,8 +4951,8 @@ def cbt_test():
4939
4951
print ("NRESULT: " , nResult )
4940
4952
# return True
4941
4953
tmpdir = 'c:\\ MPSSPythonScripts\\ TestDataOutput'
4942
- from MPSSCommon . MPSSBaseTools import confirmPath
4943
- if not confirmPath (tmpdir ):
4954
+
4955
+ if not mTools . confirmPath (tmpdir ):
4944
4956
tmpdir = ''
4945
4957
# Create Table Example #1
4946
4958
lcFld = "firstname,C,25,0,FALSE\n "
@@ -5181,6 +5193,8 @@ def cbt_test():
5181
5193
# return lbResult
5182
5194
5183
5195
5196
+ __all__ = ["_cbTools" , "cbTools" , "cbToolsX" , "TableObj" , "copydatatable" , "VFPFIELD" ]
5197
+
5184
5198
if __name__ == "__main__" :
5185
5199
print ("***** Testing CodeBaseTools.py components" )
5186
5200
cbt_test ()
@@ -5189,7 +5203,8 @@ def cbt_test():
5189
5203
print (lbResult )
5190
5204
print ("***** Testing Complete" )
5191
5205
if 'stop' in sys .argv :
5192
- raw_input ('press <enter>' )
5206
+ if not _ver3x :
5207
+ raw_input ('press <enter>' )
5208
+ else :
5209
+ input ('press <enter>' )
5193
5210
5194
-
5195
-
0 commit comments