我正在尝试将Django模型中的内容作为csv文件上传。我不想将文件保存在本地,而是将其保留在缓冲区中并上传到s3。当前,此代码不会按原样错误,并且会正确上传文件,但是文件为空。
file_name='some_file.csv'
fields = [list_of_fields]
header = [header_fields]
buff = io.StringIO()
writer = csv.writer(buff, dialect='excel', delimiter=',')
writer.writerow(header)
for value in some_queryset:
row = []
for field in fields:
# filling in the row
writer.writerow(row)
# Upload to s3
client = boto3.client('s3')
bucket = 'some_bucket_name'
date_time = datetime.datetime.now()
date = date_time.date()
time = date_time.time()
dt = '{year}_{month}_{day}__{hour}_{minute}_{second}'.format(
day=date.day,
hour=time.hour,
minute=time.minute,
month=date.month,
second=time.second,
year=date.year,
)
key = 'some_name_{0}.csv'.format(dt)
client.upload_fileobj(buff, bucket, key)
Run Code Online (Sandbox Code Playgroud)
如果我使用缓冲区的内容,那肯定是在写它:
content = buff.getvalue()
content.encode('utf-8')
print("content: {0}".format(content)) # prints the csv …Run Code Online (Sandbox Code Playgroud) 我想做的事情:
我需要发送客户.ics文件,这些文件将在客户下载并双击(并选择填充他们的 Outlook 日历)后立即填充他们的 Outlook 日历。
当我在本地测试时,如果我将 Outlook 设置为工作,下面的 iCalendar 代码可以正常工作offline- 为每个事件生成一个 UID once,我可以一次又一次地使用同一文件,并且将not生成一个新事件 - 因为 UID 被识别展望已经存在。(这样我就可以依靠UID来更新,也可以取消)
问题是,当我使用onlineOutlook 时,每次使用该文件填充日历时,都会生成一个随机 UID(长 112 个字符) - 即使对于相同的事件 - 因此会生成重复的事件every time!
.ics 文件的示例:
BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
BEGIN:VEVENT
UID:12345
DTSTART:20190715T020222Z
DTEND:20190715T030222Z
DESCRIPTION:Some fake summary - first event
DTSTAMP:20190715T010222Z
SEQUENCE:0
SUMMARY:this is the first event summary
END:VEVENT
BEGIN:VEVENT
UID:67890
DTSTART:20190715T040222Z
DTEND:20190715T050222Z
DESCRIPTION:Some fake summary - second event
DTSTAMP:20190715T010222Z
SEQUENCE:0
SUMMARY:this is the …Run Code Online (Sandbox Code Playgroud) 使用Python 3.5,requests == 2.18.4,Flask == 0.12.2,urllib3 == 1.22
some_method我的主server.py文件中有一个方法,该方法应该POST使用一些数据来生成一些URL:
def some_method(url, data):
...
error = None
try:
response = requests.post(url, json=data)
except requests.exceptions.ConnectionError as e:
...
app.logger.error(...)
response = None
error = str(e)
return error, response
Run Code Online (Sandbox Code Playgroud)
服务器文件定义:app = Flask(__name__),并some_method从调用@app.route(... methods=['PATCH'])。
如果此方法引发错误,则路由最终将返回500。
从一个测试文件运行测试,import server并app = server.app使用unittest和导入应用程序mock.patch。
我能够测试整个应用程序的行为,并进行测试,该测试显示该方法返回错误并看到路由在正确的位置终止时,应用程序路由的行为符合预期:
class ServerTestCase(unittest.TestCase):
...
@patch('server.some_method')
def test_route_response_status_500_when_throws(self, mock_response):
mock_response.return_value = 'some_error_string', None
response = …Run Code Online (Sandbox Code Playgroud)