Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. import datetime
  2. from typing import Dict, Any
  3.  
  4. from hypothesis import strategies
  5. from django.db import models
  6. from django.db.models import F, When, Case
  7.  
  8.  
  9. class MessageManager(models.Manager):
  10. def latest_distinct(self):
  11. return super().get_queryset().annotate(
  12. user_1=Case(
  13. When(sender__gt=F('recipient'), then=F('recipient')),
  14. default=F('sender')
  15. ),
  16. user_2=Case(
  17. When(sender__gt=F('recipient'), then=F('sender')),
  18. default=F('recipient')
  19. )
  20. ).order_by('user_1', 'user_2', '-when').distinct('user_1', 'user_2')
  21.  
  22.  
  23. class Message(models.Model):
  24. when = models.DateTimeField(auto_now=True, db_index=True)
  25. sender = models.CharField(max_length=127)
  26. recipient = models.CharField(max_length=127)
  27.  
  28. objects = MessageManager()
  29.  
  30. def __str__(self):
  31. return f'[{self.when.ctime()}] {self.sender} -> {self.recipient}'
  32.  
  33.  
  34. def example_message() -> Dict[str, Any]:
  35. users = [
  36. 'batman', 'superman', 'wonder-woman', 'flash', 'green-lantern', 'martian-manhunter',
  37. 'joker', 'darkseid', 'lex-luthor', 'ananta-jalil', 'zoom', 'savitr', 'mr-mxyzpltk',
  38. 'victor-zsasz', 'hawkgirl', 'guardian', 'super-girl',
  39. ]
  40. sender = strategies.sampled_from(users).example()
  41. recipient = strategies.sampled_from([u for u in users if u != sender]).example()
  42. when = strategies.dates(min_value=datetime.date(2019, 1, 1),
  43. max_value=datetime.date.today()).example()
  44.  
  45. return {
  46. 'sender': sender,
  47. 'recipient': recipient,
  48. 'when': when
  49. }
  50.  
  51.  
  52. def seed(limit: int = 1000) -> None:
  53. for _ in range(limit):
  54. Message.objects.create(**example_message())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement