xmlrpc = require 'xmlrpc' httpproxyagent = require 'https-proxy-agent' _ = require 'underscore' class Shotgun ENTITIES: asset: "Asset" batch: "CustomEntity03" jd_opus: "CustomEntity02" jd_tv: "CustomEntity05" map: "CustomEntity28" task: "Task" version: "Version" search_tags: "CustomEntity09" FIELDS: assets_jd_opus: "sg_map_.CustomEntity28.custom_entity02_sg_maps_custom_entity02s" asset_latest_version: "sg_latest_asset" asset_maps: "sg_map_" asset_type: "sg_asset_type" batch_end_date: "sg_end_date" batch_number: "sg_batch_number" batch_start_date: "sg_start_date" date_created: "created_at" date_updated: "updated_at" description: "description" jd_tv_jd_opus: "sg_jdopus" map_assets: "sg_assets_2" map_batch: "sg_batch00" map_game_mode: "sg_game_mode" map_jdm_attributes: "sg_tags_jdm" map_jd_opus: "custom_entity02_sg_maps_custom_entity02s" map_list: "sg_maps" map_production_studio: "sg_production_studio" map_status: "sg_map_status" map_type: "sg_map_type" name: "code" nas_folder: "sg_nas_folder" task: "sg_task" task_template: "task_template" thumbnail: "image" version_link: "entity" version_uploaded_movie: "sg_uploaded_movie" version_status: "sg_status_list" search_labels: "sg_search_labels" search_tag_loc_id: "sg_loc_id" search_labels_maps: "custom_entity28_sg_search_labels_custom_entity28s" constructor: ( ) -> proxyagent = new httpproxyagent 'http://pun-net-bcproxy.ubisoft.org:3128' @client = xmlrpc.createSecureClient { url: 'http://justdance.shotgunstudio.com/api3' agent: proxyagent } getAuthObject: ( ) -> { script_name: 'shotgate' script_key: 'ce5ad5fb39b240cedc4d2eabafbb6869077fe1dcb562045698e9654b6c1f2752' } getDefaultFilter: ( ) -> [{ values: [ { type: 'Project' id: 67 } ] path: 'project' relation: 'is' }] getDefaultParamsObject: ( ) -> { return_paging_info: true return_fields: ['id', 'content', 'code', 'sg_nas_folder'] return_only: 'active' api_return_image_urls: true paging: current_page: 1 entities_per_page: 500 filters: [] type: '' } generateFilterObject: ( filters ) -> defaults = { conditions:[] logical_operator: 'and' } defaults.conditions = _.union filters, @getDefaultFilter() defaults composeQuery: ( entity, filters = [], return_fields = [] ) -> result = [] params = @getDefaultParamsObject() params.filters = @generateFilterObject(filters) auth = @getAuthObject() params.type = entity params.return_fields = _.union params.return_fields, return_fields result.push auth, params result getProjects: ( ) -> new Promise ( resolve, reject ) => params = @composeQuery(@ENTITIES.jd_opus, [], [@FIELDS.name, @FIELDS.map_assets]) @client.methodCall 'read', params, ( err, value, body ) -> if err? reject(err) else resolve(value.results.entities) getMaps: ( projectCode ) -> new Promise ( resolve, reject ) => params = @composeQuery(@ENTITIES.map, [{ values: [projectCode] path: @FIELDS.map_jd_opus relation: 'name_is' }], [@FIELDS.map_assets]) @client.methodCall 'read', params, ( err, value, body ) -> if err? reject(err) else resolve(value.results.entities) module.exports = Shotgun