/apps/blog/management/__init__.py

https://bitbucket.org/resplin/byteflow · Python · 71 lines · 61 code · 9 blank · 1 comment · 16 complexity · ec117745a96b3916f42a9bfbdadad618 MD5 · raw file

  1. # -*- mode: python; coding: utf-8; -*-
  2. import re
  3. import sys
  4. from django.contrib.sites import models as site_app
  5. from lib.helpers import signals
  6. RE_VALID_DOMAIN = re.compile(r'([A-Z0-9]([A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}')
  7. @signals.post_syncdb(sender=site_app)
  8. def create_site_interactively(app, created_models, verbosity, **kwargs):
  9. from django.contrib.sites.models import Site
  10. domain, name = 'example.com', 'example'
  11. if Site in created_models:
  12. if kwargs.get('interactive', True):
  13. domain, name = get_site_interactive(domain, name)
  14. try:
  15. site = Site.objects.all()[0]
  16. site.domain = domain
  17. site.name = name
  18. site.save()
  19. except IndexError:
  20. pass
  21. if not Site.objects.count():
  22. Site.objects.create(domain=domain, name=name)
  23. Site.objects.clear_cache()
  24. def get_site_interactive(def_domain=None, def_name=None):
  25. msg = "\nYou have just initialized your sites subsystem, which " \
  26. "means you don't have any \nsites defined. Please enter domain and " \
  27. "name of your site (you can create more \nin admin interface later)"
  28. print msg
  29. domain, name = None, None
  30. while not domain:
  31. input_msg = 'Domain'
  32. if def_domain:
  33. input_msg += ' (Leave blank to use %r)' % def_domain
  34. domain = raw_input(input_msg + ': ')
  35. if def_domain and not domain:
  36. domain = def_domain
  37. if not RE_VALID_DOMAIN.match(domain.upper()):
  38. sys.stderr.write("Error: this domain is invalid")
  39. domain = None
  40. while not name:
  41. input_msg = 'Name'
  42. if def_name:
  43. input_msg += ' (Leave blank to use %r)' % def_name
  44. name = raw_input(input_msg + ': ')
  45. if def_name and not name:
  46. name = def_name
  47. return domain, name
  48. @signals.post_syncdb(sender=site_app)
  49. def create_about_page(app, created_models, verbosity, **kwargs):
  50. from django.contrib.flatpages.models import FlatPage
  51. from django.contrib.sites.models import Site
  52. if FlatPage not in created_models:
  53. return
  54. if FlatPage.objects.count():
  55. return
  56. text = '''Hello, I'm default about page.
  57. Please change me in admin. I'm also known as FlatPage.'''
  58. about = FlatPage(url='/about/', title='About', content=text,
  59. enable_comments=False, registration_required=False)
  60. about.save()
  61. about.sites.add(*Site.objects.all())