Skip to content

Commit

Permalink
[master][#1710][cli]: Dumper for user info - to create "announce" ema…
Browse files Browse the repository at this point in the history
…il list.
  • Loading branch information
David Read committed Jan 26, 2012
1 parent 048f587 commit 804b549
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 5 deletions.
16 changes: 14 additions & 2 deletions ckan/lib/cli.py
Expand Up @@ -68,8 +68,9 @@ class ManageDb(CkanCommand):
db version # returns current version of data schema
db dump {file-path} # dump to a pg_dump file
db dump-rdf {dataset-name} {file-path}
db simple-dump-csv {file-path}
db simple-dump-json {file-path}
db simple-dump-csv {file-path} # dump just datasets in CSV format
db simple-dump-json {file-path} # dump just datasets in JSON format
db user-dump-csv {file-path} # dump user information to a CSV file
db send-rdf {talis-store} {username} {password}
db load {file-path} # load a pg_dump from a file
db load-only {file-path} # load a pg_dump from a file but don\'t do
Expand Down Expand Up @@ -115,6 +116,8 @@ def command(self):
self.simple_dump_json()
elif cmd == 'dump-rdf':
self.dump_rdf()
elif cmd == 'user-dump-csv':
self.user_dump_csv()
elif cmd == 'create-from-model':
model.repo.create_db()
if self.verbose:
Expand Down Expand Up @@ -238,6 +241,15 @@ def dump_rdf(self):
f.write(rdf)
f.close()

def user_dump_csv(self):
if len(self.args) < 2:
print 'Need csv file path'
return
dump_filepath = self.args[1]
import ckan.lib.dumper as dumper
dump_file = open(dump_filepath, 'w')
dumper.UserDumper().dump(dump_file)

def send_rdf(self):
if len(self.args) < 4:
print 'Need all arguments: {talis-store} {username} {password}'
Expand Down
28 changes: 25 additions & 3 deletions ckan/lib/dumper.py
Expand Up @@ -4,7 +4,7 @@

import ckan.model as model
import ckan.model
from helpers import json
from helpers import json, OrderedDict

class SimpleDumper(object):
'''Dumps just package data but including tags, groups, license text etc'''
Expand Down Expand Up @@ -40,7 +40,7 @@ def dump_csv(self, dump_file_obj, query):
pkg_dict[name_] = value_
del pkg_dict[name]
row_dicts.append(pkg_dict)
writer = PackagesCsvWriter(row_dicts)
writer = CsvWriter(row_dicts)
writer.save(dump_file_obj)

def dump_json(self, dump_file_obj, query):
Expand Down Expand Up @@ -201,7 +201,7 @@ def migrate_06_to_07(self):
values={'name': record.name})
update.execute()

class PackagesCsvWriter:
class CsvWriter:
def __init__(self, package_dict_list=None):
self._rows = []
self._col_titles = []
Expand Down Expand Up @@ -301,3 +301,25 @@ def pkg_to_xl_dict(pkg):
dict_[key_] = value_
del dict_[key]
return dict_

class UserDumper(object):
def dump(self, dump_file_obj):
query = model.Session.query(model.User)
query = query.order_by(model.User.created.asc())

columns = (('id', 'name', 'openid', 'fullname', 'email', 'created', 'about'))
row_dicts = []
for user in query:
row = OrderedDict()
for col in columns:
value = getattr(user, col)
if not value:
value = ''
if col == 'created':
value = str(value) # or maybe dd/mm/yyyy?
row[col] = value
row_dicts.append(row)

writer = CsvWriter(row_dicts)
writer.save(dump_file_obj)
dump_file_obj.close()

0 comments on commit 804b549

Please sign in to comment.