-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcategories.py
More file actions
106 lines (84 loc) · 3.21 KB
/
categories.py
File metadata and controls
106 lines (84 loc) · 3.21 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
import os
import sys
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker, backref
from jinja2 import Environment, FileSystemLoader
from api import getCategories
PATH = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_ENVIRONMENT = Environment(
autoescape=False,
loader=FileSystemLoader(PATH + '/templates'),
trim_blocks=False
)
database_file = 'ebay_categories.db'
Base = declarative_base()
class Category(Base):
__tablename__ = 'category'
"""
This model will store the categories obtained from GetCategories eBay API
"""
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
level = Column(Integer, nullable=False)
is_auto_pay_enabled = Column(Boolean, default=False)
is_best_offer_enabled = Column(Boolean, default=False)
is_leaf_category = Column(Boolean, default=False)
parent_id = Column(Integer, ForeignKey('category.id'), nullable=True)
children = relationship('Category', backref=backref('parent', remote_side=id))
def __init__(self, name=None, parent=None):
self.name = name
self.parent = parent
def generateDatabase(database_file):
engine = create_engine('sqlite:///%s' % database_file)
Base.metadata.create_all(engine)
def removeDatabase(database_file):
os.remove(database_file)
def render_template(template_filename, context):
return TEMPLATE_ENVIRONMENT.get_template(template_filename).render(context)
def create_html(id, category):
file_name = "%s.html" % id
context = {
'category': category
}
with open(file_name, 'w') as f:
html = render_template('template.html', context)
f.write(html)
def serializeChildren(node, category_serialized):
for children in node.children:
category_serialized['children'].append({
'id': children.id,
'name': children.name,
'level': children.level,
'leaf': children.is_leaf_category,
'children': []
})
if children.children:
serializeChildren(children, category_serialized['children'][len(category_serialized['children']) - 1])
def renderCategory(category_ID):
engine = create_engine('sqlite:///%s' % database_file)
Base.metadata.bind = engine
DBSession = sessionmaker()
DBSession.bind = engine
session = DBSession()
try:
category = session.query(Category).get(category_ID)
category_serialized = {
'id': category.id,
'name': category.name,
'level': category.level,
'leaf': category.is_leaf_category,
'children': []
}
serializeChildren(category, category_serialized)
create_html(category_ID, category_serialized)
except:
print("Error: The category ID not exist in our database!")
if __name__ == "__main__":
if sys.argv[1] == '--rebuild':
removeDatabase(database_file)
generateDatabase(database_file)
getCategories(Base, Category, database_file)
elif sys.argv[1] == '--render':
print("--render %s" % sys.argv[2])
renderCategory(sys.argv[2])