本文整理汇总了Python中models.Transaction.directory方法的典型用法代码示例。如果您正苦于以下问题:Python Transaction.directory方法的具体用法?Python Transaction.directory怎么用?Python Transaction.directory使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类models.Transaction
的用法示例。
在下文中一共展示了Transaction.directory方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: transaction
# 需要导入模块: from models import Transaction [as 别名]
# 或者: from models.Transaction import directory [as 别名]
def transaction( request):
'''
View for handling transaction start/stop
<base_url>/transaction?Action=Start
<base_url>/transaction?Action=Stop&TransID=<ID>
'''
# Validate the request
if request.method != 'GET':
return HttpResponse( err_not_get(), status=400) # Bad request
if not 'Action' in request.GET:
return HttpResponse( err_missing_param( 'Action'), status=400) # Bad request
action = request.GET['Action']
if not (action == 'Start' or action == 'Stop'):
return HttpResponse( json_err_msg("Expected either 'Start' or 'Stop' for the 'Action' parameter."),
status=400)
if action == 'Start':
# Start a new transaction
new_trans = Transaction()
new_trans.owner = request.user
new_trans.save() # Need to call save() so that the id value is generated
# generate the name and create the directory
dir_name = os.path.join( settings.TRANSACTION_DIR, request.user.username + '_' + str(new_trans.id))
os.mkdir(dir_name, 0770)
# Use setfacl to give the user read, write & execute permissions
# on the directory we just created
permissions = request.user.username + ':rwX'
proc = subprocess.Popen([settings.SETFACL_BIN, '-m', permissions, dir_name])
proc.wait()
if proc.returncode != 0:
# couldn't set the ACL (maybe this filesystem doesn't support ACL's?)
# so we need to fail the operation and that means cleaning up after
# ourselves
recursive_rm( dir_name)
new_trans.delete()
return HttpResponse( json_err_msg( "Cannot start transaction: Failed to set ACL's on transaction directory."),
status=500) # internal server error
# If we make it here, everything's good - save the transaction object
# to the DB and return the required JSON
new_trans.directory = dir_name
new_trans.save()
json_out = { }
json_out['TransID'] = new_trans.id
json_out['Directory'] = dir_name
return HttpResponse( json.dumps( json_out))
else:
# Stop an existing transaction
# Need to specify the transaction ID
(trans, error_response) = validate_trans_id( request)
if error_response != None:
# TransID didn't validate...
return error_response
# The transaction is validated - delete the files/directories
recursive_rm( trans.directory)
# delete the transaction from the db (Django defaults to 'cascaded' deletes,
# so all we need to do is remove the transaction and everything that was pointing
# to it (jobs & files) will also be removed
trans.delete()
return HttpResponse()