added setup.py, restructured files to be a python package. fixed issue #4. updated readme

This commit is contained in:
richard@richard.do 2013-02-16 00:34:16 +00:00
parent 8d2dbb597b
commit 17b4d0363a
9 changed files with 75 additions and 13 deletions

5
.gitignore vendored
View file

@ -4,4 +4,7 @@
# Hidden files # # Hidden files #
################### ###################
.* .*
# Build files #
###################
build/

View file

@ -1,4 +1,4 @@
cyberjujum cyberjujum
richardasaurus richardasaurus
jlejeune jlejeune
issues: zbahoui,alyssarowan issues: zbahoui,alyssarowan,kionez

View file

@ -12,6 +12,17 @@ This is a work in progress, further functionality coming shortly.
## How To Use ## How To Use
### Install mega.py package
- Download the source code
- Open the terminal in the source folder
- Run the following command
sudo python setup.py install
### Import mega.py
from mega import Mega
### Create an instance of Mega.py ### Create an instance of Mega.py
mega = Mega() mega = Mega()
@ -60,7 +71,7 @@ This is a work in progress, further functionality coming shortly.
## Tests ## Tests
Test .py files can be found in /tests, run these to ensure Mega.py is working 100%. Test .py files can be found in tests.py, run these to ensure Mega.py is working 100%.
## Contribute ## Contribute

1
mega/__init__.py Normal file
View file

@ -0,0 +1 @@
from .mega import Mega

View file

@ -7,8 +7,8 @@ import os
import random import random
import binascii import binascii
import requests import requests
import errors from .errors import ValidationError,RequestError
from crypto import * from .crypto import *
class Mega(object): class Mega(object):
@ -32,7 +32,7 @@ class Mega(object):
resp = self.api_request({'a': 'us', 'user': email, 'uh': uh}) resp = self.api_request({'a': 'us', 'user': email, 'uh': uh})
#if numeric error code response #if numeric error code response
if isinstance(resp, int): if isinstance(resp, int):
raise errors.RequestError(resp) raise RequestError(resp)
self._login_process(resp, password_aes) self._login_process(resp, password_aes)
def _login_process(self, resp, password): def _login_process(self, resp, password):
@ -82,7 +82,7 @@ class Mega(object):
#if numeric error code response #if numeric error code response
if isinstance(json_resp, int): if isinstance(json_resp, int):
raise errors.RequestError(json_resp) raise RequestError(json_resp)
return json_resp[0] return json_resp[0]
def get_files(self): def get_files(self):
@ -129,7 +129,7 @@ class Mega(object):
public_handle, public_handle,
decrypted_key) decrypted_key)
else: else:
raise errors.ValidationError('File id and key must be present') raise ValidationError('File id and key must be present')
def download_url(self, url, dest_path=None): def download_url(self, url, dest_path=None):
''' '''
@ -154,7 +154,7 @@ class Mega(object):
path = match[0] path = match[0]
return path return path
else: else:
raise errors.RequestError('Url key missing') raise RequestError('Url key missing')
def get_user(self): def get_user(self):
user_data = self.api_request({'a': 'ug'}) user_data = self.api_request({'a': 'ug'})
@ -359,6 +359,13 @@ class Mega(object):
""" """
if file['t'] == 0 or file['t'] == 1: if file['t'] == 0 or file['t'] == 1:
key = file['k'][file['k'].index(':') + 1:] key = file['k'][file['k'].index(':') + 1:]
#fix for shared folder key format {k: foo1:bar1/foo2:bar2 }
uid = file['u']
keys = file['k'].split('/')
regex = re.compile('^%s:.*$' % uid)
for keytmp in keys:
if regex.match(keytmp):
key = keytmp[keytmp.index(':') + 1:]
key = decrypt_key(base64_to_a32(key), self.master_key) key = decrypt_key(base64_to_a32(key), self.master_key)
if file['t'] == 0: if file['t'] == 0:
k = (key[0] ^ key[4], key[1] ^ key[5], key[2] ^ key[6], k = (key[0] ^ key[4], key[1] ^ key[5], key[2] ^ key[6],

41
setup.py Normal file
View file

@ -0,0 +1,41 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*
from distutils.core import setup
import os
def get_packages(package):
"""
Return root package & all sub-packages.
"""
return [dirpath
for dirpath, dirnames, filenames in os.walk(package)
if os.path.exists(os.path.join(dirpath, '__init__.py'))]
def get_package_data(package):
"""
Return all files under the root package, that are not in a
package themselves.
"""
walk = [(dirpath.replace(package + os.sep, '', 1), filenames)
for dirpath, dirnames, filenames in os.walk(package)
if not os.path.exists(os.path.join(dirpath, '__init__.py'))]
filepaths = []
for base, filenames in walk:
filepaths.extend([os.path.join(base, filename)
for filename in filenames])
return {package: filepaths}
setup(
name='mega.py',
version='0.8',
packages=get_packages('mega'),
package_data=get_package_data('mega'),
description='Python lib for the Mega.co.nz API',
author='Richard O\'Dwyer',
author_email='richard@richard.do',
license='Creative Commons Attribution-Noncommercial-Share Alike license',
long_description=open('README.md').read(),
)

View file

@ -1,6 +1,5 @@
from mega import Mega from mega import Mega
def test(): def test():
#user details #user details
email = 'your@email.com' email = 'your@email.com'
@ -23,11 +22,11 @@ def test():
print files[file] print files[file]
##upload file ##upload file
print(m.upload('test.py')) print(m.upload('tests.py'))
##get file's public link ##get file's public link
#NOTE: if passing upload() function response use get_upload_link() #NOTE: if passing upload() function response use get_upload_link()
file = m.find('test.py') file = m.find('tests.py')
#print(m.get_upload_link(file)) #print(m.get_upload_link(file))
print(m.get_link(file)) print(m.get_link(file))
@ -42,7 +41,7 @@ def test():
print(m.delete(file[1]['k'])) print(m.delete(file[1]['k']))
##download file ##download file
#file = m.find('test.py') #file = m.find('tests.py')
#m.download(file) #m.download(file)
##specify destination folder ##specify destination folder
#m.download(file, '/home/user_name/Desktop') #m.download(file, '/home/user_name/Desktop')