seed.utils package¶
Submodules¶
seed.utils.api module¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author
- class seed.utils.api.APIBypassCSRFMiddleware¶
Bases: object
This middleware turns off CSRF protection for API clients.
It must come before CsrfViewMiddleware in settings.MIDDLEWARE_CLASSES.
- process_view(request, *args, **kwargs)¶
If this request is an API request, bypass CSRF protection.
- seed.utils.api.api_endpoint(fn)¶
Decorator function to mark a view as allowed to authenticate via API key.
Decorator must be used before login_required or has_perm to set request.user for those decorators.
- seed.utils.api.clean_api_regex(url)¶
Given a django-style url regex pattern, strip it down to a human-readable url.
TODO: If pks ever appear in the url, this will need to account for that.
- seed.utils.api.drf_api_endpoint(fn)¶
Decorator to register a Django Rest Framework view with the list of API endpoints. Marks it with is_api_endpoint = True as well as appending it to the global endpoints list.
- seed.utils.api.format_api_docstring(docstring)¶
Cleans up a python method docstring for human consumption.
- seed.utils.api.get_all_urls(urllist, prefix='')¶
Recursive generator that traverses entire tree of urls, starting with urllist, yielding a tuple of (url_pattern, view_function) for each one.
- seed.utils.api.get_api_endpoints()¶
Examines all views and returns those with is_api_endpoint set to true (done by the @api_endpoint decorator).
TODO: this isn’t particularly expensive now, but if the number of urls grows a lot, it may be worth caching this somewhere.
- seed.utils.api.get_api_request_user(request)¶
Determines if this is an API request and returns the corresponding user if so.
seed.utils.api_client module¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author
- class seed.utils.api_client.APIClient(base_url, api_key='', email_address='')¶
Bases: object
Implementation of a demonstration client for using SEED’s API.
Example Usage:
client = APIClient('http://seeddomain.com', api_key='your_key_here', email_address='youremail@address.com') # get all orgs user belongs to client.get_organizations() # organization id 17 will now be used for most requests client.set_organization(17) # create a dataset client.create_dataset('dataset name here') >>> {u'id': 34, u'name': u'test_data_set2', u'status': u'success'} # upload a file client.upload_file('/path/to/file', 34, 'Assessed Raw') >>> {'import_file_id': 54, 'success': true, 'filename': 'DataforSEED_dos15.csv'} # save the file's to the DB as raw buildings client.save_raw_data(payload={'file_id': 54}) >>> {u'progress_key': u':1:SEED:save_raw_data:PROG:54', u'status': u'success'} # check the progress of the saving client.progress( payload={'progress_key':':1:SEED:save_raw_data:PROG:54'} ) >>> {u'progress': 78, u'progress_key': u':1:SEED:save_raw_data:PROG:54'}
For nearly all endpoints, functions named for the endpoint are created from the get_api_schema endpoint. If an endpoint requires a payload it can be provided as a dictionary to the keyword ‘payload’:
client.update_project( payload={'project': {'project_slug': 'myproject', 'name': 'My Project', 'description': 'My description here', 'end_date': 1407231741, 'deadline_date': 1407200000 } } >>> {'status': 'success'}
If an endpoint requires a GET query string, provide those parameters as a dict to the keyword ‘params’:
client.get_import_file(params={'import_file_id': 54}) >>> {'status': 'success', 'import_file': {<snip>} }
- create_dataset(name)¶
Example method including a payload.
- Args:
- name: The name of the new dataset.
- Returns:
- {‘id’: 34, ‘name’: name, ‘status’: ‘success’}
- describe(what)¶
Provides a human-readable description of an endpoint, specified either by name or URI. E.g.:
client.describe('save_match') >>> save_match >>> /app/save_match/ >>> Adds or removes a match between two BuildingSnapshots[...]
- get_organizations()¶
Example method for overriding the autogenerated methods.
- Returns:
- All organizations the user belongs to. See ``seed.views.accounts.get_organizations()’‘
- get_schema()¶
Retrieves all of the API endpoints for this SEED instance.
- set_organization_id(org_id)¶
Sets the client’s organization_id. As this is needed for most requests, you can set it once and include it in all requests.
- Args:
- org_id: An ID of an org the user belongs to. Will validate against
- the API.
- upload_file(filepath, import_record_id, source_type)¶
Determines the correct method to upload a file (S3 or direct) and does so. Makes use of several endpoints in the process, depending on where the SEED instance stores files.
- Args:
- filepath: Full path to file on local filesystem. import_record_id: ID of the dataset to associate file with. source_type: Usually one of ‘Assessed Raw’ or ‘Portfolio Raw’
- Returns:
- {“import_file_id”: 54,
- “success”: true, “filename”: “DataforSEED_dos15.csv”}
seed.utils.buildings module¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author
- seed.utils.buildings.get_buildings_for_user_count(user)¶
returns the number of buildings in a user’s orgs
- seed.utils.buildings.get_columns(is_project, org_id, all_fields=False)¶
gets default columns, to be overridden in future
title: HTML presented title of column sort_column: semantic name used by js and for searching DB class: HTML CSS class for row td elements title_class: HTML CSS class for column td elements type: ‘string’, ‘number’, ‘date’ min, max: the django filter key e.g. gross_floor_area__gte field_type: assessor, pm, or compliance (currently not used) sortable: determines if the column is sortable checked: initial state of “edit columns” modal static: True if option can be toggle (ID is false because it is
always needed to link to the building detail page)- link: signifies that the cell’s data should link to a building detail
- page
- seed.utils.buildings.get_search_query(user, params)¶
- seed.utils.buildings.get_source_type(import_file, source_type='')¶
Used for converting ImportFile source_type into an int.
- seed.utils.buildings.serialize_building_snapshot(b, pm_cb, building)¶
returns a dict that’s safe to JSON serialize
seed.utils.constants module¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author
seed.utils.mapping module¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author
- seed.utils.mapping.get_mappable_columns(exclude_fields=None)¶
Get a list of all the columns we’re able to map to.
- seed.utils.mapping.get_mappable_types(exclude_fields=None)¶
Like get_mappable_columns, but with type information.
seed.utils.organizations module¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author
- seed.utils.organizations.create_organization(user, org_name='', *args, **kwargs)¶
Helper script to create a user/org relationship from scratch.
Parameters: - user – user inst.
- org_name – str, name of Organization we’d like to create.
- kwargs ((optional)) – ‘role’, int; ‘status’, str.
seed.utils.projects module¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author
- seed.utils.projects.copy_buildings(source_project, target_project, buildings, select_all, search_params, user)¶
copies buildings from source project to target project
Parameters: - source_project_slug – str, a slug to get a Project inst.
- target_project_slug – str, a slug to get a Project inst.
- buildings – list, list of source_facility_id as str to get
BuildingSnapshot inst. :param select_all: bool, if the select all checkbox was checked. i.e. should we transfer all buildings in a project or just the buildings in the list :search_params: dict, params needed to generate a queryset of buildings, with keys (q, other_params, project_slug) :user: User inst., django user instance needed for select all queryset
- seed.utils.projects.delete_matching_buildings(project, buildings, select_all, search_params, user)¶
deletes buildings in a project that match search search params
Parameters: - project_slug – str, a slug to get a Project inst.
- buildings – list, list of source_facility_id as str to get
BuildingSnapshot inst. :param select_all: bool, if the select all checkbox was checked. i.e. should we transfer all buildings in a project or just the buildings in the list :search_params: dict, params needed to generate a queryset of buildings, with keys (q, other_params, project_slug) :user: User inst., django user instance needed for select all queryset
- seed.utils.projects.get_projects(building, organization)¶
return an JSON friendly list of the building’s projects
Parameters: - building – the BuildingSnapshot inst.
- organization – the Organization inst.
Returns: list of projects
- seed.utils.projects.get_transfer_buildings(source_project, target_project, buildings, select_all, search_params, user)¶
generates move or copy buildings queryset
Parameters: - source_project_slug – str, a slug to get a Project inst.
- target_project_slug – str, a slug to get a Project inst.
- buildings – list, list of source_facility_id as str to get
BuildingSnapshot inst. :param select_all: bool, if the select all checkbox was checked. i.e. should we transfer all buildings in a project or just the buildings in the list :search_params: dict, params needed to generate a queryset of buildings, with keys (q, other_params, project_slug) :user: User inst., django user instance needed for select all queryset
Rtype Queryset: a django queryset of buildings to move or copy
- seed.utils.projects.move_buildings(source_project, target_project, buildings, select_all, search_params, user)¶
moves buildings from source project to target project
Parameters: - source_project_slug – str, a slug to get a Project inst.
- target_project_slug – str, a slug to get a Project inst.
- buildings – list, list of source_facility_id as str to get
BuildingSnapshot inst. :param select_all: bool, if the select all checkbox was checked. i.e. should we transfer all buildings in a project or just the buildings in the list :search_params: dict, params needed to generate a queryset of buildings, with keys (q, other_params, project_slug) :user: User inst., django user instance needed for select all queryset
- seed.utils.projects.transfer_buildings(source_project_slug, target_project_slug, buildings, select_all, search_params, user, copy_flag=False)¶
copies or moves buildings from one project to another
Parameters: - source_project_slug – str, a slug to get a Project inst.
- target_project_slug – str, a slug to get a Project inst.
- buildings – list, list of source_facility_id as str to get
BuildingSnapshot inst. :param select_all: bool, if the select all checkbox was checked. i.e. should we transfer all buildings in a project or just the buildings in the list :search_params: dict, params needed to generate a queryset of buildings, with keys (q, other_params, project_slug) :user: User inst., django user instance needed for select all queryset and to update the projects’ “last changed” and “last changed by” :copy_flag: bool, True - copy buildings, False - move buildings
seed.utils.time module¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author
- seed.utils.time.convert_datestr(datestr)¶
Converts dates like 12/31/2010 into datetime objects.
- seed.utils.time.convert_to_js_timestamp(timestamp)¶
converts a django/python datetime object to milliseconds since epoch
Module contents¶
:copyright (c) 2014 - 2015, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Department of Energy) and contributors. All rights reserved. # NOQA :author