Last active
May 20, 2017 17:20
-
-
Save joefusaro/74d968dabdd0f1ad1a4e611c6026b469 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
from integrations.utils import convert_str | |
from integrations.salesforce.soap import SalesforceMergeManager | |
from integrations.salesforce.settings import SALESFORCE_FIELDS_TO_IGNORE | |
record_type_mapper = { | |
'SALESFORCE':SalesforceMergeManager | |
} | |
field_names_to_ignore = { | |
'SALESFORCE':SALESFORCE_FIELDS_TO_IGNORE | |
} | |
class MergeManager(object): | |
def __init__(self, duplicate_group_pk, crm_account_pk): | |
self.core_url = core_url = "http://127.0.0.1:8000/api/" | |
self.dup_group_dir = "dupGroup/" | |
self.job_dir = "jobs/" | |
self.dg_pk = duplicate_group_pk | |
self.crm_account_pk = crm_account_pk | |
self.dg_url = self.core_url + self.dup_group_dir + str(self.dg_pk) | |
def update_duplicate_group_status(self, status='ACCEPTED'): | |
""" Update DuplicateGroup object in the datasidekick_dedupe API with | |
a status of ACCEPTED, IGNORED, ERROR or FLAGGED """ | |
return requests.put( | |
self.dg_url, | |
data={'status':status}, | |
auth=('joefusaro', 'johngalt') | |
) | |
def merge(self): | |
# Get DuplicateGroup info from datasidekick_dedupe API | |
response = requests.get(self.dg_url) | |
record_type = response.json()['record_type'] | |
table_name = response.json()['table_name'] | |
diffs = response.json()['diffs'] | |
fields_to_ignore = field_names_to_ignore[record_type][table_name] | |
# Master ID will be sorted and put in the first position | |
master_id = diffs['Id'][0] | |
# There may be >1 slave_ids, so take everything after the 1st position | |
slave_id_list = diffs['Id'][1:] | |
# Set master values | |
diffs.pop('Id') | |
master_values = {} | |
for k,v in diffs.iteritems(): | |
if not k in fields_to_ignore: | |
# Take the 0th item in response.diffs as master/surviving value | |
# except fields that cannot be updated via update/merge requests, | |
# which are passed in as `fields_to_ignore` | |
master_values[k] = v[0] | |
output_log = [] | |
for slave_id in slave_id_list: | |
merge_mngr_type = record_type_mapper[record_type] | |
merge_mngr = merge_mngr_type( | |
self.crm_account_pk, | |
master_id, | |
table_name, | |
slave_id, | |
master_values | |
) | |
output = merge_mngr.post() | |
status_map = {True: 'ACCEPTED', False: 'ERROR'} | |
self.update_duplicate_group_status(status=status_map[output.ok]) | |
output_log.append[output.json()] | |
return output_log |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(venv)Joes-MBP:datasidekick joefusaro$ curl -H "Content-Type: application/json" -X POST -d '{"data_source_pk":9, "duplicate_group_pk":269}' http://127.0.0.1:8000/api/merge | |
JSONDecodeError at /api/merge | |
Expecting value: line 2 column 1 (char 1) | |
Request Method: POST | |
Request URL: http://127.0.0.1:8000/api/merge | |
Django Version: 1.10.2 | |
Python Executable: /Users/joefusaro/datasidekick/venv/bin/python | |
Python Version: 2.7.10 | |
Python Path: ['/Users/joefusaro/datasidekick', '/Users/joefusaro/datasidekick/venv/lib/python27.zip', '/Users/joefusaro/datasidekick/venv/lib/python2.7', '/Users/joefusaro/datasidekick/venv/lib/python2.7/plat-darwin', '/Users/joefusaro/datasidekick/venv/lib/python2.7/plat-mac', '/Users/joefusaro/datasidekick/venv/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/joefusaro/datasidekick/venv/Extras/lib/python', '/Users/joefusaro/datasidekick/venv/lib/python2.7/lib-tk', '/Users/joefusaro/datasidekick/venv/lib/python2.7/lib-old', '/Users/joefusaro/datasidekick/venv/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages', '/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/newrelic-2.80.1.61', '/Users/joefusaro/datasidekick'] | |
Server time: Sat, 20 May 2017 12:52:25 -0400 | |
Installed Applications: | |
['django.contrib.admin', | |
'django.contrib.auth', | |
'django.contrib.contenttypes', | |
'django.contrib.sessions', | |
'django.contrib.messages', | |
'django.contrib.staticfiles', | |
'raven.contrib.django.raven_compat', | |
'celery', | |
'django_celery_results', | |
'django_filters', | |
'crispy_forms', | |
'timezone_field', | |
'organizations', | |
'rest_framework', | |
'rest_framework.authtoken', | |
'rest_framework_swagger', | |
'actstream', | |
'accounts', | |
'accounts_users', | |
'backup', | |
'suggestions', | |
'integrations.salesforce'] | |
Installed Middleware: | |
[u'raven.contrib.django.middleware.SentryMiddleware', | |
'django.contrib.sessions.middleware.SessionMiddleware', | |
'django.middleware.common.CommonMiddleware', | |
'django.middleware.csrf.CsrfViewMiddleware', | |
'django.contrib.auth.middleware.AuthenticationMiddleware', | |
'django.contrib.messages.middleware.MessageMiddleware', | |
'django.middleware.clickjacking.XFrameOptionsMiddleware'] | |
Traceback: | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner | |
39. response = get_response(request) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response | |
187. response = self.process_exception_by_middleware(e, request) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response | |
185. response = wrapped_callback(request, *callback_args, **callback_kwargs) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view | |
58. return view_func(*args, **kwargs) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/django/views/generic/base.py" in view | |
68. return self.dispatch(request, *args, **kwargs) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/rest_framework/views.py" in dispatch | |
477. response = self.handle_exception(exc) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/rest_framework/views.py" in handle_exception | |
437. self.raise_uncaught_exception(exc) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/rest_framework/views.py" in dispatch | |
474. response = handler(request, *args, **kwargs) | |
File "/Users/joefusaro/datasidekick/integrations/views.py" in post | |
46. result = mm.merge() | |
File "/Users/joefusaro/datasidekick/integrations/merge.py" in merge | |
36. record_type = response.json()['record_type'] | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/requests/models.py" in json | |
850. return complexjson.loads(self.text, **kwargs) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/simplejson/__init__.py" in loads | |
516. return _default_decoder.decode(s) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/simplejson/decoder.py" in decode | |
374. obj, end = self.raw_decode(s) | |
File "/Users/joefusaro/datasidekick/venv/lib/python2.7/site-packages/simplejson/decoder.py" in raw_decode | |
404. return self.scan_once(s, idx=_w(s, idx).end()) | |
Exception Type: JSONDecodeError at /api/merge | |
Exception Value: Expecting value: line 2 column 1 (char 1) | |
Request information: | |
USER: AnonymousUser | |
GET: No GET data | |
POST: No POST data | |
FILES: No FILES data | |
COOKIES: No cookie data | |
META: | |
Apple_PubSub_Socket_Render = '/private/tmp/com.apple.launchd.tgSq9m41x1/Render' | |
CONTENT_LENGTH = '46' | |
CONTENT_TYPE = 'application/json' | |
DJANGO_SETTINGS_MODULE = 'datasidekick.settings' | |
GATEWAY_INTERFACE = 'CGI/1.1' | |
HOME = '/Users/joefusaro' | |
HTTP_ACCEPT = '*/*' | |
HTTP_HOST = '127.0.0.1:8000' | |
HTTP_USER_AGENT = 'curl/7.43.0' | |
LANG = 'en_US.UTF-8' | |
LOGNAME = 'joefusaro' | |
OLDPWD = '/Users/joefusaro' | |
PATH = '/Users/joefusaro/datasidekick/venv/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/local/heroku/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin' | |
PATH_INFO = u'/api/merge' | |
PS1 = '(venv)\\h:\\W \\u\\$ ' | |
PWD = '/Users/joefusaro/datasidekick' | |
QUERY_STRING = '' | |
REMOTE_ADDR = '127.0.0.1' | |
REMOTE_HOST = '' | |
REQUEST_METHOD = 'POST' | |
RUN_MAIN = 'true' | |
SCRIPT_NAME = u'' | |
SERVER_NAME = '1.0.0.127.in-addr.arpa' | |
SERVER_PORT = '8000' | |
SERVER_PROTOCOL = 'HTTP/1.1' | |
SERVER_SOFTWARE = 'WSGIServer/0.1 Python/2.7.10' | |
SHELL = '/bin/bash' | |
SHLVL = '1' | |
SSH_AUTH_SOCK = '/private/tmp/com.apple.launchd.3f5SxZIPOa/Listeners' | |
TERM = 'xterm-256color' | |
TERM_PROGRAM = 'Apple_Terminal' | |
TERM_PROGRAM_VERSION = '343.7' | |
TERM_SESSION_ID = '8F85D624-BE60-4A26-B33C-81110481F787' | |
TMPDIR = '/var/folders/cx/tg__wxsx0kd_xqljckxy0vyw0000gn/T/' | |
TZ = 'America/New_York' | |
USER = 'joefusaro' | |
VERSIONER_PYTHON_PREFER_32_BIT = 'no' | |
VERSIONER_PYTHON_VERSION = '2.7' | |
VIRTUAL_ENV = '/Users/joefusaro/datasidekick/venv' | |
XPC_FLAGS = '0x0' | |
XPC_SERVICE_NAME = '0' | |
_ = '/Users/joefusaro/datasidekick/venv/bin/python' | |
__CF_USER_TEXT_ENCODING = '0x1F5:0x0:0x0' | |
wsgi.errors = <open file '<stderr>', mode 'w' at 0x10ab881e0> | |
wsgi.file_wrapper = '' | |
wsgi.input = <socket._fileobject object at 0x10eb32c50> | |
wsgi.multiprocess = False | |
wsgi.multithread = True | |
wsgi.run_once = False | |
wsgi.url_scheme = 'http' | |
wsgi.version = | |
Settings: | |
Using settings module datasidekick.settings | |
ABSOLUTE_URL_OVERRIDES = {} | |
ADMINS = [] | |
ALLOWED_HOSTS = ['*'] | |
APPEND_SLASH = False | |
AUTHENTICATION_BACKENDS = [u'django.contrib.auth.backends.ModelBackend'] | |
AUTH_PASSWORD_VALIDATORS = u'********************' | |
AUTH_USER_MODEL = 'accounts_users.CustomUser' | |
BASE_DIR = '/Users/joefusaro/datasidekick' | |
BROKER_CONNECTION_TIMEOUT = 30 | |
BROKER_HEARTBEAT = None | |
BROKER_POOL_LIMIT = 1 | |
BROKER_URL = 'redis://localhost:6379' | |
CACHES = {u'default': {u'BACKEND': u'django.core.cache.backends.locmem.LocMemCache'}} | |
CACHE_MIDDLEWARE_ALIAS = u'default' | |
CACHE_MIDDLEWARE_KEY_PREFIX = u'********************' | |
CACHE_MIDDLEWARE_SECONDS = 600 | |
CELERYBEAT_SCHEDULE = {'create-backup-jobs-for-active-datasources': {'task': 'backup.tasks.create_daily_backup_jobs', 'schedule': <crontab: 0 */1 * * * (m/h/d/dM/MY)>}} | |
CELERYD_HIJACK_ROOT_LOGGER = False | |
CELERYD_LOG_LEVEL = 'DEBUG' | |
CELERY_IGNORE_RESULT = False | |
CELERY_RESULT_BACKEND = 'redis://localhost:6379' | |
CSRF_COOKIE_AGE = 31449600 | |
CSRF_COOKIE_DOMAIN = None | |
CSRF_COOKIE_HTTPONLY = False | |
CSRF_COOKIE_NAME = u'csrftoken' | |
CSRF_COOKIE_PATH = u'/' | |
CSRF_COOKIE_SECURE = False | |
CSRF_FAILURE_VIEW = u'django.views.csrf.csrf_failure' | |
CSRF_HEADER_NAME = u'HTTP_X_CSRFTOKEN' | |
CSRF_TRUSTED_ORIGINS = [] | |
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'NAME': 'datasidekick', 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'PORT': '5432', 'HOST': 'localhost', 'USER': 'joefusaro', 'TEST': {'COLLATION': None, 'CHARSET': None, 'NAME': None, 'MIRROR': None}, 'PASSWORD': u'********************', 'OPTIONS': {}}} | |
DATABASE_ROUTERS = [] | |
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 | |
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 | |
DATETIME_FORMAT = u'N j, Y, P' | |
DATETIME_INPUT_FORMATS = [u'%Y-%m-%d %H:%M:%S', u'%Y-%m-%d %H:%M:%S.%f', u'%Y-%m-%d %H:%M', u'%Y-%m-%d', u'%m/%d/%Y %H:%M:%S', u'%m/%d/%Y %H:%M:%S.%f', u'%m/%d/%Y %H:%M', u'%m/%d/%Y', u'%m/%d/%y %H:%M:%S', u'%m/%d/%y %H:%M:%S.%f', u'%m/%d/%y %H:%M', u'%m/%d/%y'] | |
DATE_FORMAT = u'N j, Y' | |
DATE_INPUT_FORMATS = [u'%Y-%m-%d', u'%m/%d/%Y', u'%m/%d/%y', u'%b %d %Y', u'%b %d, %Y', u'%d %b %Y', u'%d %b, %Y', u'%B %d %Y', u'%B %d, %Y', u'%d %B %Y', u'%d %B, %Y'] | |
DEBUG = True | |
DEBUG_PROPAGATE_EXCEPTIONS = False | |
DECIMAL_SEPARATOR = u'.' | |
DEFAULT_CHARSET = u'utf-8' | |
DEFAULT_CONTENT_TYPE = u'text/html' | |
DEFAULT_EXCEPTION_REPORTER_FILTER = u'django.views.debug.SafeExceptionReporterFilter' | |
DEFAULT_FILE_STORAGE = u'django.core.files.storage.FileSystemStorage' | |
DEFAULT_FROM_EMAIL = u'webmaster@localhost' | |
DEFAULT_INDEX_TABLESPACE = u'' | |
DEFAULT_TABLESPACE = u'' | |
DISALLOWED_USER_AGENTS = [] | |
EMAIL_BACKEND = u'django.core.mail.backends.smtp.EmailBackend' | |
EMAIL_HOST = u'localhost' | |
EMAIL_HOST_PASSWORD = u'********************' | |
EMAIL_HOST_USER = u'' | |
EMAIL_PORT = 25 | |
EMAIL_SSL_CERTFILE = None | |
EMAIL_SSL_KEYFILE = u'********************' | |
EMAIL_SUBJECT_PREFIX = u'[Django] ' | |
EMAIL_TIMEOUT = None | |
EMAIL_USE_SSL = False | |
EMAIL_USE_TLS = False | |
FILE_CHARSET = u'utf-8' | |
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None | |
FILE_UPLOAD_HANDLERS = [u'django.core.files.uploadhandler.MemoryFileUploadHandler', u'django.core.files.uploadhandler.TemporaryFileUploadHandler'] | |
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 | |
FILE_UPLOAD_PERMISSIONS = None | |
FILE_UPLOAD_TEMP_DIR = None | |
FIRST_DAY_OF_WEEK = 0 | |
FIXTURE_DIRS = [] | |
FORCE_SCRIPT_NAME = None | |
FORMAT_MODULE_PATH = None | |
IGNORABLE_404_URLS = [] | |
INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'raven.contrib.django.raven_compat', 'celery', 'django_celery_results', 'django_filters', 'crispy_forms', 'timezone_field', 'organizations', 'rest_framework', 'rest_framework.authtoken', 'rest_framework_swagger', 'actstream', 'accounts', 'accounts_users', 'backup', 'suggestions', 'integrations.salesforce'] | |
INTERNAL_IPS = [] | |
LANGUAGES = [(u'af', u'Afrikaans'), (u'ar', u'Arabic'), (u'ast', u'Asturian'), (u'az', u'Azerbaijani'), (u'bg', u'Bulgarian'), (u'be', u'Belarusian'), (u'bn', u'Bengali'), (u'br', u'Breton'), (u'bs', u'Bosnian'), (u'ca', u'Catalan'), (u'cs', u'Czech'), (u'cy', u'Welsh'), (u'da', u'Danish'), (u'de', u'German'), (u'dsb', u'Lower Sorbian'), (u'el', u'Greek'), (u'en', u'English'), (u'en-au', u'Australian English'), (u'en-gb', u'British English'), (u'eo', u'Esperanto'), (u'es', u'Spanish'), (u'es-ar', u'Argentinian Spanish'), (u'es-co', u'Colombian Spanish'), (u'es-mx', u'Mexican Spanish'), (u'es-ni', u'Nicaraguan Spanish'), (u'es-ve', u'Venezuelan Spanish'), (u'et', u'Estonian'), (u'eu', u'Basque'), (u'fa', u'Persian'), (u'fi', u'Finnish'), (u'fr', u'French'), (u'fy', u'Frisian'), (u'ga', u'Irish'), (u'gd', u'Scottish Gaelic'), (u'gl', u'Galician'), (u'he', u'Hebrew'), (u'hi', u'Hindi'), (u'hr', u'Croatian'), (u'hsb', u'Upper Sorbian'), (u'hu', u'Hungarian'), (u'ia', u'Interlingua'), (u'id', u'Indonesian'), (u'io', u'Ido'), (u'is', u'Icelandic'), (u'it', u'Italian'), (u'ja', u'Japanese'), (u'ka', u'Georgian'), (u'kk', u'Kazakh'), (u'km', u'Khmer'), (u'kn', u'Kannada'), (u'ko', u'Korean'), (u'lb', u'Luxembourgish'), (u'lt', u'Lithuanian'), (u'lv', u'Latvian'), (u'mk', u'Macedonian'), (u'ml', u'Malayalam'), (u'mn', u'Mongolian'), (u'mr', u'Marathi'), (u'my', u'Burmese'), (u'nb', u'Norwegian Bokm\xe5l'), (u'ne', u'Nepali'), (u'nl', u'Dutch'), (u'nn', u'Norwegian Nynorsk'), (u'os', u'Ossetic'), (u'pa', u'Punjabi'), (u'pl', u'Polish'), (u'pt', u'Portuguese'), (u'pt-br', u'Brazilian Portuguese'), (u'ro', u'Romanian'), (u'ru', u'Russian'), (u'sk', u'Slovak'), (u'sl', u'Slovenian'), (u'sq', u'Albanian'), (u'sr', u'Serbian'), (u'sr-latn', u'Serbian Latin'), (u'sv', u'Swedish'), (u'sw', u'Swahili'), (u'ta', u'Tamil'), (u'te', u'Telugu'), (u'th', u'Thai'), (u'tr', u'Turkish'), (u'tt', u'Tatar'), (u'udm', u'Udmurt'), (u'uk', u'Ukrainian'), (u'ur', u'Urdu'), (u'vi', u'Vietnamese'), (u'zh-hans', u'Simplified Chinese'), (u'zh-hant', u'Traditional Chinese')] | |
LANGUAGES_BIDI = [u'he', u'ar', u'fa', u'ur'] | |
LANGUAGE_CODE = 'en-us' | |
LANGUAGE_COOKIE_AGE = None | |
LANGUAGE_COOKIE_DOMAIN = None | |
LANGUAGE_COOKIE_NAME = u'django_language' | |
LANGUAGE_COOKIE_PATH = u'/' | |
LOCALE_PATHS = [] | |
LOCAL_STORAGE = './backup/jsondata/' | |
LOGGING = {'loggers': {'celery': {'level': 'DEBUG', 'propagate': False, 'handlers': ['sentry', 'console']}, 'django': {'level': 'INFO', 'propagate': False, 'handlers': ['console', 'sentry']}, 'sentry.errors': {'level': 'INFO', 'propagate': False, 'handlers': ['console']}, 'django.db.backends': {'level': 'ERROR', 'propagate': False, 'handlers': ['console', 'sentry']}, 'raven': {'level': 'INFO', 'propagate': False, 'handlers': ['console']}}, 'disable_existing_loggers': True, 'handlers': {'sentry': {'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', 'level': 'ERROR'}, 'console': {'formatter': 'verbose', 'class': 'logging.StreamHandler', 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'}}, 'version': 1, 'root': {'level': 'INFO', 'handlers': ['sentry']}} | |
LOGGING_CONFIG = u'logging.config.dictConfig' | |
LOGIN_REDIRECT_URL = u'/accounts/profile/' | |
LOGIN_URL = u'/accounts/login/' | |
LOGOUT_REDIRECT_URL = None | |
MANAGERS = [] | |
MEDIA_ROOT = '/Users/joefusaro/datasidekick/media' | |
MEDIA_URL = '/media/' | |
MESSAGE_STORAGE = u'django.contrib.messages.storage.fallback.FallbackStorage' | |
MIDDLEWARE = [u'raven.contrib.django.middleware.SentryMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] | |
MIDDLEWARE_CLASSES = [u'django.middleware.common.CommonMiddleware', u'django.middleware.csrf.CsrfViewMiddleware'] | |
MIGRATION_MODULES = {} | |
MONTH_DAY_FORMAT = u'F j' | |
NUMBER_GROUPING = 0 | |
PASSWORD_HASHERS = u'********************' | |
PASSWORD_RESET_TIMEOUT_DAYS = u'********************' | |
PREPEND_WWW = False | |
RAVEN_CONFIG = {'dsn': 'https://e77b6118ea984add8f24ac7cdad38e7d:8bec404711e94277a4077b43550d5c9a@sentry.io/125459', 'release': u'f517d79eaa4428bb93420ce36821d6df0c104c84'} | |
REDIS_URL = 'redis://localhost:6379' | |
REST_FRAMEWORK = {'DEFAULT_PARSER_CLASSES': ('rest_framework.parsers.JSONParser',), 'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.TokenAuthentication', 'rest_framework.authentication.SessionAuthentication'), 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)} | |
ROOT_URLCONF = 'datasidekick.urls' | |
SECRET_KEY = u'********************' | |
SECURE_BROWSER_XSS_FILTER = False | |
SECURE_CONTENT_TYPE_NOSNIFF = False | |
SECURE_HSTS_INCLUDE_SUBDOMAINS = False | |
SECURE_HSTS_SECONDS = 0 | |
SECURE_PROXY_SSL_HEADER = None | |
SECURE_REDIRECT_EXEMPT = [] | |
SECURE_SSL_HOST = None | |
SECURE_SSL_REDIRECT = False | |
SERVER_EMAIL = u'root@localhost' | |
SESSION_CACHE_ALIAS = u'default' | |
SESSION_COOKIE_AGE = 1209600 | |
SESSION_COOKIE_DOMAIN = None | |
SESSION_COOKIE_HTTPONLY = True | |
SESSION_COOKIE_NAME = u'sessionid' | |
SESSION_COOKIE_PATH = u'/' | |
SESSION_COOKIE_SECURE = False | |
SESSION_ENGINE = u'django.contrib.sessions.backends.db' | |
SESSION_EXPIRE_AT_BROWSER_CLOSE = False | |
SESSION_FILE_PATH = None | |
SESSION_SAVE_EVERY_REQUEST = False | |
SESSION_SERIALIZER = u'django.contrib.sessions.serializers.JSONSerializer' | |
SETTINGS_MODULE = 'datasidekick.settings' | |
SHORT_DATETIME_FORMAT = u'm/d/Y P' | |
SHORT_DATE_FORMAT = u'm/d/Y' | |
SIGNING_BACKEND = u'django.core.signing.TimestampSigner' | |
SILENCED_SYSTEM_CHECKS = [] | |
STATICFILES_DIRS = [] | |
STATICFILES_FINDERS = [u'django.contrib.staticfiles.finders.FileSystemFinder', u'django.contrib.staticfiles.finders.AppDirectoriesFinder'] | |
STATICFILES_STORAGE = u'django.contrib.staticfiles.storage.StaticFilesStorage' | |
STATIC_ROOT = '/Users/joefusaro/datasidekick/../www/static' | |
STATIC_URL = '/static/' | |
TEMPLATES = [{'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}, 'BACKEND': 'django.template.backends.django.DjangoTemplates'}] | |
TEST_NON_SERIALIZED_APPS = [] | |
TEST_RUNNER = u'django.test.runner.DiscoverRunner' | |
THOUSAND_SEPARATOR = u',' | |
TIME_FORMAT = u'P' | |
TIME_INPUT_FORMATS = [u'%H:%M:%S', u'%H:%M:%S.%f', u'%H:%M'] | |
TIME_ZONE = 'America/New_York' | |
TRAINING_DATA_STORAGE = './suggestions/training/' | |
USE_ETAGS = False | |
USE_I18N = True | |
USE_L10N = True | |
USE_THOUSAND_SEPARATOR = False | |
USE_TZ = True | |
USE_X_FORWARDED_HOST = False | |
USE_X_FORWARDED_PORT = False | |
WSGI_APPLICATION = 'datasidekick.wsgi.application' | |
X_FRAME_OPTIONS = u'SAMEORIGIN' | |
YEAR_MONTH_FORMAT = u'F Y' | |
You're seeing this error because you have DEBUG = True in your | |
Django settings file. Change that to False, and Django will | |
display a standard page generated by the handler for this status code. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from rest_framework import permissions | |
from rest_framework.parsers import JSONParser | |
from rest_framework.response import Response | |
from rest_framework.views import APIView | |
from backup.models import DataSource | |
from integrations.merge import MergeManager | |
from backup.serializers import SuggestionSerializer | |
class MergeView(APIView): | |
""" | |
Expects a list of DataSource primary keys (data_source_pk) and | |
DuplicateGroup primary keys (duplicate_group_pk). Executes merge(s) in the | |
target system, like Salesforce or Marketo. | |
An example using curl to update two different Change record IDs: | |
curl -H "Content-Type: application/json" -X POST -d | |
'{"data_source_pk":12, "duplicate_group_pk":1039}' | |
http://127.0.0.1:8001/api/merge | |
""" | |
# permission_classes = (permissions.IsAuthenticated,) | |
serializer_class = SuggestionSerializer | |
parser_classes = (JSONParser,) | |
def post(self, request): | |
# TODO - move this into Celery task; expect multiple merge requests! | |
data_source = DataSource.objects.get(pk=request.data['data_source_pk']) | |
mm = MergeManager( | |
crm_account_pk=data_source.data_source.pk, | |
duplicate_group_pk=request.data['duplicate_group_pk'] | |
) | |
result = mm.merge() | |
return Response(result) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment