#!/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"])