Turns out unoconv takes 2 seconds to perform the file conversion.
So after the file conversion, I had to set time.sleep(3) before upload a file to S3.
And after 1 week I got this working using variables.
Thanks
Ronaldo Bahia
+55 11 3280 6971
+55 11 963 622 581
Materiais gratuitos para o RH:
2017-08-07 17:17 GMT-03:00 Ronaldo Bahia <ronaldo@jobconvo.com>:
I don't know why but if I set the string ("cv.pdf"), it process just fine.If I use a variable instead, it doesn't.Here is the working code:# convert to PDFenv = os.environ.copy()env['HOME'] = '/tmp'subprocess.Popen(["unoconv","-f", "pdf", "-o", "cv.pdf","%s" % (file_in)], env = env) # Define S3 pathresume_path = 'resumes/%s/' % str(date.today())# key is the S3 file namekey = '%s%s' % (resume_path, file_out)# delete local filesubprocess.call("rm -f %s" % user_cv_file, shell=True)# update the new file formatuser_cv.resume = keyuser_cv.save()# S3 Connectionconn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_ KEY) bucket_out = Bucket(conn, settings.AWS_STORAGE_BUCKET_NAME) k_out = Key(bucket=bucket_out, name=user_cv.resume)# Upload to S3k_out.set_contents_from_filename('cv.pdf') k_out.make_public()# deleta o arquivo localmentesubprocess.call("rm -f cv.pdf", shell=True)Ronaldo Bahia+55 11 963 622 581Materiais gratuitos para o RH:2017-08-07 8:16 GMT-03:00 "Александр Христюхин (roboslone)" <roboslone@gmail.com>:Well, yeah, you're using local path basically. And you should NEVER use .split('/')[-1] to determine file basename, take a look at os.path module instead.--But that's not the point. You should try to use absolute path, I believe it would do the trick.On 4 Aug 2017, at 17:49, Ronaldo Bahia <ronaldo@jobconvo.com> wrote:To view this discussion on the web visit https://groups.google.com/d/msthe method is called in a def post() within a class view:user_cv = CandidateCV.objects.get(user=request.user) user_cv_file = str(user_cv.resume).split('/')[-1] s3upload(user_cv_file)The file is converted from doc to pdf in server project folder, where manage.py is.So probably there is no absolute path.How can I solve it?ThanksRonaldo Bahia+55 11 963 622 581Materiais gratuitos para o RH:2017-08-03 1:36 GMT-03:00 "Александр Христюхин (roboslone)" <roboslone@gmail.com>:Hi,Are you sure s3file contains absolute path? I can't see where s3upload is being called.Also, you might wanna use os.remove instead of calling subprocess.You also might wanna check out PEP-8 and Sphinx for your docstrings.On 2 Aug 2017, at 02:28, Ronaldo Bahia <ronaldo@jobconvo.com> wrote:You received this message because you are subscribed to the Google Groups "Django users" group.Hi everyone, can you help me?Thanks in advanceCode:
I'm converting doc and docx files to pdf in the server using unoconv with LibreOffice. And I need to upload to S3 the converted file.
I can convert with success the files and I can see them in the server.
But when I try to upload the pdf, I get the error. What am I missing?
Thanks in advance
This works just fine:
import subprocess from boto.s3.connection import S3Connection, Bucket, Key def doc_to_pdf(user): ''' Convert doc or docx to PDF. parameter user: is a request.user Usage: doc_to_pdf(self.request.user): ''' user_cv = CandidateCV.objects.get(user=user ) user_cv_file = str(user_cv.resume).split('/')[- 1] # tem que ser PDF user_cv_filetype = user_cv_file.split('.')[-1] if not user_cv_filetype in settings.PDF_FILE_TYPE: # Se não for PDF file_in = user_cv.resume.url file_name = file_in.split('/')[-1] # download urllib.request.urlretrieve(file_in , file_name) file_out = user_cv_file.split('.')[0] + '.pdf' # converte para PDF env = os.environ.copy() env['HOME'] = '/tmp' subprocess.Popen(["unoconv","-f" , "pdf", "%s" % (file_in)], env = env) # Define a path para salvar o documento na S3 resume_path = 'resumes/%s/' % str(date.today()) # key é o nome do arquivo na S3 key = '%s%s' % (resume_path, file_out) # deleta o arquivo localmente subprocess.call("rm -f %s" % user_cv_file, shell=True) # Salva o novo formato no banco user_cv.resume = key user_cv.save()This is the code in which I get the error in line:
k_out.set_contents_from_filename(s3file) def s3upload(s3file): # Conecta na AWS S3 conn = S3Connection(settings.AWS_ACCESS_KEY_ID , settings.AWS_SECRET_ACCESS_KEY) bucket_out = Bucket(conn, settings.AWS_STORAGE_BUCKET_NAME ) k_out = Key(bucket=bucket_out, name=s3file) # Define a path para salvar o documento na S3 resume_path = 'resumes/%s/' % str(date.today()) # key é o nome do arquivo na S3 key = '%s%s' % (resume_path, s3file) k_out.key = key # Salva na AWS S3 k_out.set_contents_from_filename (s3file) k_out.make_public() # deleta o arquivo localmente subprocess.call("rm -f %s" % s3file, shell=True)--
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com .
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/7cecdcdb-7fcf .-4f4a-858a-30801fa9cf9b%40goog legroups.com
For more options, visit https://groups.google.com/d/optout .
--
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/IDKZeRHtxyM/u .nsubscribe
To unsubscribe from this group and all its topics, send an email to django-users+unsubscribe@googlegroups.com .
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/6BC03BEF-B4AD .-49AB-8A2A-6EDDAD0DB13F%40gmai l.com --
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com .
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .gid/django-users/CAGz5-6gvNNWt .hLEFfyFicV_7voe75oWKypXP6Lxsuz KLeTWzDg%40mail.gmail.com
For more options, visit https://groups.google.com/d/optout .
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/IDKZeRHtxyM/ .unsubscribe
To unsubscribe from this group and all its topics, send an email to django-users+unsubscribe@googlegroups.com .
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/3DE439B9-5926 .-42DC-9862-85FF20DD66BE%40gmai l.com
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAGz5-6iVk1zxDNsxqLJ1qg3DujT%3DSXZTwXvdokWN%2BHznET-J9g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment