示例#1
0
class Tags(AutoSlugifyOnSaveModel):
    TAG_TYPES = (
        ('T', 'Twitter'),
        ('A', 'Article tag collector'),
        ('D', 'Database tag collector'),
        ('G', 'Google Adwords'),
    )
    if not settings.EXISTING_SITE:
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=30,
                                 verbose_name=T("Tag"),
                                 unique=True)
    else:
        title = models.CharField(max_length=30,
                                 verbose_name=T("Tag"),
                                 primary_key=True)
    slug = models.CharField(max_length=30, blank=True, null=True)
    active = models.BooleanField(default=0)
    tag_type = models.CharField(
        max_length=10,
        verbose_name=T("Tag type"),
        choices=TAG_TYPES,
        default='A',
    )

    def __unicode__(self):
        return '%s' % (self.title)

    def __str__(self):
        return '%s' % (self.title)
示例#2
0
class Category(AutoSlugifyOnSaveModel):
    if not settings.EXISTING_SITE:
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=40,
                                 verbose_name=T("Categoery"),
                                 unique=True)
    else:
        title = models.CharField(max_length=40,
                                 verbose_name=T("Categoery"),
                                 primary_key=True)
    slug = models.CharField(max_length=40, blank=True, null=True)
    thumbnail = models.ImageField(upload_to="uploads/",
                                  blank=True,
                                  null=True,
                                  verbose_name=T("Image thumbnail"),
                                  height_field=None,
                                  width_field=None)

    class Meta:
        ordering = ('title', )

    def __unicode__(self):
        return '%s' % (self.title)

    def __str__(self):
        return '%s' % (self.title)
示例#3
0
    def wrapper(bot: tg.Bot, up: tg.Update, *args, **kwargs):
        chat_data = kwargs.pop("chat_data")
        cmd_args = kwargs.pop("args", None)

        if cmd_args is None:
            tracking_number = up.effective_message.text.strip()
        else:
            tracking_number = " ".join(cmd_args).strip()

        if not tracking_number:
            up.effective_message.reply_text(
                T("Please enter a tracking number:\n\n(Case insensitive)"))
            return fn.__name__

        try:
            chat_data["appointment"] = Appointment.objects.get(
                tracking_number__iexact=tracking_number, is_cancelled=False)
        except Appointment.DoesNotExist:
            up.effective_message.reply_text(
                T(f"You entered an invalid tracking number.\n\n"
                  "Please enter a valid tracking number:"),
                parse_mode="Markdown",
            )
            return fn.__name__
        else:
            return fn(bot, up, *args, **kwargs, chat_data=chat_data)
示例#4
0
def recv_new_time_slot(_, up: tg.Update, chat_data: dict):
    query: tg.CallbackQuery = up.callback_query

    weekday_id, time_slot_pk = query.data[len(recv_new_time_slot.__name__
                                              ):].split(":")

    appointment = chat_data["appointment"]
    appointment.weekday = weekday_id
    appointment.time_slot = TimeSlot.objects.get(pk=time_slot_pk)

    try:
        appointment.validate_time_slot()
        appointment.validate_weekday()
    except ValidationError:
        try:
            up.effective_message.edit_text(
                T("You entered an invalid Time slot.\n"
                  "Please choose a valid time slot."),
                reply_markup=util.get_time_slot_keyboard(
                    appointment.pin_code,
                    callback_pattern=recv_new_time_slot.__name__),
            )
        except tg.error.BadRequest:
            query.answer()
    else:
        appointment.save()
        up.effective_message.edit_text(text=T(
            f"Appointment rescheduled for {util.get_pretty_time_slot(appointment.weekday, appointment.time_slot)}."
        ))
示例#5
0
class NetworkSite(models.Model):
    id = models.AutoField(primary_key=True)
    path = models.CharField(max_length=250,
                            verbose_name=T("Path to projects"),
                            default="/home")
    folder_name = models.CharField(max_length=50,
                                   verbose_name=T("Project folder name"))
示例#6
0
def show_list(_, up: tg.Update):
    appointments = util.get_user(up).appointment_set.exclude(is_cancelled=True)

    if not appointments.exists():
        up.effective_message.reply_text(
            T("You haven't booked any appointments yet!\n"
              "Use /book to book a service appointment."))
        return

    up.effective_message.reply_text(
        T("Here is a list of all your previous appointments."))
    for appointment in appointments:
        reply_markup = tg.InlineKeyboardMarkup([[
            tg.InlineKeyboardButton(
                text=T("Cancel"),
                callback_data=
                f"{hyperlink.__name__}{cancel.__name__}:{appointment.pk}",
            ),
            tg.InlineKeyboardButton(
                text=T("Check details"),
                callback_data=
                f"{hyperlink.__name__}{check.__name__}:{appointment.pk}",
            ),
            tg.InlineKeyboardButton(
                text=T("Reschedule"),
                callback_data=
                f"{hyperlink.__name__}{schedule.__name__}:{appointment.pk}",
            ),
        ]])

        up.effective_message.reply_text(
            text=appointment.short_detail_markup,
            reply_markup=reply_markup,
            parse_mode="Markdown",
        )
示例#7
0
class ExpenseCategory(models.Model):
    title = models.CharField(max_length=120, verbose_name=T("Expense category"), primary_key=True)
    description = models.TextField(blank=True, null=True, verbose_name=T("Category description"))
    parent = models.ForeignKey('self', verbose_name=T("Parent category"), default=None, blank=True, null=True)

    def __str__(self):
        return u'%s' %(self.title)
示例#8
0
def recv_phone_number(_, up: tg.Update, chat_data: dict):
    message: tg.Message = up.effective_message
    user = util.get_user(up)

    try:
        user.phone_number = message.contact.phone_number
    except AttributeError:
        user.phone_number = message.text
    try:
        user.clean_fields()
    except ValidationError:
        util.request_phone_number(
            up,
            T("You entered an invalid Phone Number.\n"
              "Please enter a valid Phone Number."),
        )

        return recv_phone_number.__name__

    chat_data["user"] = user
    up.effective_message.reply_text(
        text=T(
            "Thanks for the Phone Number.\n"
            "One last thing, can you please provide me with your Email Address?"
        ),
        reply_markup=tg.replykeyboardremove.ReplyKeyboardRemove(),
    )

    return recv_email.__name__
示例#9
0
class CUser(models.Model):
    name = models.CharField(max_length=25, null=True, blank=True)
    nickname = models.CharField(max_length=25, null=True, blank=True)
    email = models.EmailField(max_length=150, verbose_name=T("Email"), primary_key=True)
    location = models.CharField(max_length=255, verbose_name=T("Location"), blank=True, null=True)
    description = models.CharField(max_length=255, verbose_name=T("Description"), blank=True, null=True)

    def __str__(self):
        return u'%s' %(self.nickname)
示例#10
0
class PortfolioStrats(models.Model):
    id = models.BigAutoField(primary_key=True)
    user = models.ForeignKey(QtraUser, verbose_name=T("User"))
    strategy = models.OneToOneField(Portfolios, verbose_name=T("Strategy"))

    def __unicode__(self):
        return '%s %s' % (self.id, self.user)

    def __str__(self):
        return '%s %s' % (self.id, self.user)
示例#11
0
class TwitsByTag(models.Model):
    tweet_id = models.BigIntegerField(primary_key=True,
                                      verbose_name=T("Tweet ID"))
    content = models.CharField(max_length=140, verbose_name=T("Tweet text"))
    twitter_handle = models.CharField(max_length=40,
                                      verbose_name=T("Twitter handle"))
    screen_name = models.CharField(max_length=30,
                                   verbose_name=T("Twitter screen name"))
    profile_image = models.CharField(
        max_length=250,
        blank=True,
        null=True,
        verbose_name=T("Twitter profile image URL"))
    date = models.DateTimeField(verbose_name=T("Date"))
    hashtags = models.CharField(max_length=140,
                                verbose_name=T("Hashtags"),
                                blank=True,
                                null=True)
    tags = models.ManyToManyField(Tags, blank=True, verbose_name=T("Tags"))
    by_tag = models.CharField(max_length=40,
                              verbose_name=T("What tag is used to query it"))

    class Meta:
        ordering = ('date', )

    def __unicode__(self):
        return '(%s) %s %s' % (self.content, self.screen_name, self.hashtags)

    def __str__(self):
        return '(%s) %s %s' % (self.content, self.screen_name, self.hashtags)
示例#12
0
def recv_time_slot(_, up: tg.Update, chat_data: dict):
    query: tg.CallbackQuery = up.callback_query

    weekday_id, time_slot_pk = query.data.split(":")

    appointment = chat_data["appointment"]
    appointment.weekday = weekday_id
    appointment.time_slot = TimeSlot.objects.get(pk=time_slot_pk)

    try:
        appointment.validate_time_slot()
        appointment.validate_weekday()
    except ValidationError:
        try:
            up.effective_message.edit_text(
                T("You entered an invalid time slot.\n"
                  "Please choose a valid time slot."),
                reply_markup=util.get_time_slot_keyboard(appointment.pin_code),
            )
        except tg.error.BadRequest:
            query.answer()

        return recv_time_slot.__name__

    appointment.save()

    reply_markup = tg.InlineKeyboardMarkup([[
        tg.InlineKeyboardButton(
            text=T("Cancel"),
            callback_data=
            f"{hyperlink.__name__}{cancel.__name__}:{appointment.pk}",
        ),
        tg.InlineKeyboardButton(
            text=T("Check details"),
            callback_data=
            f"{hyperlink.__name__}{check.__name__}:{appointment.pk}",
        ),
        tg.InlineKeyboardButton(
            text=T("Reschedule"),
            callback_data=
            f"{hyperlink.__name__}{schedule.__name__}:{appointment.pk}",
        ),
    ]])

    up.effective_message.reply_text(
        T(f"Appointment scheduled for {util.get_pretty_time_slot(appointment.weekday, appointment.time_slot)}.\n\n"
          f"Tracking No. for this appointment:\n\n"
          f"`{appointment.tracking_number}`\n\n"
          f"(Long press to copy)"),
        parse_mode="Markdown",
        reply_markup=reply_markup,
    )

    return ConversationHandler.END
示例#13
0
class Accounts(models.Model):
    id = models.BigAutoField(primary_key=True)
    user = models.ForeignKey(CUser, on_delete=models.CASCADE, verbose_name=T("User"))
    title = models.CharField(max_length=120, verbose_name=T("Account name"))
    currency = models.ForeignKey(Currencies, verbose_name=T("Currency"))

    class Meta:
        unique_together = ("user", "title", "currency")

    def __str__(self):
        return u'%s' %(self.title)
示例#14
0
class Post(models.Model):
    id = models.BigAutoField(primary_key=True)
    title = models.CharField(max_length=150, verbose_name=T("Title"))
    date_time = models.DateTimeField(verbose_name=T("Date"))
    content = models.TextField(verbose_name=T("Content"))

    def __unicode__(self):
        return '%s' % (self.title)

    def __str__(self):
        return '%s' % (self.title)
示例#15
0
 class TermLinks(models.Model):
     LINK_STATUSES = (
         ('T', 'Term link'),
         ('U', 'Unknown'),
         ('A', 'Article in db'),
     )
     link = models.URLField(verbose_name=T("URL"), primary_key=True)
     status_parsed = models.CharField(max_length=5,
                                      verbose_name=T("Status"),
                                      choices=LINK_STATUSES,
                                      default='U')
示例#16
0
class Strategy(models.Model):
    id = models.BigAutoField(primary_key=True)
    title = models.CharField(max_length=15,
                             verbose_name=T("Strategy title"),
                             unique=True)
    content = models.TextField(verbose_name=T("Strategy code"))

    def __unicode__(self):
        return '%s' % (self.title)

    def __str__(self):
        return '%s' % (self.title)
示例#17
0
class Contacts(models.Model):
    id = models.BigAutoField(primary_key=True)
    name = models.CharField(max_length=120, verbose_name=T("Name"))
    email = models.EmailField(max_length=100, verbose_name=T("Email"))
    user = models.ForeignKey(QtraUser, verbose_name=T("User"))
    subject = models.CharField(max_length=120, verbose_name=T("Subject"))
    message = models.TextField(verbose_name=T("Message"))

    def __unicode__(self):
        return '(%s) %s %s' % (self.name, self.subject, self.message)

    def __str__(self):
        return '(%s) %s %s' % (self.name, self.subject, self.message)
示例#18
0
class Deposit(models.Model):
    month = models.ForeignKey(Month)
    description = models.CharField(max_length=255)
    amount = models.DecimalField(max_digits=6, decimal_places=2)
    date = models.DateField(T('date deposited'))
    deposit_type = models.ForeignKey(DepositType, null=True, blank=True, default=None)
    account_number = models.CharField(T('opposite account number, if any'), max_length=34, blank=True, null=True)

    def __unicode__(self):
        return unicode('({}) {}'.format(self.date, self.description))

    def __str__(self):
        return self.__unicode__()
示例#19
0
def cancel(_, up: tg.Update, __):
    keyboard = tg.InlineKeyboardMarkup([[
        tg.InlineKeyboardButton(T("Yes"),
                                callback_data=f"{cancel_confirm.__name__}1"),
        tg.InlineKeyboardButton(T("No"),
                                callback_data=f"{cancel_confirm.__name__}0"),
    ]])
    up.effective_message.reply_text(
        text=T("Are you sure you want to cancel this appointment?"),
        reply_markup=keyboard,
    )

    return ConversationHandler.END
示例#20
0
def cancel_confirm(_, up: tg.Update, chat_data: dict):
    query: tg.CallbackQuery = up.callback_query

    confirmation = query.data[len(cancel_confirm.__name__):]

    if bool(int(confirmation)):
        appointment = chat_data["appointment"]
        appointment.is_cancelled = True
        appointment.save()
        up.effective_message.edit_text(text=T("Okay, appointment cancelled."))
    else:
        up.effective_message.edit_text(
            text=T("Appointment cancellation Aborted!"))
示例#21
0
class BrokerForm(forms.Form):
    broker = forms.ModelChoiceField(queryset=Brokers.objects.all(),
                                    label=T('Broker:'),
                                    required=True)
    our_links = forms.BooleanField(
        required=True,
        widget=forms.CheckboxInput,
        label=mark_safe(
            T('I have opened live<br />account using <strong>your links</strong>:'
              )))
    account_id = forms.IntegerField(max_value=999999999,
                                    required=True,
                                    widget=forms.NumberInput,
                                    label=T('My account number:'))
示例#22
0
class Feedback(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=40, verbose_name=T("Your name"))
    email = models.EmailField(max_length=60,
                              blank=False,
                              null=False,
                              verbose_name=T("Your email"))
    message = models.TextField(verbose_name=T("Your message"))

    def __unicode__(self):
        return '(%s) %s' % (self.name, self.message)

    def __str__(self):
        return '(%s) %s' % (self.name, self.message)
示例#23
0
class UserAuth(models.Model):
    PROVIDERS = (
        (1, "Facebook"),
        (2, "Twitter"),
        (3, "Google"),
        (4, "LinkedIn"),
    )
    user = models.ForeignKey(CUser, on_delete=models.CASCADE, verbose_name=T("User"))
    access_token = models.TextField()
    provider = models.SmallIntegerField(choices=PROVIDERS)
    avatar_url = models.URLField(verbose_name=T("Avatar URL"), null=True, blank=True)
    user_pid = models.IntegerField(verbose_name=T("User ID at provider's"))

    class Meta:
        unique_together = ("user", "provider")
示例#24
0
def start(_, up: tg.Update):
    user = util.get_user(up)

    if user.phone_number and user.email:
        up.effective_message.reply_text(f"Welcome back {user.first_name}!")
        show_help(_, up)

        return ConversationHandler.END

    up.effective_message.reply_text(
        T(f"Welcome {user.first_name}!\nLet's get you started."))
    util.request_phone_number(
        up, T("First, could you please provide me your Phone Number?"))

    return recv_phone_number.__name__
示例#25
0
def book(_, up: tg.Update):
    up.effective_message.reply_text(
        T("Alright, let's book an Appointment.\n\n"
          "First, enter the serial number of your Appliance:\n\n"
          "(Case insensitive)"))

    return recv_serial_number.__name__
示例#26
0
    class ScienceArticle(AutoSlugifyOnSaveModel):
        if not settings.EXISTING_SITE:
            id = models.AutoField(primary_key=True)
            title = models.CharField(max_length=250,
                                     verbose_name=T("Article title"),
                                     unique=True)
        else:
            title = models.CharField(max_length=250,
                                     verbose_name=T("Article title"),
                                     primary_key=True)
        text = models.TextField(default='', verbose_name=T("Article text"))
        summary = models.TextField(default='',
                                   verbose_name=T("Article summary"))
        sentiment = models.DecimalField(max_digits=3,
                                        decimal_places=2,
                                        blank=True,
                                        null=True,
                                        verbose_name=T("Sentiment"))
        file = models.FileField(upload_to="uploads/research/",
                                blank=True,
                                null=True,
                                verbose_name=T("PDF"))
        abs_url = models.URLField(verbose_name=T("URL to abstract"),
                                  null=True,
                                  blank=True)
        pdf_url = models.URLField(verbose_name=T("URL to PDF"),
                                  null=True,
                                  blank=True)
        date = models.DateTimeField(verbose_name=T("Date"),
                                    null=True,
                                    blank=True)
        slug = models.CharField(max_length=140,
                                verbose_name=T("Article slug"),
                                blank=True,
                                null=True)
        category = models.ForeignKey(ScienceCat, on_delete=models.CASCADE)
        got_pdf = models.BooleanField(default=0)

        class Meta:
            ordering = ('date', )

        def __unicode__(self):
            return '%s' % (self.title)

        def __str__(self):
            return '%s' % (self.title)
示例#27
0
文件: models.py 项目: talaikis/celebs
class Category(AutoSlugifyOnSaveModel):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=120,
                             verbose_name=T("Categoery"),
                             db_index=True,
                             unique=True)
    slug = models.CharField(max_length=120, blank=True, null=True)
    parsed = models.BooleanField(default=0, verbose_name=T("Parsed status"))

    class Meta:
        ordering = ('title', )

    def __unicode__(self):
        return '%s' % (self.title)

    def __str__(self):
        return '%s' % (self.title)
示例#28
0
def request_phone_number(up: tg.Update, text: str) -> tg.Message:
    keyboard_markup = [[
        tg.KeyboardButton(text=T("Share Contact"), request_contact=True)
    ]]
    reply_markup = tg.ReplyKeyboardMarkup(keyboard_markup)

    return up.effective_message.reply_text(text=text,
                                           reply_markup=reply_markup)
示例#29
0
class Links(models.Model):
    LINK_STATUSES = (
        (0, 'Unknown'),
        (1, 'Term link'),
        (2, 'Article in db'),
    )

    url = models.URLField(verbose_name=T("URL to topic"), primary_key=True)
    status_parsed = models.SmallIntegerField(verbose_name=T("Parse status"),
                                             choices=LINK_STATUSES,
                                             default=0)

    def __unicode__(self):
        return '%s' % (self.url)

    def __str__(self):
        return '%s' % (self.url)
示例#30
0
def graph_creation(strategy, data, mae_, system_slug, symbol_slug, period,
                   direction, bh_title):
    try:
        if not (strategy is None):
            strategy_ = strategy.loc[strategy != 0.0]
            x = strategy.loc[strategy != 0].index
            mae_ = mae_.loc[(mae_ != mae_.shift()) | (strategy != 0.0)]

            #graphs
            strategy_graph = go.Scatter(x=x, y=strategy_, mode="lines",  \
                name=T('Strategy'), line=dict(color=('rgb(205, 12, 24)'), width=6))
            mae_graph = go.Scatter(x=x, y=mae_, mode="markers",  \
                name=T('Strategy MAE'), line=dict(color=('rgb(115,115,115,1)'), \
                width=4, dash='dot'))

            if not (data is None):
                data_ = data.loc[strategy != 0.0]
                data_graph = go.Scatter(x=x, y=data_, mode="lines",  name=bh_title, \
                    line=dict(color=('rgb(22, 96, 167)'), width=4, dash='dot'))
                title = "{0} on {1} {2} {3}".format(system_slug, symbol_slug, \
                    period, direction)
            #else:
            #title = "Portfolio {}".format(system_slug)

            if not (data is None):
                fig_data = go.Data([data_graph, strategy_graph, mae_graph], \
                    showgrid=True)
            else:
                fig_data = go.Data([strategy_graph, mae_graph], showgrid=True)

            layout = go.Layout(title=title, xaxis={'title':T('Dates')}, \
                yaxis={'title':T('$')}, font=dict(family='Courier New, \
                monospace'                          , size=14, color='#7f7f7f') )

            figure = go.Figure(data=fig_data, layout=layout)

            graph = opy.plot(figure, auto_open=False, output_type='div')
        else:
            graph = None

        return graph
    except Exception as e:
        #stck = inspect.stack()
        #msg='{0} by {1}: {2}'.format(stck[0][3], stck[1][3], e)
        #error_email(e=msg)
        return None