snipt/snipts/management/commands/import_snipts.py

84 lines
2.4 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"])