ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Tool_Box/RelativityLib.py
Revision: 570
Committed: Wed Feb 4 16:05:05 2015 UTC (11 years, 1 month ago) by nino.borges
Content type: text/x-python
File size: 9589 byte(s)
Log Message:
A library for connecting to Relativity.

File Contents

# User Rev Content
1 nino.borges 570 """
2    
3     Relativity Library
4    
5     Created by
6     Emanuel Borges
7     05.22.2014
8    
9     This class will be my main Relativity library
10     Should DocumentTable and COTable be their own classes that subclass RelativityConnection?
11    
12    
13     TODO:
14     Make it so taht you van overide the site, username and pw. Right now it's created before you can overide.
15    
16     """
17    
18     import requests,json
19    
20     class Relativity_Connection(object):
21     """An Advanced Relativity Connection Library and Toolkit"""
22     version = '0.0.1'
23     ## Dev
24     #rootSite = 'http://dev.mcdermottdiscovery.com'
25     #rootUserName = 'eborges@mwe.com'
26     #rootPassword = 'MWEreldev2@'
27    
28     ## Prod
29     rootSite = 'https://www.mcdermottdiscovery.com'
30     rootUserName = 'eborges@mwe.com'
31     rootPassword = 'QEst3kU2!'
32    
33     def __init__(self, workSpace = None):
34     self.UpdateWorkspaceDict()
35     self.workSpace = workSpace
36     self.availableTables = None
37    
38     def UpdateWorkspaceDict(self):
39     """Updates the instance varible workSpaceDict with a {workspaceName:ID} dictionary"""
40     workSpaceDict = {}
41     r = requests.get(self.rootSite+'/Relativity.REST/Relativity/Workspace',auth=requests.auth.HTTPBasicAuth(self.rootUserName,self.rootPassword), headers={'X-CSRF-Header':""})
42     rawJson = r.json()
43     rawResults = rawJson['Results']
44     for i in rawResults:
45     workSpaceDict[i['Relativity Text Identifier']] = i['Artifact ID']
46    
47     self.workSpaceDict = workSpaceDict
48    
49     def GetAvilableTables(self):
50     """updates the list of available tables"""
51     pass
52    
53     def LoadWorkspace(self, workspaceName):
54     r = requests.get(self.rootSite+ '/Relativity.REST/Relativity/Workspace/%s'% self.workSpaceDict[workSpaceName],auth=requests.auth.HTTPBasicAuth(self.rootUserName,self.rootPassword), headers={'X-CSRF-Header':""})
55     self.workSpace = workSpaceName
56    
57    
58    
59     class DocumentTable(Relativity_Connection):
60    
61     def __init__ (self,workSpace):
62     self.workSpace = workSpace
63     super(DocumentTable,self).__init__(workSpace)
64     r = requests.get(self.rootSite+ '/Relativity.REST/Relativity/Workspace/%s/Document'% self.workSpaceDict[self.workSpace],auth=requests.auth.HTTPBasicAuth(self.rootUserName,self.rootPassword), headers={'X-CSRF-Header':""})
65     self.availableTables = r
66     #return r.__dict__
67    
68     def UpdateField(self,field):
69     d = {
70     "Artifact ID":1078252,"Artifact Type Name":"Tasks","Billing Time Used":5
71     }
72    
73     r = requests.put('https://dev.mcdermottdiscovery.com/Relativity.REST/Workspace/1016359/Tasks/1078252',
74     auth=requests.auth.HTTPBasicAuth('eborges@mwe.com','MWEreldev2@'),
75     headers={'X-CSRF-Header':"",'Content-Type':"application/json; charset=utf-8"},
76     data=json.dumps(d))
77    
78    
79    
80    
81     class CustomObjectTable(Relativity_Connection):
82     '''You can just insts this object if you already know the workspace # and objectName. Otherwise insts a sep rl object
83     to gather the workspace number and objectName'''
84     def __init__ (self, workSpace, objectName):
85     self.workSpace = workSpace
86     super(CustomObjectTable,self).__init__(workSpace)
87     r = requests.get(self.rootSite+ '/Relativity.REST/Workspace/%s/%s'% (self.workSpaceDict[self.workSpace],objectName),
88     auth=requests.auth.HTTPBasicAuth(self.rootUserName,self.rootPassword),
89     headers={'X-CSRF-Header':""})
90    
91     self.rlResponse = r.json()
92    
93     rlResponseCode = r.status_code
94     print rlResponseCode
95    
96     ## This is the ID of the workspace, which is needed when you update or create new items
97     ## This will only work if there are already items in this table, got to fix this...
98     self.parentID = self.rlResponse['Results'][0]['Parent Artifact']['Artifact ID']
99    
100     ## You wont get the field list until after you return 1 item from the RDO
101     self.fieldMatrix = None
102    
103     ## Count of the results both in total and on this page.
104     self.totalResultCount = self.UpdateTotalResultCount()
105     self.pageResultCount = self.UpdateCurrentResultCount()
106    
107     ## The matrix if returned items with artifactID:name. Cant do other way around, since name can dupe.
108     self.itemMatrix = self.UpdateItemMatrix()
109    
110    
111     ## The objectName stays the same, since you need a new instance for each table.
112     self.objectName = objectName
113    
114     ## Loading the item will update the field list and make that the active item
115     self.currentItems = None
116    
117     ## You may load 1 item using single item or query and get multiple items.
118     self.currentItemCount = None
119    
120    
121    
122     def LoadSingleItem(self, itemID):
123     '''loads a requested item into the instance and updates the field matrix'''
124     r = requests.get(self.rootSite+ '/Relativity.REST/Workspace/%s/%s/%s'% (self.workSpaceDict[self.workSpace],self.objectName,itemID),
125     auth=requests.auth.HTTPBasicAuth(self.rootUserName,self.rootPassword),
126     headers={'X-CSRF-Header':""})
127     rlResponse = r.json()
128     rlResponseCode = r.status_code
129     print rlResponseCode
130     self.currentItems = [rlResponse,]
131     self.UpdateFieldMatrix(self.currentItems[0]['__Fields'])
132     self.currentItemCount = len(self.currentItems)
133    
134     def QueryForItems(self,searchString):
135     '''takes a search string and brings back a matrix containing only those items that matched the search'''
136     payload = {
137     "condition":searchString,
138     "fields":["*"]
139     }
140     ## Note that it will give you a max of 100 here because I'm setting the page size.
141     r = requests.post(self.rootSite+ '/Relativity.REST/Workspace/%s/%s/QueryResult?pagesize=100'% (self.workSpaceDict[self.workSpace],self.objectName),
142     auth=requests.auth.HTTPBasicAuth(self.rootUserName,self.rootPassword),
143     headers={'X-CSRF-Header':"",'Content-Type':"application/json; charset=utf-8"},
144     data=json.dumps(payload))
145     rlResponse = r.json()
146     rlResponseCode = r.status_code
147     print rlResponseCode
148     self.currentItems = rlResponse['Results']
149     #print self.currentItems
150     self.UpdateFieldMatrix(self.currentItems[0]['__Fields'])
151     self.currentItemCount = len(self.currentItems)
152     return self.currentItems
153    
154     def UpdateItemMatrix(self):
155     ''' Updates the item matrix with ArtifactID:name and also puts all names in the itemlist'''
156     itemMatrix = {}
157     for i in self.rlResponse['Results']:
158     itemMatrix[i['Artifact ID']] = i['Relativity Text Identifier']
159     return itemMatrix
160    
161    
162     def UpdateTotalResultCount(self):
163     '''Returns the current totalResultCount'''
164     return self.rlResponse['TotalResultCount']
165    
166     def UpdateCurrentResultCount(self):
167     '''Returns the current result count for the page that you are on'''
168     return self.rlResponse['ResultCount']
169    
170     def UpdateFieldMatrix(self,rawFieldDict):
171     '''Returns the list of fields in the table object'''
172     fieldMatrix = {}
173     for i in rawFieldDict:
174     fieldMatrix[i['Name']] = i['Field Type']
175     self.fieldMatrix = fieldMatrix
176    
177    
178     def CreateNewItem(self, itemFieldMatrix):
179     '''Allows you to create a new item in the DO, by passing a matrix of fields and their values'''
180     itemFieldMatrix["Artifact Type Name"] = self.objectName
181     itemFieldMatrix["Parent Artifact"] = {"Artifact ID":self.parentID}
182    
183     r = requests.post(self.rootSite+ '/Relativity.REST/Workspace/%s/%s'% (self.workSpaceDict[self.workSpace],self.objectName),
184     auth=requests.auth.HTTPBasicAuth(self.rootUserName,self.rootPassword),
185     headers={'X-CSRF-Header':"",'Content-Type':"application/json; charset=utf-8"},
186     data=json.dumps(itemFieldMatrix))
187     rlResponse = r.json()
188     rlResponseCode = r.status_code
189     print rlResponseCode
190     artID = rlResponse['Results'][0]['ArtifactID']
191     ## Returning the artifact id?, not sure about this. maybe should return status and allow you to get at artifact...
192     return artID
193     #d = {
194     # "Name":"TEST","Artifact Type Name":"Tasks","Billing Time Used":5,"Parent Artifact":{"Artifact ID":1003663}
195     #}
196     #
197     #r = requests.post('https://dev.mcdermottdiscovery.com/Relativity.REST/Workspace/1016359/Tasks',
198     # auth=requests.auth.HTTPBasicAuth('eborges@mwe.com','MWEreldev2@'),
199     # headers={'X-CSRF-Header':"",'Content-Type':"application/json; charset=utf-8"},
200     # data=json.dumps(d))
201    
202    
203     def UpdateField(self,field):
204    
205     d = {
206     "Artifact ID":1078252,"Artifact Type Name":"Tasks","Billing Time Used":5,"Parent Artifact":{"Artifact ID":1003663}
207     }
208    
209     r = requests.put(self.rootSite+ '/Relativity.REST/Workspace/1016359/Tasks/1078252',
210     auth=requests.auth.HTTPBasicAuth(self.rootUserName,self.rootPassword),
211     headers={'X-CSRF-Header':"",'Content-Type':"application/json; charset=utf-8"},
212     data=json.dumps(d))
213    
214