Commit d6b9daca80dc8cfbe1348cf48458f197eb5ff4ac

Authored by hitier
1 parent 2d944bab

Feed categories and labels

Showing 2 changed files with 42 additions and 10 deletions   Show diff stats
app/commands/commands.py
... ... @@ -12,7 +12,8 @@ from sqlalchemy.ext.automap import automap_base
12 12 from sqlalchemy.orm import Session
13 13 from sqlalchemy import create_engine
14 14  
15   -from app.models import db, Agent, Service, Project, Capacity, Period, Charge, AgentStatus, Company, AgentBap, AgentGrade
  15 +from app.models import db, Agent, Service, Project, Capacity, Period, Charge, AgentStatus, Company, AgentBap, \
  16 + AgentGrade, Category, CategoryLabel
16 17 from app.auth.models import User, _nameToRole, _roleToName
17 18  
18 19 from . import bp
... ... @@ -70,7 +71,7 @@ def feed_from_irap(csv_file_name):
70 71 grade_key = 'GRADE CORPS'
71 72 project_key = 'PROJETS'
72 73 service_key = 'GROUPE MÉTIER'
73   - categorie_keys = ['TYPOLOGIE', 'THÉMATIQUE']
  74 + categorie_keys = ['TYPOLOGIE', 'THÉMATIQUE']
74 75  
75 76 # Get the columns values
76 77 #
... ... @@ -81,24 +82,25 @@ def feed_from_irap(csv_file_name):
81 82 grades = []
82 83 companies = []
83 84 statuses = []
  85 + categories = {k: [] for k in categorie_keys}
84 86 for r in rows:
85   - # thematics.push( r[thematic_title])
86   - # typologies.push( r[typology_title])
87 87 projects.append(r[project_key])
88 88 services.append(r[service_key])
89 89 baps.append(r[bap_key])
90 90 grades.append(r[grade_key])
91 91 companies.append(r[company_key])
92 92 statuses.append(r[status_key])
93   - agent_dict = {
  93 + # build a dict of lists, key being the category name
  94 + for k in categorie_keys:
  95 + categories[k].append(r[k])
  96 + agents.append({
94 97 'firstname': r[firstname_key],
95 98 'secondname': r[secondname_key],
96 99 'status': r[status_key],
97 100 'virtual': r[virtual_key],
98 101 'company': r[company_key],
99 102 'bap': r[bap_key],
100   - 'grade': r[grade_key]}
101   - agents.append(agent_dict)
  103 + 'grade': r[grade_key]})
102 104  
103 105 # Uppercase the small tables
104 106 #
... ... @@ -112,8 +114,6 @@ def feed_from_irap(csv_file_name):
112 114 # 2- then keep only uniq item with set()
113 115 # 3- at last alpha sort with sorted()
114 116 #
115   - # thematics = sorted(set(thematics))
116   - # typologies = sorted(set(typologies))
117 117 projects = sorted(set(filter(None, projects)))
118 118 services = sorted(set(filter(None, services)))
119 119 baps = sorted(set(filter(None, baps)))
... ... @@ -121,7 +121,15 @@ def feed_from_irap(csv_file_name):
121 121 companies = sorted(set(filter(None, companies)))
122 122 statuses = sorted(set(filter(None, statuses)))
123 123  
124   - # as agents is a list of dicts, sorting is a bit tricky
  124 + # Do the same for the category labels stored as a dict
  125 + #
  126 + # k is category name
  127 + # v is labels list for that category
  128 + for k in categorie_keys:
  129 + labels = sorted(set(filter(None, categories[k])))
  130 + categories[k] = labels
  131 +
  132 + # At least, as agents is a list of dicts, sorting is a bit tricky
125 133 #
126 134 # the first one liner will store the last agent's line only
127 135 # then we alpha sort on the name
... ... @@ -186,6 +194,19 @@ def feed_from_irap(csv_file_name):
186 194 db.session.add(Capacity(name="Agent"))
187 195 db.session.commit()
188 196  
  197 + # Feed categories and labels
  198 + #
  199 + for c, l in categories.items():
  200 + print("Adding category ", c)
  201 + n_c = Category(name=c)
  202 + db.session.add(n_c)
  203 + db.session.commit()
  204 + for label in l:
  205 + print("Adding label {} for id {}".format(label, n_c.id))
  206 + n_l = CategoryLabel(name=label, category_id=n_c.id)
  207 + db.session.add(n_l)
  208 + db.session.commit()
  209 +
189 210 # Feed agents from columns
190 211 #
191 212 for a in agents:
... ...
app/models.py
... ... @@ -3,6 +3,17 @@ from flask_sqlalchemy import SQLAlchemy
3 3 db = SQLAlchemy()
4 4  
5 5  
  6 +class Category(db.Model):
  7 + id = db.Column(db.Integer, primary_key=True)
  8 + name = db.Column(db.String(32))
  9 +
  10 +
  11 +class CategoryLabel(db.Model):
  12 + id = db.Column(db.Integer, primary_key=True)
  13 + name = db.Column(db.String(32))
  14 + category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
  15 +
  16 +
6 17 class AgentBap(db.Model):
7 18 id = db.Column(db.Integer, primary_key=True)
8 19 name = db.Column(db.String(16))
... ...