77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
#!/usr/bin/env python
|
|
|
|
from snipts.models import Snipt
|
|
from django.contrib.auth.models import User
|
|
from django.core.management.base import BaseCommand
|
|
|
|
import requests
|
|
|
|
|
|
def get_snipts(api_key, from_username, url=None, snipts=[]):
|
|
path = url or '/api/private/snipt/?limit=50&api_key={}&username={}&format=json'.format(api_key, from_username)
|
|
res = requests.get('https://snippets.siftie.com' + path)
|
|
json = res.json()
|
|
|
|
print(u"Fetched snipts {} through {} of {}".format(
|
|
json["meta"]["offset"],
|
|
json["meta"]["offset"] + json["meta"]["limit"],
|
|
json["meta"]["total_count"]
|
|
))
|
|
|
|
snipts.extend(json["objects"])
|
|
|
|
if json["meta"]["next"]:
|
|
return get_snipts(api_key, from_username, json["meta"]["next"], snipts)
|
|
else:
|
|
return snipts
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = u"Import snipts from Siftie Snippets."
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument('api_key', nargs='+', type=str)
|
|
parser.add_argument('from_username', nargs='+', type=str)
|
|
parser.add_argument('to_username', nargs='+', type=str)
|
|
|
|
def handle(self, *args, **options):
|
|
api_key = options['api_key'][0]
|
|
from_username = options['from_username'][0]
|
|
to_username = options['to_username'][0]
|
|
to_user = User.objects.get(username=to_username)
|
|
|
|
print(u"Fetching snipts...")
|
|
|
|
items = get_snipts(api_key, from_username)
|
|
items.reverse()
|
|
|
|
for snipt in items:
|
|
s = Snipt(
|
|
blog_post=snipt["blog_post"],
|
|
code=snipt["code"],
|
|
description=snipt["description"],
|
|
id=snipt["id"],
|
|
key=snipt["key"],
|
|
lexer=snipt["lexer"],
|
|
line_count=snipt["line_count"],
|
|
meta=snipt["meta"],
|
|
public=snipt["public"],
|
|
publish_date=snipt["publish_datetime"],
|
|
secure=snipt["secure"],
|
|
slug=snipt["slug"],
|
|
stylized=snipt["stylized"],
|
|
title=snipt["title"],
|
|
user=to_user,
|
|
views=snipt["views"]
|
|
)
|
|
|
|
s.created = snipt["created"]
|
|
s.modified = snipt["modified"]
|
|
|
|
for tag in snipt["tags"]:
|
|
s.tags.add(tag["name"])
|
|
|
|
s.save()
|
|
|
|
self.stdout.write(snipt["title"])
|