This repository was archived by the owner on Sep 9, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathcell.py
More file actions
executable file
·121 lines (86 loc) · 3.24 KB
/
cell.py
File metadata and controls
executable file
·121 lines (86 loc) · 3.24 KB
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
# Copyright (c) 2010 Resolver Systems Ltd, PythonAnywhere LLP
# See LICENSE.md
#
from .formula_interpreter import (
get_dependencies_from_parse_tree,
get_python_formula_from_parse_tree
)
from .parser import FormulaError, parser
class Undefined(object):
def __repr__(self):
return "<undefined>"
undefined = Undefined()
class Cell(object):
def __init__(self):
self.clear()
def _set_formula(self, value):
self._python_formula = None
if value is None:
self._formula = None
elif type(value) == str or type(value) == unicode:
self._formula = value
if value.startswith('='):
try:
parsed_formula = parser.parse(value)
self.dependencies = get_dependencies_from_parse_tree(parsed_formula)
self._python_formula = get_python_formula_from_parse_tree(parsed_formula)
except FormulaError, e:
self.dependencies = []
self._python_formula = '_raise(FormulaError("{}"))'.format(e)
else:
raise TypeError('cell formula must be str or unicode')
def _get_formula(self):
return self._formula
formula = property(_get_formula, _set_formula)
def _set_python_formula(self, value):
if type(value) == str or type(value) == unicode:
self._python_formula = value
else:
raise TypeError('cell python_formula must be str or unicode')
def _get_python_formula(self):
return self._python_formula
python_formula = property(_get_python_formula, _set_python_formula)
def _set_value(self, value):
self._value = value
if value is undefined:
self._set_formatted_value(u'')
else:
self._set_formatted_value(unicode(value))
def _get_value(self):
return self._value
value = property(_get_value, _set_value)
def clear_value(self):
self._value = undefined
def _set_formatted_value(self, value):
if value is None:
self._formatted_value = u''
elif type(value) == str or type(value) == unicode:
self._formatted_value = value
else:
raise TypeError('cell formatted_value must be str or unicode')
def _get_formatted_value(self):
return self._formatted_value
formatted_value = property(_get_formatted_value, _set_formatted_value)
def clear(self):
self._value = undefined
self._formula = None
self._python_formula = None
self.dependencies = []
self._formatted_value = u''
self.error = None
def __repr__(self):
error = ""
if self.error:
error = " error=%r" % (self.error,)
return '<Cell formula=%s value=%r formatted_value=%r%s>' % \
(self.formula, self._value, self.formatted_value, error)
def __eq__(self, other):
return (
isinstance(other, Cell) and
self._formula == other.formula and
self._value == other.value and
self._formatted_value == other.formatted_value and
self.error == other.error
)
def __ne__(self, other):
return not self.__eq__(other)