• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

djthyrax

[Open Source] File uploader - upload-ua-ftp

17 mensagens neste tópico

Titulo do Projecto: upload-ua-ftp

Última Versão: 0.2.2

Líder do Projecto: djthyrax

Membros Actuais do Projecto: djthyrax

Tópicos deste Projecto: Apenas este

Descrição do Projecto:

upload-ua-ftp: envio de ficheiros para o servidor de FTP da UA.

Este script escrito em Python possibilita o envio de 1 ou mais ficheiros para o FTP da UA através da linha de comandos.

Como usar:

Em sistemas *nix:

Fazer download da aplicação para a pasta do utilizador.

unzip upload-ua-ftp.zip

python upload-ua-ftp.py --help

Para escrever apenas upload-ua-ftp --help cada vez que quer correr o programa, faça como root: cp upload-ua-ftp.py /usr/bin/upload-ua-ftp seguido de chmod +x /usr/bin/upload-ua-ftp

Embora tenha sido feito num sistema *nix, este script também funciona em Windows, precisando apenas do interpretador de Python. Para correr o script, faça o seguinte:

Faça o download da aplicação para Os Meus Documentos

Extrair o zip

Iniciar > Executar > cmd

cd "Os meus documentos"

upload-ua-ftp.py --help

Download:

Changelog:

Versão 0.2.2 - 18-08-2007

Fixed - um print desnecessário da directoria

Fixed - bug no argumento --links

Versão 0.2.1 - 17-08-2007

Fixed - erro no parsing dos argumentos aquando da especificação de opções.

Versão 0.2 - 15-08-2007

Fixed - erro no uso de caminhos completos

Fixed - handling do except raised na falha de abertura de ficheiro

Fixed - erro no parsing dos argumentos

Adicionado - possibilidade de especificação de directorias para upload, sendo estas percorridas recursivamente e enviadas para o servidor com o nome directoriaespecificada_subdir_subsubdir_ficheiro.extensao

Versão 0.1 - 15-08-2007:

Lançamento inicial.

Feedback mais que apreciado, amado. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem.... o espectro de utilização deste programa reduz-se a um ponto.

Mas ya... faz isso, é um exemplo de utilização de python como substituição do shellscript.

Não tem é grande utilidade :D

Nada que o curl ou mesmo o ftp que vem com o windows ou o do linux ( todas as distros ) não façam.

$man ftp
$man curl

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens um bug no programa djthyrax.

Se tu deres um ficheiro que não exista (ou coloques as flags após a pasta e os fichieiros), o programa dá-te um IOError.

Vá lá que é fácil de corrigir ;)

É só colocar um bloco try - except IOError entre as linhas 63 e 72

Esta zona:

			for i in args:
				fp = open(i,'rb')
				if config["verbose"] == True: print "A enviar %s..." % (i),
				ftp.storbinary('STOR %s' % (i), fp)
				if config["verbose"] == True: print "enviado."
				if config["links"] == True:
					print "Link para %s:\nftp://ftp.ua.pt/%s/%s" % (i, dir, i)
					if config["verbose"] == True: print # para ficar organizado
				fp.close()
			ftp.quit()



Fica assim:


			try:
				for i in args:
					fp = open(i,'rb')
					if config["verbose"] == True: print "A enviar %s..." % (i),
					ftp.storbinary('STOR %s' % (i), fp)
					if config["verbose"] == True: print "enviado."
					if config["links"] == True:
						print "Link para %s:\nftp://ftp.ua.pt/%s/%s" % (i, dir, i)
						if config["verbose"] == True: print # para ficar organizado
					fp.close()
				ftp.quit()
			except IOError:
				print "O ficheiro %s não foi encontrado." % (i)
				sys.exit(0)

E já está :D

EDIT: Descobri mais dois bugs com o programa.

Primeiro, a mensagem "A enviar teste.txt... enviado." aparece toda junta, ou seja, se um ficheiro for demasiado grande, não aparece nada escrito durante o upload (ou seja, não aparece o "A enviar teste.txt") para depois no final aparecer as duas coisas ("A enviar teste.txt..." e depois o "enviado.")

Este bug deve de ser fácil de corrigir, é só mudar de sítio o print do "A enviar teste.txt"

Segundo bug que encontrei é que não podes usar absolute paths, ou seja, se eu estiver no desktop e quiser enviar o ficheiro /home/rolando/Videos/porn-best-of-cythera.avi, o programa dá um erro, no entanto, isso parece ser já problema do ftplib e não do programa em si.

Traceback (most recent call last):

  File "./upload-ua-ftp.py", line 67, in ?

    ftp.storbinary('STOR %s' % (i), fp)

  File "/usr/lib/python2.4/ftplib.py", line 415, in storbinary

    conn = self.transfercmd(cmd)

  File "/usr/lib/python2.4/ftplib.py", line 345, in transfercmd

    return self.ntransfercmd(cmd, rest)[0]

  File "/usr/lib/python2.4/ftplib.py", line 327, in ntransfercmd

    resp = self.sendcmd(cmd)

  File "/usr/lib/python2.4/ftplib.py", line 241, in sendcmd

    return self.getresp()

  File "/usr/lib/python2.4/ftplib.py", line 216, in getresp

    raise error_perm, resp

ftplib.error_perm: 550 /home/rolando/Videos/porn-best-of-cythera.avi: Permission denied

Este bug não sei como resolver...

Talvez com um os.chdir() a todas as pastas que são passadas durante o run time. Podes obter as pastas, passando todos os ficheiros por um os.path.dirname().

Depois se tiver tempo, ainda vejo isso. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens um bug no programa djthyrax.

Se tu deres um ficheiro que não exista (ou coloques as flags após a pasta e os fichieiros), o programa dá-te um IOError.

Vá lá que é fácil de corrigir ;)

É só colocar um bloco try - except IOError entre as linhas 63 e 72

Esta zona:

[...]

Fica assim:


			try:
				for i in args:
					fp = open(i,'rb')
					if config["verbose"] == True: print "A enviar %s..." % (i),
					ftp.storbinary('STOR %s' % (i), fp)
					if config["verbose"] == True: print "enviado."
					if config["links"] == True:
						print "Link para %s:\nftp://ftp.ua.pt/%s/%s" % (i, dir, i)
						if config["verbose"] == True: print # para ficar organizado
					fp.close()
				ftp.quit()
			except IOError:
				print "O ficheiro %s não foi encontrado." % (i)
				sys.exit(0)

[...]

Primeiro, a mensagem "A enviar teste.txt... enviado." aparece toda junta, ou seja, se um ficheiro for demasiado grande, não aparece nada escrito durante o upload (ou seja, não aparece o "A enviar teste.txt") para depois no final aparecer as duas coisas ("A enviar teste.txt..." e depois o "enviado.")

Este bug deve de ser fácil de corrigir, é só mudar de sítio o print do "A enviar teste.txt"

[...]

Segundo bug que encontrei é que não podes usar absolute paths, ou seja, se eu estiver no desktop e quiser enviar o ficheiro /home/rolando/Videos/porn-best-of-cythera.avi, o programa dá um erro, no entanto, isso parece ser já problema do ftplib e não do programa em si.

In fact, vai ficar:


			for path in args:
				try:
					i = path.split("/")[-1] # para o terceiro bug que indicaste.
					fp = open(path,'rb')
				except IOError: # fica aqui para permitir o envio dos outros ficheiros passados
					print "O ficheiro %s não foi encontrado ou não tem permissões suficientes." % (path)
					continue

				if config["verbose"] == True: print "A enviar %s..." % (i) # o bug do aparecer tudo duma vez estava aqui na virgula. tenho de arranjar forma de evitar o \n
				ftp.storbinary('STOR %s' % (i), fp)
				if config["verbose"] == True: print "enviado."
				if config["links"] == True:
					print "Link para %s:\nftp://ftp.ua.pt/%s/%s" % (path, dir, i)
					if config["verbose"] == True: print # para ficar organizado
				fp.close()
			ftp.quit()

E penso que há problemas com o parsing dos argumentos. já resolvo isso. :D

Dentro de pouco tempo lanço outra versão. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem.... o espectro de utilização deste programa reduz-se a um ponto.

Mas ya... faz isso, é um exemplo de utilização de python como substituição do shellscript.

Não tem é grande utilidade ;)

Nada que o curl ou mesmo o ftp que vem com o windows ou o do linux ( todas as distros ) não façam.

$man ftp
$man curl

Não tem grande utilidade?! Diz-me, o que é mais prático: upload-ua-ftp pornoporolando filme.avi ou ftp ftp.ua.pt e fazeres as cenas todas à mão? Neste momento, pode não ser a coisa mais prática do mundo, mas estou a pensar implementar suporte a pastas, para poderes fazer upload-ua-ftp stuff ./ por exemplo. Com isso, vai ficar ainda mais prático. Mas lá está, that's just me. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez para o pedrotuga não seja prático porque ele não deve precisar frequentemente de fazer upload de ficheiros para o fTP da UA. Agora para os que apenas têm tráfego nacional e que querem partilhar uns ficheiros, dá mesmo muito jeito.

djthyrax, podias fazer uma versão universal para FTPs, em vez de estar limitado ao FTP da UA.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax, podias fazer uma versão universal para FTPs, em vez de estar limitado ao FTP da UA.

Vou pensar em adicionar umas opções para isso. ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Versão 0.2 lançada: http://www.hdd.com.pt/815745

Changelog:

Fixed - erro no uso de caminhos completos

Fixed - handling do except raised na falha de abertura de ficheiro

Fixed - erro no parsing dos argumentos

Adicionado - possibilidade de especificação de directorias para upload, sendo estas percorridas recursivamente e enviadas para o servidor com o nome directoriaespecificada_subdir_subsubdir_ficheiro.extensao

E não Triton, não me esqueci da tua sugestão. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tomei muita atenção ao projecto, apenas à licença, que se queres que possa ser protegida, terás de a mudar, já que essa licença não existem e não é legal em Portugal. Sendo que estando tu em Portugal terás de te guiar pela legislação Portuguesa ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tomei muita atenção ao projecto, apenas à licença, que se queres que possa ser protegida, terás de a mudar, já que essa licença não existem e não é legal em Portugal. Sendo que estando tu em Portugal terás de te guiar pela legislação Portuguesa ;)

Eu não quero o código protegido, o código é public-domain. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então queres que seja protegido como tal... ou eu posso pegar nesse código, retirar-te todos os direitos e fechar o código?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então queres que seja protegido como tal... ou eu posso pegar nesse código, retirar-te todos os direitos e fechar o código?

Fazeres o que quiseres, caso contrário tinha escolhido uma licença Attribution-ShareAlike ou Attribution-NonCommercial-ShareAlike ou Attribution-NoDerivs (Creative Commons).
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, então vou ser mais chato. Não é possível colocar uma obra em dominio público, a obra "cai" em dominio público quando passarem as datas para o efeito, o autor não pode colocar a obra em dominio público, o que quer dizer que não é legal o que estás a fazer e não posso usar esse software porque não tenho autorização do autor ;)

Por outro lado, se assumir que tenho essa autorização posso pegar no código, fechá-lo e proibir qualquer outra pessoa de o utilizar, basta registar o código ou lançar o software numa licença fechada dado que a forma a que chamastes licença não serve de nada.

Claro que ninguém vai fazer isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

... a que chamastes licença ...

Eu chamei licença porque não me veio outro nome à cabeça. ;) As primeiras versões pretendo lançar em domínio publico, mudando depois para uma Creative Commons lá mais para a frente, quando me der ao trabalho de investigar. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax se quiseres podes usar a licença WTFPL aka Do What The Fuck You Want

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE

                    Version 2, December 2004

Copyright © 2004 Sam Hocevar

  14 rue de Plaisance, 75014 Paris, France

Everyone is permitted to copy and distribute verbatim or modified

copies of this license document, and changing it is allowed as long

as the name is changed.

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE

  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. You just DO WHAT THE FUCK YOU WANT TO.

Do FAQ deles:

Is the WTFPL a valid license?

Although the validity of the WTFPL has not been tested in courts, it is widely accepted as a valid license. Every major Linux distribution (Debian, Red Hat, Gentoo, SuSE, Mandrake, etc.) ships software licensed under the WTFPL, version 1 or 2. Bradley Kuhn (executive director of the Free Software Foundation) was quoted saying that the FSF’s folks agree the WTFPL is a valid free software license.

(ou então lanças em GPL ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites