As requested, a sample script that creates a new folder and uploads files into SharePoint site from linux command line.
The full SharePoint path looks like this:
http:// mysite / MyFirstSPSite / Reports / [current_iso_date] / [uploaded_file.txt]
#!/usr/bin/python2.4
import datetime as dt
import sys
from suds.transport.https import WindowsHttpAuthenticated
from suds.sax.element import Element
from suds.sax.element import Attribute
from suds import client
from ntlm import HTTPNtlmAuthHandler
import urllib2
import os.path
FOLDER = dt.date.today().strftime("%Y-%m-%d") #folder name that will be created
FNAME = sys.argv[1] #file name to upload
SITE = "http://mysite/MyFirstSPSite"
FURL = "%s/Reports/%s/%s" % (SITE,FOLDER,os.path.basename(FNAME))
USER = "uk\\user_name_goes_here" # AD user name
PASS = "password_goes_here"
def main():
wss_lists = client.Client("%s/_vti_bin/lists.asmx?WSDL" % SITE,transport=WindowsHttpAuthenticated(username=USER,password=PASS))
wss_dws = client.Client("%s/_vti_bin/dws.asmx?WSDL" % SITE,transport=WindowsHttpAuthenticated(username=USER,password=PASS))
wss_dws.service.CreateFolder("Reports/%s" % FOLDER)
print uploadReport(FURL,sys.argv[1])
wss_lists.service.UpdateListItems("Reports",getUpdatesElement(FURL,"Title goes here"))
def getUpdatesElement(furl,title = ''):
b = Element("Batch")
b.append(Attribute("OnError","Continue")).append(Attribute("ListVersion","3"))
bm= Element("Method")
bm.append(Attribute("ID","1")).append(Attribute("Cmd","Update"))
bm.append(Element("Field").append(Attribute("Name","ID")).setText(''))
bm.append(Element('Field').append(Attribute('Name','FileRef')).setText(furl))
bm.append(Element('Field').append(Attribute('Name','CustomProperty1')).setText('Value1'))
bm.append(Element('Field').append(Attribute('Name','CustomProperty2')).setText('Value2'))
bm.append(Element('Field').append(Attribute('Name','Title')).setText(title))
b.append(bm)
u = Element("ns1:updates")
u.append(b)
return u
def uploadReport(furl,fname):
pm = urllib2.HTTPPasswordMgrWithDefaultRealm()
pm.add_password(None,'http://mysite',USER,PASS)
op = urllib2.build_opener(HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(pm))
#import pdb;pdb.set_trace()
fh = open(fname)
data = fh.read()
fh.close()
req = urllib2.Request(furl,data=data)
req.get_method = lambda: 'PUT'
req.add_header('Content-Type','text/csv')
r = op.open(req)
return r.read()
if __name__=="__main__": main()
Hope that helps :)