Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- KeyError at /api/contacts/605/
- 'number_of_emails'
- Request Method: POST
- Request URL: http://localhost:8000/api/contacts/605/
- Django Version: 1.7.4
- Python Executable: /Users/s21n/Projects/mynameflow/bin/python
- Python Version: 2.7.10
- Python Path: ['/Users/s21n/Projects/mynameflow/mynameflow', '/Users/s21n/Projects/mynameflow/src/django-contact.git', '/Users/s21n/Projects/mynameflow/lib/python27.zip', '/Users/s21n/Projects/mynameflow/lib/python2.7', '/Users/s21n/Projects/mynameflow/lib/python2.7/plat-darwin', '/Users/s21n/Projects/mynameflow/lib/python2.7/plat-mac', '/Users/s21n/Projects/mynameflow/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/s21n/Projects/mynameflow/lib/python2.7/lib-tk', '/Users/s21n/Projects/mynameflow/lib/python2.7/lib-old', '/Users/s21n/Projects/mynameflow/lib/python2.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/s21n/Projects/mynameflow/lib/python2.7/site-packages', '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/Users/s21n/Projects/mynameflow/mynameflow']
- Server time: Tue, 31 May 2016 01:38:11 -0400
- Installed Applications:
- ('gipsy.dashboard',
- 'grappelli',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'django.contrib.sites',
- 'gipsy.toolbar',
- 'django_extensions',
- 'oauth2_provider',
- 'rest_framework',
- 'rest_framework_bulk',
- 'corsheaders',
- 'sorl.thumbnail',
- 'contact',
- 'simple_email_confirmation',
- 'djcelery',
- 'mynameflow.userprofiles',
- 'mynameflow.contacts',
- 'mynameflow.contacts.emailrules',
- 'mynameflow.contacts.aggregates',
- 'mynameflow.contents',
- 'mynameflow.contents.quotes',
- 'mynameflow.contents.events',
- 'mynameflow.mails',
- 'mynameflow.campaigns',
- 'mynameflow.messageboxes',
- 'mynameflow.messageboxes.gmail',
- 'mynameflow.messageboxes.outlook',
- 'mynameflow.messageboxes.custommail',
- 'mynameflow.messageboxes.exchangeserver',
- 'mynameflow.messagetemplates',
- 'mynameflow.emaillogs',
- 'mynameflow.opensrs',
- 'mynameflow.notices',
- 'mynameflow.promo_code',
- 'mynameflow.billings')
- Installed Middleware:
- ('django.contrib.sessions.middleware.SessionMiddleware',
- 'corsheaders.middleware.CorsMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'mynameflow.middleware.OAuth2AuthenticationMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- 'mynameflow.middleware.UserPlanExpireDateMiddleware')
- Traceback:
- File "/Users/s21n/Projects/mynameflow/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
- 111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
- File "/Users/s21n/Projects/mynameflow/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
- 57. return view_func(*args, **kwargs)
- File "/Users/s21n/Projects/mynameflow/lib/python2.7/site-packages/rest_framework/viewsets.py" in view
- 85. return self.dispatch(request, *args, **kwargs)
- File "/Users/s21n/Projects/mynameflow/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
- 407. response = self.handle_exception(exc)
- File "/Users/s21n/Projects/mynameflow/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
- 404. response = handler(request, *args, **kwargs)
- File "/Users/s21n/Projects/mynameflow/lib/python2.7/site-packages/rest_framework/mixins.py" in update
- 68. self.perform_update(serializer)
- File "/Users/s21n/Projects/mynameflow/mynameflow/mynameflow/contacts/api.py" in perform_update
- 160. self.request.user)
- File "/Users/s21n/Projects/mynameflow/mynameflow/mynameflow/contacts/utils.py" in create_or_update_contact_in_aggregate_tables
- 231. create_or_update_aggregate_contacts(contacts, source, user, token)
- File "/Users/s21n/Projects/mynameflow/mynameflow/mynameflow/contacts/aggregates/utils.py" in create_or_update_aggregate_contacts
- 117. _save_contact_email_source(contacts, source, user, token)
- File "/Users/s21n/Projects/mynameflow/mynameflow/mynameflow/contacts/aggregates/utils.py" in _save_contact_email_source
- 50. ) for ces_add in insert_ces])
- Exception Type: KeyError at /api/contacts/605/
- Exception Value: 'number_of_emails'
- Request information:
- GET: No GET data
- POST: No POST data
- FILES: No FILES data
- COOKIES:
- csrftoken = '70cDR59MXvVEfZhnIYD9x4terhjwCWdW'
- sessionid = '6k7jdf7fj3uu55a2pn435d522ro0lmk2'
- META:
- HTTP_AUTHORIZATION = 'Bearer tUQfUp3JA3whlpeQT0JMrbN7vRMqHV'
- RUN_MAIN = 'true'
- rvm_niceness = ''
- LESS = '-R'
- SERVER_SOFTWARE = 'WSGIServer/0.1 Python/2.7.10'
- LC_CTYPE = 'pl_PL.UTF-8'
- TERM_PROGRAM_VERSION = '361.1'
- RUBY_VERSION = 'ruby-2.2.1'
- UPDATE_ZSH_DAYS = '14'
- REQUEST_METHOD = 'POST'
- rvm_gemstone_url = ''
- SERVER_PROTOCOL = 'HTTP/1.1'
- HOME = '/Users/s21n'
- TERM_PROGRAM = 'Apple_Terminal'
- LANG = 'pl_PL.UTF-8'
- wsgi.url_scheme = 'http'
- VIRTUAL_ENV = '/Users/s21n/Projects/mynameflow'
- Apple_PubSub_Socket_Render = '/private/tmp/com.apple.launchd.7SlkZLviLm/Render'
- HTTP_REFERER = 'http://localhost:8000/'
- rvm_quiet_flag = ''
- SECURITYSESSIONID = '186a8'
- XPC_FLAGS = '0x0'
- rvm_sdk = ''
- _ = '/Users/s21n/Projects/mynameflow/bin/python'
- SERVER_PORT = '8000'
- _system_arch = 'x86_64'
- HTTP_PRAGMA = 'no-cache'
- rvm_prefix = '/Users/s21n'
- IRBRC = '/Users/s21n/.rvm/rubies/ruby-2.2.1/.irbrc'
- _system_type = 'Darwin'
- MY_RUBY_HOME = '/Users/s21n/.rvm/rubies/ruby-2.2.1'
- HTTP_HOST = 'localhost:8000'
- SCRIPT_NAME = u''
- HTTP_CACHE_CONTROL = 'no-cache'
- HTTP_ACCEPT = 'application/json, text/javascript, */*; q=0.01'
- rvm_ruby_mode = ''
- wsgi.version =
- rvm_ruby_bits = ''
- rvm_script_name = ''
- wsgi.errors = <open file '<stderr>', mode 'w' at 0x1002931e0>
- wsgi.multiprocess = False
- rvm_hook = ''
- __CF_USER_TEXT_ENCODING = '0x1F5:0:0'
- wsgi.run_once = False
- rvm_docs_type = ''
- _system_version = '10.11'
- HTTP_X_HTTP_METHOD_OVERRIDE = 'PUT'
- rvm_only_path_flag = ''
- GEM_HOME = '/Users/s21n/.rvm/gems/ruby-2.2.1'
- PATH_INFO = u'/api/contacts/605/'
- rvm_proxy = ''
- HTTP_ORIGIN = 'http://localhost:8000'
- HTTP_COOKIE = 'sessionid=6k7jdf7fj3uu55a2pn435d522ro0lmk2; csrftoken=70cDR59MXvVEfZhnIYD9x4terhjwCWdW'
- HTTP_ACCEPT_LANGUAGE = 'pl,en-US;q=0.8,en;q=0.6'
- rvm_gemstone_package_file = ''
- rvm_path = '/Users/s21n/.rvm'
- LOGNAME = 's21n'
- USER = 's21n'
- QUERY_STRING = ''
- PATH = '/Users/s21n/Projects/mynameflow/bin:/Users/s21n/.rvm/gems/ruby-2.2.1/bin:/Users/s21n/.rvm/gems/ruby-2.2.1@global/bin:/Users/s21n/.rvm/rubies/ruby-2.2.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Users/s21n/.rvm/bin'
- PS1 = '(mynameflow)\n%{\x1b[35m%}#%{\x1b[00m%} %{\x1b[1m\x1b[31m%}%n%{\x1b[00m%} %{\x1b[37m%}at %{\x1b[1m\x1b[33m%}s21n %{\x1b[37m%}in %{\x1b[32m%}${PWD/#$HOME/~}%{\x1b[00m%}$(ys_hg_prompt_info)$(git_prompt_info) %{\x1b[37m%}[%*]\n%{\x1b[35m%}$ %{\x1b[00m%}'
- ZSH = '/Users/s21n/.oh-my-zsh'
- TERM = 'ansi'
- HTTP_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36'
- TZ = 'America/New_York'
- HTTP_X_REQUESTED_WITH = 'XMLHttpRequest'
- SERVER_NAME = '1.0.0.127.in-addr.arpa'
- REMOTE_ADDR = '127.0.0.1'
- SHLVL = '1'
- _system_name = 'OSX'
- rvm_bin_flag = ''
- GEM_PATH = '/Users/s21n/.rvm/gems/ruby-2.2.1:/Users/s21n/.rvm/gems/ruby-2.2.1@global'
- rvm_bin_path = '/Users/s21n/.rvm/bin'
- rvm_ruby_make = ''
- CONTENT_LENGTH = '649'
- TERM_SESSION_ID = '2E499E60-218B-4BFA-B1D3-A9EF00164B35'
- XPC_SERVICE_NAME = '0'
- rvm_ruby_file = ''
- HTTP_DNT = '1'
- SSH_AUTH_SOCK = '/private/tmp/com.apple.launchd.bBtlR1HSYb/Listeners'
- rvm_ruby_make_install = ''
- wsgi.input = <socket._fileobject object at 0x107b968d0>
- SHELL = '/bin/zsh'
- wsgi.multithread = True
- rvm_version = '1.26.11 (latest)'
- HTTP_CONNECTION = 'keep-alive'
- TMPDIR = '/var/folders/_l/8q53wtqj4ls8sg88ms7cfthw0000gn/T/'
- LSCOLORS = 'Gxfxcxdxbxegedabagacad'
- rvm_wrapper_name = ''
- rvm_alias_expanded = ''
- GATEWAY_INTERFACE = 'CGI/1.1'
- REMOTE_HOST = ''
- OLDPWD = '/Users/s21n/Projects/mynameflow'
- rvm_use_flag = ''
- rvm_nightly_flag = ''
- PWD = '/Users/s21n/Projects/mynameflow/mynameflow'
- rvm_silent_flag = ''
- DJANGO_SETTINGS_MODULE = 'mynameflow.settings'
- CONTENT_TYPE = 'application/json'
- wsgi.file_wrapper = ''
- PAGER = 'less'
- HTTP_ACCEPT_ENCODING = 'gzip, deflate'
- Settings:
- Using settings module mynameflow.settings
- USE_L10N = True
- CONTACT_SOURCE_GMAIL = 'gmail'
- CSRF_COOKIE_SECURE = False
- LANGUAGE_CODE = 'en-us'
- ROOT_URLCONF = 'mynameflow.urls'
- MANAGERS =
- BASE_DIR = '/Users/s21n/Projects/mynameflow/mynameflow'
- TEST_NON_SERIALIZED_APPS = []
- DEFAULT_CHARSET = 'utf-8'
- SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
- STATIC_ROOT = '/Users/s21n/Projects/mynameflow/mynameflow/static'
- USE_THOUSAND_SEPARATOR = False
- SENDGRID_USERNAME = u'mnfemail'
- ALLOWED_HOSTS = []
- EMAIL_HOST = 'localhost'
- MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
- EMAIL_SUBJECT_PREFIX = '[Django] '
- SEND_BROKEN_LINK_EMAILS = False
- STATICFILES_FINDERS =
- SESSION_CACHE_ALIAS = 'default'
- SESSION_COOKIE_DOMAIN = None
- SESSION_COOKIE_NAME = 'sessionid'
- ADMIN_FOR =
- TIME_INPUT_FORMATS =
- DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'NAME': '/Users/s21n/Projects/mynameflow/mynameflow/db.sqlite3', 'CONN_MAX_AGE': 0, 'TIME_ZONE': 'UTC', 'OPTIONS': {}, 'HOST': '', 'USER': '', 'TEST': {'COLLATION': None, 'CHARSET': None, 'NAME': None, 'MIRROR': None}, 'PASSWORD': u'********************', 'PORT': ''}}
- FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
- CONTACT_US_EMAIL = ['info@mynameflow.com']
- FILE_UPLOAD_PERMISSIONS = None
- GOOGLE_RECAPTCHA_SECRET_KEY = u'********************'
- FILE_UPLOAD_HANDLERS =
- SENDGRID_EVENT_URL = 'http://mynameflow.test.revsquare.com/api/sendgrid/'
- DEFAULT_CONTENT_TYPE = 'text/html'
- MESSAGEBOXES_CONFIG = {'exchangeserver': 'mynameflow.messageboxes.exchangeserver', 'outlook': 'mynameflow.messageboxes.outlook', 'yahoo': 'mynameflow.messageboxes.yahoo', 'custommail': 'mynameflow.messageboxes.custommail', 'gmail': 'mynameflow.messageboxes.gmail'}
- CHARGEOVER_PUBLIC_KEY = u'********************'
- APPEND_SLASH = True
- FIRST_DAY_OF_WEEK = 0
- DATABASE_ROUTERS = []
- DEFAULT_TABLESPACE = ''
- GMAIL_REDIRECT_URI = 'http://127.0.0.1:8000/messagebox/gmail/callback/'
- YEAR_MONTH_FORMAT = 'F Y'
- STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
- CACHES = {'default': {'LOCATION': '/Users/s21n/Projects/mynameflow/mynameflow/.cache', 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache'}}
- CHARGEOVER_ENDPOINT = 'https://mynameflowdev.chargeover.com/api/v3'
- SERVER_EMAIL = 'root@localhost'
- SESSION_COOKIE_PATH = '/'
- WKHTMLTOPDF_CMD = '/usr/bin/wkhtmltopdf'
- GIPSY_TOOLBAR_LOGO = 'http://revsquare.com/static/desktop/img/logo-dark-03.png'
- OPENSRS_USERNAME = 'mnfopensrsapi'
- SILENCED_SYSTEM_CHECKS = []
- MIDDLEWARE_CLASSES =
- USE_I18N = True
- THOUSAND_SEPARATOR = ','
- SECRET_KEY = u'********************'
- DATE_INPUT_FORMATS =
- LANGUAGE_COOKIE_NAME = 'django_language'
- DEFAULT_INDEX_TABLESPACE = ''
- CONTACT_SOURCE_ADDED_BY_USER = 'added_by_user'
- LOGGING_CONFIG = 'logging.config.dictConfig'
- TEMPLATE_LOADERS =
- WSGI_APPLICATION = 'mynameflow.wsgi.application'
- TEMPLATE_DEBUG = True
- X_FRAME_OPTIONS = 'SAMEORIGIN'
- CSRF_COOKIE_NAME = 'csrftoken'
- NOTICE_EMAIL_FROM = u'MyNameFlow <service@mynameflow.com>'
- FORCE_SCRIPT_NAME = None
- USE_X_FORWARDED_HOST = False
- SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
- CONTACT_SOURCE_FACEBOOK = 'facebook'
- SESSION_COOKIE_SECURE = False
- IS_TEST_MODE = False
- CONTACT_SOURCE_OUTLOOK = 'outlook'
- CONTACT_SOURCE_EXCHANGESERVER = 'exchangeserver'
- CSRF_COOKIE_DOMAIN = None
- FILE_CHARSET = 'utf-8'
- DEBUG = True
- LANGUAGE_COOKIE_DOMAIN = None
- DEFAULT_FILE_STORAGE = 'mynameflow.util.storage.DomainStorage'
- INSTALLED_APPS =
- LANGUAGES_BIDI =
- COMMENTS_ALLOW_PROFANITIES = False
- OPENSRS_TASK = False
- PREPEND_WWW = False
- SECURE_PROXY_SSL_HEADER = None
- PASSWORD_RESET_TIMEOUT_DAYS = u'********************'
- LANGUAGE_COOKIE_AGE = None
- SESSION_COOKIE_HTTPONLY = True
- DEBUG_PROPAGATE_EXCEPTIONS = False
- CSRF_COOKIE_AGE = 31449600
- MONTH_DAY_FORMAT = 'F j'
- LOGIN_URL = '/accounts/login/'
- SESSION_EXPIRE_AT_BROWSER_CLOSE = False
- TIME_FORMAT = 'P'
- AUTH_USER_MODEL = 'userprofiles.UserProfile'
- CONTACT_SOURCE_CUSTOMMAIL = 'custommail'
- AUTHENTICATION_BACKENDS = ['mynameflow.auth_backends.EmailOrUsernameModelBackend']
- EMAIL_HOST_PASSWORD = u'********************'
- SENDGRID_USER_PREFIX = 'mynameflow'
- GRAPPELLI_ADMIN_TITLE = u'My Name Flow'
- SERVICE_EMAIL = 'service@mynameflow.com'
- CACHE_MIDDLEWARE_ALIAS = 'default'
- SESSION_SAVE_EVERY_REQUEST = False
- NUMBER_GROUPING = 0
- GOOGLE_RECAPTCHA_SITE_KEY = u'********************'
- SESSION_ENGINE = 'django.contrib.sessions.backends.db'
- CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
- CSRF_COOKIE_PATH = '/'
- CONTACT_SOURCE_YAHOO = 'yahoo'
- LOGIN_REDIRECT_URL = '/accounts/profile/'
- DECIMAL_SEPARATOR = '.'
- IGNORABLE_404_URLS =
- LOCALE_PATHS =
- PASSWORD_HASHERS = u'********************'
- TEMPLATE_STRING_IF_INVALID = ''
- SESSION_FILE_PATH = None
- LOGOUT_URL = '/accounts/logout/'
- OPENSRS_PASSWORD = u'********************'
- EMAIL_USE_TLS = False
- SUPER_USER_EMAIL = ['service@mynameflow.com']
- FIXTURE_DIRS =
- GMAIL_CLIENTSECRETS_LOCATION = u'********************'
- DATE_FORMAT = 'N j, Y'
- CONTACT_SOURCE_LINKEDIN = 'linkedin'
- MEDIA_ROOT = '/Users/s21n/Projects/mynameflow/mynameflow/media'
- DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
- ADMINS =
- FORMAT_MODULE_PATH = None
- DEFAULT_FROM_EMAIL = 'webmaster@localhost'
- REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ('oauth2_provider.ext.rest_framework.OAuth2Authentication', 'rest_framework.authentication.SessionAuthentication'), 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',)}
- STATICFILES_DIRS = '/Users/s21n/Projects/mynameflow/mynameflow/mynameflow/static/build'
- MEDIA_URL = '/media/'
- DATETIME_FORMAT = 'N j, Y, P'
- TEMPLATE_DIRS = '/Users/s21n/Projects/mynameflow/mynameflow/templates'
- CUSTOMMAIL_SEARCH_AFTER = 1825
- FROM_EMAIL_DOMAIN = 'financial1322.com'
- CELERY_ACCEPT_CONTENT =
- SENDGRID_ADD_DATA = False
- SITE_ID = 1
- DISALLOWED_USER_AGENTS =
- ALLOWED_INCLUDE_ROOTS =
- SENDGRID_PASSWORD = u'********************'
- SENDGRID_FROM = u'John Horrocks <jthorrocks@gmail.com>'
- PROCESS_CONTACTS = False
- LOGGING = {}
- SHORT_DATE_FORMAT = 'm/d/Y'
- GMAIL_SEARCH_AFTER = 1
- TEST_RUNNER = 'django.test.runner.DiscoverRunner'
- NOTICE_EMAIL_TO = u'{first_name} {last_name} <{email}>'
- CACHE_MIDDLEWARE_KEY_PREFIX = u'********************'
- TIME_ZONE = 'America/New_York'
- CORS_ORIGIN_ALLOW_ALL = True
- FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
- EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
- NO_REPLY_EMAIL = 'no-reply@mynameflow.com'
- EMAIL_USE_SSL = False
- TEMPLATE_CONTEXT_PROCESSORS =
- CELERY_TASK = False
- MIGRATION_MODULES = {}
- SESSION_COOKIE_AGE = 1209600
- SETTINGS_MODULE = 'mynameflow.settings'
- USE_ETAGS = False
- LANGUAGES =
- FILE_UPLOAD_TEMP_DIR = None
- INTERNAL_IPS =
- STATIC_URL = '/static/'
- CHARGEOVER_CALLBACK_KEY = u'********************'
- EMAIL_PORT = 25
- USE_TZ = True
- SHORT_DATETIME_FORMAT = 'm/d/Y P'
- EXCHANGERSERVER_SEARCH_AFTER = 1825
- ABSOLUTE_URL_OVERRIDES = {}
- LANGUAGE_COOKIE_PATH = '/'
- CHARGEOVER_PRIVATE_KEY = u'********************'
- OUTLOOK_SEARCH_AFTER = 1825
- CACHE_MIDDLEWARE_SECONDS = 600
- CSRF_COOKIE_HTTPONLY = False
- DATETIME_INPUT_FORMATS =
- TRANSACTIONS_MANAGED = False
- YAHOO_SEARCH_AFTER = 1825
- EMAIL_HOST_USER = ''
- PROFANITIES_LIST = u'********************'
- 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 500 page.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement