Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
*.egg-info/
build/
dist/
.idea
12 changes: 12 additions & 0 deletions soundcloud_cli/api/groups.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from .client import get_client


def group(user_id):
client = get_client()

page_size = 100
offset = 0

return client.get('/users/{0}/groups'.format(user_id), order='created_at',
limit=page_size,
offset=offset)
10 changes: 10 additions & 0 deletions soundcloud_cli/api/groupshare.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from .. import settings
from .client import get_client


def groupshare(group_id=None, track_id=None):

client = get_client()

# contribute track to group
return client.post('/groups/%s/contributions' % group_id, track={'id': track_id})
70 changes: 66 additions & 4 deletions soundcloud_cli/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def command_auth(args):
settings.user = me.obj
settings.user['name'] = me.username
settings.save()
print 'authenticated as {0}.'.format(me.username)
print 'authenticated as {0}.'.format(me.username.encode('utf-8'))


def command_defaults(args):
Expand Down Expand Up @@ -81,11 +81,64 @@ def command_list(args):

# find longest title to build formatting string
title_len = max(len(t.title) for t in tracks)
format_spec = " {{0:<{0}}} {{1}}".format(title_len + 2)
format_spec = " {{0:<{0}}} {{1}} {{2}}".format(title_len + 2)

print 'tracks by {0}:'.format(username)
print 'tracks by {0}:'.format(username.encode('utf-8'))
for track in tracks:
print format_spec.format(track.title, track.permalink_url)
print format_spec.format(track.title, track.permalink_url, track.id)


@utils.require_auth
def command_group(args):
from .api.groups import group
from .api.client import get_client

client = get_client()
username = args.username

if not username:
user_id = settings.user.get('id')
username = settings.user.get('name')
else:
user = settings.users.get(username, None)
if user:
user_id = user['id']
else:
user = client.get('/resolve', url='https://soundcloud.com/{0}'.format(username))
user_id = user.id

groups = group(user_id)

# find longest title to build formatting string
#group_len = max(len(g.group) for g in groups)
group_len = 8
format_spec = " {{0:<{0}}} {{1}}".format(group_len + 2)

print 'groups of {0}:'.format(username.encode('utf-8'))
for group in groups:
print format_spec.format(group.id, group.permalink_url)


@utils.require_auth
def command_groupshare(args):
from .api.groupshare import groupshare

print args

if args.track_id:
tracks = [t.strip() for t in args.track_id.split(',')]
else:
tracks = []

if args.group_id:
groups = [g.strip() for g in args.group_id.split(',')]
else:
groups = []

for group in groups:
for track in tracks:
groupshare(group,track)
print 'track %s has been shared with group %s' % (track,group)


@utils.require_auth
Expand Down Expand Up @@ -177,6 +230,15 @@ def main():
list_parser.add_argument('username', nargs='?', help='key')
list_parser.set_defaults(command=command_list)

group_parser = subparsers.add_parser('group', help='list groups for given user')
group_parser.add_argument('username', nargs='?', help='key')
group_parser.set_defaults(command=command_group)

groupshare_parser = subparsers.add_parser('groupshare', help='share track to group for given user')
groupshare_parser.add_argument('group_id', nargs='?', help='group you want to share track with')
groupshare_parser.add_argument('track_id', nargs='?', help='track you want to share')
groupshare_parser.set_defaults(command=command_groupshare)

share_parser = subparsers.add_parser('share', help='share track with users')
share_parser.add_argument('track_url', help='track you want to share')
share_parser.add_argument('users', nargs='?', help='users you want to share track with')
Expand Down