PPaste!

Test2

Home - All the pastes - Authored by Thooms

Raw version

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import json
import os
import random
import string
import time


class PPasteException(Exception):
    '''Custom exception'''

    def __init__(self, value):
        self.value = value

    def __str__(self):
        return repr(self.value)


class PasteManager:
    NAME_LEN = 6
    ALPHABET = list(string.ascii_uppercase) + list(string.digits)
    PASTE_LOCATION = os.path.join(os.getcwd(), 'pastes')

    def check_pastes_directory(f):
        '''
        Decorator that raises an exception if the pastes directory
        doesn't exists
        '''
        def wrapper(*args, **kwargs):
            if not os.path.isdir(PasteManager.PASTE_LOCATION):
                raise PPasteException(
                    'Pastes directory ({}) does not exist'.format(
                        PasteManager.PASTE_LOCATION))
            return f(*args, **kwargs)

        return wrapper

    def get_rand_paste_name():
        return ''.join(
            random.choice(PasteManager.ALPHABET)
            for _ in range(PasteManager.NAME_LEN)
        )

    def craft_paste_path(paste_name):
        return os.path.join(PasteManager.PASTE_LOCATION, paste_name)

    @check_pastes_directory
    def save_paste(paste):
        path = PasteManager.craft_paste_path(paste.name)

        if os.path.exists(path):
            raise PPasteException('Paste file {} already exists'.format(path))

        try:
            json.dump(paste.get_dict(), open(path, 'w'))
        except OSError as e:
            raise PPasteException('Cannot write file {} - {}'.format(
                path,
                e
            ))

    @check_pastes_directory
    def fetch_paste(name):
        path = PasteManager.craft_paste_path(name)

        if not os.path.exists(path):
            raise PPasteException(
                'Paste file {} does not exists'.format(path))

        try:
            d = json.load(open(path, 'r'))

            return Paste(
                title=d['title'],
                content=d['content'],
                hl_alias=d['hl_alias'],
                is_private=d['is_private'],
                date=d['date'],
                name=name,
            )
        except OSError as e:
            raise PPasteException('Cannot load file {} - {}'.format(
                path,
                e
            ))

    @check_pastes_directory
    def fetch_public_pastes():
        return sorted(
            filter(
                lambda p: not p.is_private,
                (PasteManager.fetch_paste(name)
                 for name
                 in os.listdir(PasteManager.PASTE_LOCATION))
            ),
            key=lambda p: -p.date
        )


class Paste:

    def __init__(self, title='', content='', hl_alias='',
                 is_private=False, name=None, date=None):
        self.title = title or ''
        self.content = content or ''
        self.hl_alias = hl_alias or 'Text only'
        self.is_private = is_private
        self.name = PasteManager.get_rand_paste_name() \
            if name is None else name
        self.date = int(time.time()) \
            if date is None else date

    def get_dict(self):
        return {
            'title': self.title,
            'content': self.content,
            'hl_alias': self.hl_alias,
            'is_private': self.is_private,
            'name': self.name,
            'date': self.date
        }

    @PasteManager.check_pastes_directory
    def save(self):
        PasteManager.save_paste(self)